600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 树莓派Pico W无线开发板MQTT协议通信MicroPython编程实践

树莓派Pico W无线开发板MQTT协议通信MicroPython编程实践

时间:2024-02-29 18:24:33

相关推荐

树莓派Pico W无线开发板MQTT协议通信MicroPython编程实践

本博文介绍采用Thonny+MicroPython和umqtt.simple库MQTTClient类的对象方法编制树莓派Pico W无线开发板MQTT协议通信程序,将Pico W无线开发板、电脑或Android手机无线连接到远程MQTT服务器,给出采用电脑MQTTX应用程序及手机Android MQTT客户端App远程控制Pico W无线开发板板载LED灯和扩展LED灯亮灭的示例程序。

1.安装micropython-umqtt.simple库

假设树莓派Pico W无线开发板已事先安装好MicroPython固件并且设置好了Pico W无线开发板的Thonny IDE开发环境。Pico W无线开发板具体使用方法可参见本博主博文“树莓派Pico W无线WiFi开发板使用方法及MicroPython网络编程实践”。

这里以Windows为例,运行Thonny,依次点击[Tools]→[Manage Packages…]显示“Manage Package for Raspberry Pico”对话框,在编辑框输入“umqtt.simple”且点击[Search on PyPI] umqtt.simple库,如图1所示。

图1

选取[micropython-umqtt.simple],点击[Install]按钮安装micropython-umqtt.simple库,如图2所示。

图2

micropython-umqtt.simple成功安装后,umqtt.simple库将存放于树莓派Pico W无线开发板的lib文件夹中。

2. 树莓派Pico W无线开发板硬件接口扩展一只LED发光二极管

(1)所需硬件材料清单

•Pico W无线开发板×1;

•Micro-USB数据线×1;

•470Ω电阻×1;

•面包板×1;

•LED二极管×1;

•公对公杜邦线×2。

(2) Pico W无线开发板硬件接口扩展一只LED接口电路

Pico W无线开发板硬件接口GPIO信号引脚排列如图3所示。

图3

这里使用Pico W无线开发板的GPIO15引脚 (Pin20物理引脚) 扩展一只LED,即Pico W无线开发板Pin20物理引脚可与470Ω~1kΩ的电阻R和LED器件D串联后接地,其硬件接口电路原理图如图4所示。

图4

图4所对应的硬件接线外观图如图5所示。

图5

3. 树莓派Pico W无线开发板MQTT协议通信MicroPython程序示例

将Pico W作为客户端实现基于MQTT协议的通信,需用到umqtt.simple库中的MQTTClient类。树莓派Pico W无线开发板设备端通过WiFi连接到MQTT服务器的MQTT MicroPython程序清单如下:

# Filename: pico_w_mqtt.pyimport networkfrom umqtt.simple import MQTTClientimport timefrom machine import Pinstation = network.WLAN(network.STA_IF)station.active(True)station.connect("用户使用的WiFi名称","用户使用的WiFi密码") time.sleep(8)led_onBoard = machine.Pin("LED",machine.Pin.OUT)led_onBoard.value(0)led_external = Pin(15, Pin.OUT)led_external.value(0)BrokerAddr = '' # 指定的MQTT服务器: # 其他的MQTT服务器:, 等mqttPort = 1883 # 1883为指定的MQTT服务器端口号ClientID = "Pico_W" # 设定PICO_W为Pico W开发板设备IDTopic = "LED" # 设定MQTT主题为LEDdef sub_callback(topic, msg):topic = str(topic,'utf-8')msg = str(msg,'utf-8')command= msg.strip()print((topic, command)) # 显示主题和命令消息if command == "开灯": # "开灯"命令消息led_onBoard.value(1)led_external.value(1)if command == "关灯": # "关灯"命令消息led_onBoard.value(0)led_external.value(0)# 将Pico W开发板连接到指定的MQTT服务器mqttClient = MQTTClient(ClientID, BrokerAddr, mqttPort, keepalive = 300)mqttClient.set_callback(sub_callback)mqttClient.connect()mqttClient.publish("MQTT_Test", "Start", qos = 0)mqttClient.subscribe(Topic, qos = 0) # Pico W开发板订阅主题print("Ok")while True:mqttClient.wait_msg()time.sleep(1)

