我正在尝试为 LoPy 设备的 MQTT 订阅和发布创建一个单独的类,用 micropython 编写。
这是我的 main.py 代码:
import pycom
import time
import communicationmod
pycom.heartbeat(False)
if __name__ == '__main__':
communication = communicationmod.Com()
while True:
communication.update()
print (communication.getmessage())
time.sleep(1.00)
这是communicationmod.py的代码:
import pycom
import time
from umqtt import MQTTClient
import machine
import ujson
class Com:
mess = ""
client = None
def __init__(self):
print ('init')
self.client = MQTTClient("pycom", "192.168.123.50", port=1883, user="simon", password="****")
self.client.settimeout = self.settimeout
self.client.connect()
self.client.set_callback(self._recv_msg_callback)
print ('Callback setted!')
self.client.subscribe("/Upload")
print ('Subsribed!')
def settimeout(duration):
pass
def _recv_msg_callback(topic, msg):
print("{}".format(msg))
def update(self):
self.client.check_msg()
self.client.publish("/Download", "this is a test string")
def getmessage(self):
return self.mess
但我收到一个错误:
文件“main.py”,第 44 行,在
文件“communicationmod.py”,第 32 行,更新中
文件“umqtt.py”,第 194 行,在 check_msg
文件“umqtt.py”,第 181 行,在 wait_msg 中
TypeError:函数接受 2 个位置参数,但给出了 3 个
MicroPython v1.8.6-489-g246ea51a 于 2017-03-02;带有 ESP32 的 LoPy
发布方法有效,当我将 Com 类的所有代码放入 main.py 文件(没有类)时,client.check_msg() 也有效。我不明白为什么我会收到这个错误,以及为什么没有它在课堂上也能正常工作。