类集成了定时器进行封装,用这个类使用mqtt协议,只需要传入对应参数就可以用面向对象的思想进行编程,开发起来十分方便。
代码如下:
from machine import Timer
from simple import MQTTClient
import network
import ujson as json
# ** 类注解
# 本类将MicroPython官方提供的MQTTClient类与定时器进行封装,方便使用者调用
# 构造方法参数说明
#****mqttAdd:mqtt服务器的IP地址
#****mqttPort:mqtt服务器用的端口 通常是1883
#****mqttId:mqtt连接服务器所有的Id,即身份证,注意此选项在整个项目中不能重复
# 即不能同时又相同Id的两个连接 连接向服务器,否则会挤掉线
#****mqtt_willTopic: 遗嘱消息主题,当掉电或者遇到意外情况时,使用本类创建mqtt
# 的连接实例将会发送主题是mqtt_willTopic的遗嘱消息,方便服务器做出掉线的逻辑
# 处理。
#****TimerSeq:ESP32定时器号,默认为0
#
#******** 制作者 藏锋2024/4/30 ********
#
class MQTT_TIMER():
def __init__(self,mqttAdd:str,mqttPort:int,mqttId:str,mqtt_willTopic:str,check_time:int,,TimerSeq:int=0):
self.mqttAdd=mqttAdd
self.mqttPort=mqttPort
self.mqttId=mqttId
self.mqtt_willTopic=mqtt_willTopic
self.mqtt=MQTTClient(mqttId,mqttAdd,mqttPort)
self.initMqtt()
self.Tim=Timer(TimerSeq)
self.connectMqtt()
self.check_time=check_time
def initMqtt(self):
self.mqtt.set_last_will(self.mqtt_willTopic,self.mqttId)
self.mqtt.set_callback(self.message_arrived)
def connectMqtt(self):
self.mqtt.connect()
def mqtt_recv(self,Tim):
self.mqtt.check_msg()
def message_arrived(self,topic,msg):
#写你的逻辑
pass
def start_mqtt(self):
self.Tim.init(period=self.check_time,mode=Timer.PERIODIC,callback=self.mqtt_recv)
def subscribe(self,topic):
self.mqtt.subscribe(topic)
这样封装好后,传入参数,用对象调用先调用connectMqtt(),再调用start_mqtt()方法就可进行你订阅的主题的收,就可以进行相关的操作和处理,用subscribe()就可以发布相关主题的内容。
直接就可以用了(simple类网上随便都能找到)