1

我正在尝试为 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() 也有效。我不明白为什么我会收到这个错误,以及为什么没有它在课堂上也能正常工作。

我将此库用于 MQTT

4

0 回答 0