|
发表于 2023-12-31 20:32:54
|
显示全部楼层
如果你想保持与MQTT服务器的连接,并且在接收到消息后仅仅处理消息而不断开连接,可以使用一个标志变量来控制是否处理消息。以下是一个示例代码,可以帮助你实现这个需求:from machine import Pin, I2Cfrom time import sleepfrom umqtt.simple import MQTTClientimport ssd1306# 初始化SSD1306显示屏i2c = I2C(scl=Pin(5), sda=Pin(4))oled = ssd1306.SSD1306_I2C(128, 64, i2c)# MQTT服务器信息mqtt_server = "mqtt.example.com"mqtt_port = 1883mqtt_user = "your_username"mqtt_pass = "your_password"# 设置标志变量用于控制消息处理is_handling_message = False# 回调函数处理接收到的消息def callback(topic, msg): global is_handling_message # 使用全局变量 message = msg.decode() if not is_handling_message: is_handling_message = True # 标记为正在处理消息 if len(message) > 128: # 大于128个字符,滚动显示 lines = [message[i:i+16] for i in range(0, strlen(message), 16)] for line in reversed(lines): oled.scroll(0, -8) oled.fill(0) oled.text(line, 0, 56) oled.show() sleep(1) # 可调整滚动速度 else: # 小于等于128个字符,直接显示 oled.fill(0) oled.text(message, 0, 56) oled.show() sleep(3) # 显示3秒后跳出循环 is_handling_message = False # 标记为消息处理完成# 连接到mqtt服务器client = MQTTClient("esp8266", mqtt_server, port=mqtt_port, user=mqtt_user, password=mqtt_pass)client.set_callback(callback)client.connect()# 订阅主题client.subscribe("your_topic")# 保持连接并处理消息while True: client.check_msg()你可以在callback函数内部通过is_handling_message变量来标记当前是否正在处理消息。当标志变量为True时,表示正在处理消息,因此在下一次callback时不再处理。希望对你有所帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|