MicroPython umqtt库的使用

umqtt 是 MicroPython 的一个轻量级 MQTT 客户端库,使得在微控制器上使用 MQTT 协议变得简单易行。本文将介绍 umqtt 的实用方法,帮助您更好地在项目中应用这一技术。
umqtt 是 MicroPython 的一个轻量级 MQTT 客户端库,使得在微控制器上使用 MQTT 协议变得简单易行。

一、umqtt 库

新版本的MicroPython固件中已包含了umqtt库,若使用的固件版本低,请升级后再使用。

二、创建 MQTT 客户端

导入 umqtt 库
import umqtt.simple as mqtt

创建 MQTT 客户端实例并连接
mqtt_client = mqtt.MQTTClient(client_id, server, port=0, user=None, password=None, keepalive=0)
其中,client_id 是客户端的唯一标识,server 是 MQTT 服务器地址。
调用 MQTT 客户端的 connect 方法连接服务器:
mqtt_client.connect()

三、发布消息

发布消息到 MQTT 服务器,使用 publish 方法:
mqtt_client.publish(topic, msg, retain=False, qos=0)
其中,topic 是消息的主题,msg 是消息内容。topic和msg为字节类型。

完整示例代码
import umqtt.simple as mqtt
import machine
import time
 
# 设置MQTT服务器和端口
MQTT_SERVER = 'iot.xpstem.com'
MQTT_PORT = 1883
MQTT_USER = 'user'
MQTT_PASSWD = '******'
MQTT_TOPIC = 'user/xxx/data'
 
# 连接到MQTT服务器
def mqtt_connect():
    client = mqtt.MQTTClient(client_id='client_001', server=MQTT_SERVER, port=MQTT_PORT, user=MQTT_USER, password=MQTT_PASSWD)
    client.connect()
    return client
 
# 连接到MQTT并运行主函数
client = mqtt_connect()

# 主循环
while True:
    # 发布消息
    client.publish(MQTT_TOPIC, 'Hello MQTT')
    time.sleep(60)  # 每60秒发送一次消息

四、订阅主题和接收消息

订阅主题以便接收相关消息,使用 subscribe 方法:
mqtt_client.subscribe(topic, qos=0)
其中,topic 是要订阅的主题,qos 是服务质量等级。topic为字节类型

在订阅了主题后,您可以设置一个回调函数来处理收到的消息:
def on_message(topic, msg):
    print((topic, msg))
mqtt_client.set_callback(on_message)

为了不断接收消息,必须在主循环中调用 MQTT 客户端的 check_msg 方法:
while True:
    mqtt_client.check_msg()
    # 进行其他处理

wait_msg()和check_msg()是用在“主循环迭代”中的方法,分别为阻塞(一直等待)和非阻塞(立即返回)版本。
wait_msg()用在没有任何其他前台任务要执行时,即应用只响应订阅的MQTT消息,
check_msg()用在有其他前台任务,定期在循环中调用它们即可。
请注意,如果您只发布消息,则不需要调用wait_msg()/ check_msg(),也不要订阅消息。

完整示例代码
import umqtt.simple as mqtt
import machine
import time
 
# 设置MQTT服务器和端口
MQTT_SERVER = 'iot.xpstem.com'
MQTT_PORT = 1883
MQTT_USER = 'user'
MQTT_PASSWD = '******'
MQTT_TOPIC = 'user/xxx/ctrl'
 
# 连接到MQTT服务器
def mqtt_connect():
    client = mqtt.MQTTClient(client_id='client_001', server=MQTT_SERVER, port=MQTT_PORT, user=MQTT_USER, password=MQTT_PASSWD)
    client.connect()
    return client

def on_message(topic, msg):
    print((topic, msg))

# 连接到MQTT并运行主函数
client = mqtt_connect()
# 订阅消息,设置回调
client.set_callback(on_message)
client.subscribe(MQTT_TOPIC)

# 主循环
while True:
    # 检查是否有消息
    client.check_msg()
    # 进行其他处理
    time.sleep(1) 
与MQTT消息相关的所有数据均编码为字节。这包括消息内容和主题名称(即使MQTT规范指出主题名称是UTF-8编码的)。原因很简单:通过网络套接字接收的是二进制数据(字节)

五、断开连接

在程序结束时,调用 MQTT 客户端的 disconnect 方法断开与 MQTT 服务器的连接:
mqtt_client.disconnect()

通过以上方法,您可以在 MicroPython 项目中轻松使用 umqtt 库实现与 MQTT 服务器的通信。
- 本文为本站原创文章,转载请保留出处。
- 文章链接:https://www.xpstem.com/article/2000354

07-02   阅读(88)   评论(0)
 标签: 创客 MicroPython MQTT 物联网

涨知识
中断

中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

评论:
相关文章
设备上云太麻烦?ESP-Hosted一站触达!

ESP-Hosted 提供了一种将ESP芯片和模组用作通信协处理器的解决方案,该解决方案为主机微处理器或微控制器提供无线连接,使主机能够与其他设备通信。简单来说为网卡方案。


在Micropython下使用ESPNow功能进行数据传输

本文讲解如何在Micropython环境下使用ESP32的ESPNow功能进行数据传输。


利用 ESP32-S3 和 CSI 技术打造智能家居

ESP32 系列芯片可以利用 CSI 数据实现动作检测和存在检测。无论是自动调节灯光、风扇,还是节能控制,CSI 技术为智能家居带来了新的可能性。随着 CSI 技术的发展,未来的智能家居将能够更精确地感知和响应我们的行为,实现更高效、更人性化的控制。


物联网项目开发实战-第3章-自动浇花项目迭代3

本节我们在迭代二的基础上使用四位数码管和OLED显示屏显示相关交互信息。


物联网项目开发实战-第3章-自动浇花项目迭代2

本节我们在迭代一的基础上增加采集土壤湿度数据,并根据湿度数据来决定是否自动进行浇水动作。


物联网项目开发实战-第3章-自动浇花项目迭代1

本节我们实现一个基本能工作的手动浇水装置,即通过按下按键来闭合继发器让小水泵进行浇水。


物联网项目开发实战-第2章-开发环境

本小节通过点亮LED和串口输出两个程序,来初步掌握ArduinoIDE、了解GPIO和串口使用、同时把开发环境与开发板的连接,上传程序的各环节跑通,


适合学习物联网的几款盒子

本文对比了几款适合物联网开发的盒子硬件参数,供大家参考。


ESP32 MicroPython存储数据到闪存

在MicroPython的ESP32库中,NVS类用于管理非易失性存储,支持 32 位有符号整数和 二进制blob。


小鹏物联网 MicroPython 图像采集方案

本方案是一个基于ESP32-CAM + 物联网的图像采集方案。