以上pico_w_mqtt.py程序与MQTT协议通信相关的语句大多已添加注释,这里不再多做解释。将树莓派Pico W无线开发板连接到电脑,启动Thonny IDE (假设Pico W无线开发板的开发环境已事先设置成功),在Thonny编辑器窗口复制粘贴本程序。

4.测试树莓派Pico W无线开发板MQTT协议通信程序

(1)使用电脑客户端MQTTX应用程序远程控制Pico W无线开发板LED灯的亮灭

电脑客户端MQTTX应用程序可从 https://mqttx.app

网址下载,这里下载Windows版本MQTTX应用程序,下载后直接将其安装到电脑即可。

下面我们运行前面的Pico W无线开发板pico_w_mqtt.py程序,当Pico W无线开发板成功连接到WLAN和远程MQTT服务器后,Thonny的Shell窗口将显示”Ok”字符串信息,表明远程MQTT服务器连接成功,如图6所示。

图6

接下来,运行MQTTX程序,选取[MQTT Connections]设置电脑客户端MQTT登录信息,这里将MQTT服务器(Host)设置为,端口号(Port)设置为1883,电脑客户端名称(Name)设置为Pico_W_MQTT_Test,客户端ID设置为Test_1,还可设置可选的用户名(Username)及密码(Password)。点击[Connect]按钮连接远程MQTT服务器。远程MQTT服务器连接成功后,在消息的主题(Topic)编辑框输入“LED”,在消息的正文(payload)编辑框输入“开灯”命令,如图7所示。

图7

在图中点击右下角的[发送]命令按钮后,Pico W无线开发板板载LED和扩展LED均被点亮,如图8所示。

图8

当在消息的正文(payload)编辑框输入“关灯”命令时,Pico W无线开发板板载LED和扩展LED全部熄灭。

(2)使用Android手机客户端MQTTX应用程序远程控制Pico W无线开发板LED灯的亮灭

找一款Android手机MQTT客户端App程序(如MQTT client、MQTT Terminal等Android App),本文下载的是MQTT client_v0.16_apk,将其安装到Android手机,运行手机MQTT客户端程序,见图9所示。

图9

下面设置手机设备端MQTT登录信息,这里将MQTT服务器和端口号设置为:1883,设备ID设置为手机的设备ID,这里设置为My_Android,接下来设置用户名及密码,设置完成后,按[登录]按钮,如图10所示。

图10

根据前面介绍的在Pico W无线开发板上执行的pico_w_mqtt.py程序可知,我们使用的主题为”LED”,消息为”开灯”或”关灯” 命令字符串,这里将手机MQTT客户端程序要发布的主题设置为”LED”,如图11所示。

图11

在手机MQTT客户端程序中,按[消息]按钮并输入”开灯”消息命令后,,我们将看到Pico W无线开发板板载LED和扩展LED灯均被点亮。

下面对手机远程控制Pico W无线开发板板载LED和扩展LED亮灭的MQTT通信过程做简要说明。

手机和Pico W都连接到同一个远程MQTT服务器。当Pico W无线开发板中的pico_w_mqtt.py程序执行成功后,开发板订阅的主题为“LED”、消息为”开灯”或”关灯”命令; 当手机客户端发布主题也为”LED”并在手机设备输入”开灯” 命令消息时,手机向远程MQTT服务器发送”LED”主题和”开灯”命令消息,MQTT服务器将”LED”主题和”开灯”命令消息发送到所有连接到该MQTT服务器上的设备,远程的Pico W无线开发板只有接收到”LED”主题和”开灯” 消息后,将在1秒后点亮板载蓝色LED灯和扩展硬件的红色LED灯,当输入”关灯”消息命令后,板载蓝色LED小灯和扩展硬件的红色LED灯将熄灭。

程序调试无误后,我们还可把pico_w_mqtt.py程序文件烧写到Pico W无线开发板的Flash中,将Pico W无线开发板外接5V电源即可独立运行。

除了使用本文介绍的电脑MQTT客户端应用程序和Android手机MQTT客户端App与远程的Pico W无线开发板进行MQTT协议通信外,我们还可针对各种应用场景开发专用的电脑、Android手机等MQTT客户端应用程序。

参考文献:

袁志勇 编著. 《AI嵌入式系统技术与实践-基于树莓派RP2040和MicroPython》. 北京: 北京航空航天大学出版社, 第1版。

发布日期:05月01日

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。