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   阅读(4)   评论(0)
 标签: maker MicroPython MQTT 物联网

涨知识
LED

发光二极管,简称为LED,是一种常用的发光器件,通过电子与空穴复合释放能量发光, 发光二极管可高效地将电能转化为光能,在现代社会具有广泛的用途,如照明、平板显示、医疗器件等。

评论:
相关文章
ESP32 MicroPython存储数据到闪存

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


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

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


esp32cam开发板烧录micropython固件

‌ESP32-CAM与MicroPython结合可实现摄像头图像采集、视频流传输等功能,不过Micropython官方没有支持ESP32-CAM的固件,需要烧录第三方的专有固件。


小鹏物联网 MicroPython 智能浇花方案

相信很多人都有把绿植给养死的经历,可能是浇水过多、忘记浇水、较长时间不在家不能浇水等,本文介绍一种可以灵活定制的智能浇花方案。


MicroPython 开发ESP32应用之线程介绍及实例分析

MicroPython 在 ESP32 上支持线程(Thread)功能,通过_thread模块实现。线程允许程序并发执行多个任务,适合处理需要同时运行的场景,例如传感器数据采集和网络通信。


ESP32 MicroPython采集模拟传感器数值

使用了 MicroPython 库,通过 定时器(Timer) 和 ADC(模数转换器) 功能来实时读取传感器数据。使用定时器可以实现高精度、非阻塞、低资源消耗的周期性任务,保证实时性和可靠性,特别适用于嵌入式系统中的多任务处理和低功耗场景。


ESP32 MicroPython外部引脚中断处理

本文旨在介绍如何在运行MicroPython的ESP32上使用外部引脚中断功能。


ESP32外部中断原理详解及代码示例

在使用外部设备时,我们经常需要知道它们何时发生了变化,比如按钮是否按下,传感器是否检测到了某个信号。可以通过中断来检测这些变化,立即暂停当前任务并开始处理中断程序,大大提高系统的实时性和响应速度。


富有创意的micro:bit机器人和物联网项目合集

本文将向您展示一些关于2023年机器人和物联网的最有趣和创新的micro:bit项目。


MicroPython PWM类

machine.pwm是MicroPython中用于控制PWM输出的模块之一,它提供了一些方法和属性,用于设置和控制PWM输出的频率、占空比等参数,从而实现对各种应用场景的控制。

搜索
小鹏STEM教研服务

专属教研服务系统,助您构建STEM课程体系,打造一站式教学环境。

小鹏AIoT服务

为讲师、学员提供专属的物联网教学环境。