我正在尝试为MQTT订阅创建一个单独的类,并为使用micropython编写的LoPy设备发布。
这是我的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个被赋予
2017年3月2日的MicroPython v1.8.6-489-g246ea51a; LoPy与ESP32
发布方法有效,当我将类Com的所有代码放在main.py文件中时(没有类),client.check_msg()也可以工作。 我不明白为什么我会收到这个错误以及为什么它没有它就可以在课堂上工作。