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

news2024/9/20 22:16:09

本博文介绍采用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;
•LDE二极管×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.py
import network
from umqtt.simple import MQTTClient
import time
from machine import Pin
station = 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 = 'test.mosquitto.org'   # 指定的MQTT服务器: test.mosquitto.org
# 其他的MQTT服务器:broker.hivemq.com, mqtt.p2hp.com等
mqttPort = 1883  # 1883为指定的MQTT服务器端口号
ClientID = "Pico_W"  # 设定PICO_W为Pico W开发板设备ID
Topic = "LED"  # 设定MQTT主题为LED

def 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)设置为test.mosquitto.org,端口号(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服务器和端口号设置为test.mosquitto.org: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》. 北京: 北京航空航天大学出版社, 2023年4月第1版。

发布日期:2023年05月01日

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/480827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用python的QT做界面

文章目录 入口文件界面参数调整数据从dat解析出来的文件从界面点击打开文件夹的功能实现主要功能代码网络参数存图替换功能,比如把倒频谱替换成倒频谱2 入口文件 入口文件,主要用来实例化窗口(不重要),只要知道从这里…

每日学术速递4.30

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Masked Frequency Modeling for Self-Supervised Visual Pre-Training(ICLR 2023) 标题:用于自监督视觉预训练的掩蔽频率建模 作者:Jiahao Xie, Wei Li, Xi…

SwiftUI 设计和调试复杂界面的基本技巧示例

功能需求 对于比较复杂的 SwiftUI 界面,我们需要在充分了解 SwiftUI 各个视图基本特性的同时,合理利用 Xcode 强大的预览(Preview)机制,实时且全面的测试所有场景下的显示情况。 如上图所示:我们在 App 支持的每种语言环境中都对界面进行了全面的测试,并解决了 Cell 里…

使用Lambda表达式mutable有感

使用Lambda表达式mutable有感 在学Qt的时候,我看着mutable陷入了沉思,总觉得它和C中的某个特性很像?没错,就是 深拷贝 如果你忘记了深拷贝和浅拷贝是什么,那跟着我来一起回忆一下吧。首先来看深拷贝与浅拷贝的概念 浅…

从零开始学习Linux运维,成为IT领域翘楚(四)

文章目录 🔥Linux路径🔥Linux处理文件目录的常用命令🔥Linux文件编辑工具vi/vim🔥Linux文件内容查看命令 🔥Linux路径 路径,顾名思议,是指从树形目录中的某个目录层次到某个文件的一条道路。 Li…

设计模式-工厂、装饰模式

一. 设计模式-工厂模式 package com.factory.pattern;/**目标:工厂模式。什么是工厂设计模式?工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的方…

Spring 5 笔记 - AOP

1. AOP 简介 AOP:Aspect Oriented Programming, 面向切面编程或面向方面编程。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 将日志…

【英语】大学英语CET考试,写作部分(论述文+应用文,6篇范文)

文章目录 3项评分标准(内容&结构,语言)0.1 论述文个人小结 1、论述文:审题与功能句2、论述文:修饰内容和名言模板3、论述文:现象作文&利弊分析4、论述文:给出权威论据和有侧重的现象5、…

新老stp的配置和安全总结部分

老stp只有根桥没有备份桥 老stp的五种接口状态: disable 接口down没开stp blocking 阻塞 listening 发bpdu,比较bpdu优劣 leraning 开始学习mac地址表 forwardding 转发 老stp直接拓扑变化30秒,间接拓扑变化50秒 RSTP只有3种端口状态&#…

每日学术速递4.28

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.StepFormer: Self-supervised Step Discovery and Localization in Instructional Videos(CVPR 2023) 标题:StepFormer:教学视频中的自我监督步骤发现和定位…

vue diff算法与虚拟dom知识整理(1) 概念叙述

今天开始 我们来学习 虚拟dom和diff算法 首先 我们要简单了解 虚拟dom和diff算法在vue中的作用 例如 下图左侧是我们的加 然后 我们要将 家按图右改造一下 我们先来找一下不同 如图卷出来的效果 我们起居室想多装一个沙发 卧室床改了位置 电视不要了 阳台小改了一下 其实改…

每日学术速递4.27

Subjects: cs.CV 1.End-to-End Spatio-Temporal Action Localisation with Video Transformers 标题:使用视频转换器进行端到端时空动作定位 作者:Alexey Gritsenko, Xuehan Xiong, Josip Djolonga, Mostafa Dehghani, Chen Sun, Mario Lučić, Corde…

IS-IS协议基础知识

文章目录 前言介绍地址格式报文格式区域及路由器类型区域类型路由器类型Level-1 路由器Level-2 路由器Level-1-2路由器 IS-IS 网络类型DIS及伪节点伪节点DIS与OSPF的DR/BDR不同之处 IS-IS 邻接关系握手报文邻接关系的建立 IS-IS 链路状态数据库概述数据库同步报文泛洪机制数据库…

【网络编程】socket套接字

文章目录 一、源IP和目的IP二、端口号port三、TCP/UDP协议3.1 网络字节流 四、socket套接字4.1 socket常见接口4.2 sockaddr结构体 五、总结 一、源IP和目的IP 如果我们的台式机或者笔记本没有IP地址就无法上网,而因为每台主机都有IP地址,所以注定了数据…

Prometheus Exporter开发

Prometheus Exporter开发 Exporter数据格式介绍 Exporter徒手开发 Exporter4种指标类型演示 Exporter自定义注册表 Exporter 基于Collector的模块开发 Exporter介绍 数据格式 通讯协议 HTTP协议服务端实现了gzip 数据格式 text/plain:文本协议 数据格式 prometheus…

MySQL性能监控全掌握,快来get关键指标及采集方法!

数据库中间件监控实战,MySQL中哪些指标比较关键以及如何采集这些指标了。帮助提早发现问题,提升数据库可用性。 1 整体思路 监控哪类指标? 如何采集数据? 第10讲监控方法论如何落地? 这些就可以在MySQL中应用起来。…

ChatGPT提示词工程(四):Inferring推断

目录 一、说明二、安装环境三、推断(Inferring)1. 推断情绪(正面 / 负面)2. 确定情绪的类型3. 识别愤怒4. 从客户评论中提取产品和公司名称5. 一次完成多项任务6. 推断主题7. 主题中是否包含给定的主题 一、说明 这是吴恩达 《Ch…

【栈】的实现

🖊作者 : D. Star. 📘专栏 : 数据结构 😆今日分享 : —>📖区块链 : 小明向你借100块钱,说一周后还你,然后你拿个喇叭大喊一声:我是某某,小明向我借了100块&#xff0c…

Redis缓存(双写一致性问题)

Redis缓存(双写一致性问题) 1 什么是缓存?1.1 为什么要使用缓存1.2 如何使用缓存 2 添加缓存2.1 、缓存模型和思路2.2、代码如下 3 缓存更新策略3.1 、数据库缓存不一致解决方案:3.2 、数据库和缓存不一致采用什么方案 4 实现商铺和缓存与数…

【C生万物】 指针篇 (初级)

欢迎来到 Claffic 的博客 💞💞💞 👉 专栏:《C生万物 | 先来学C》👈 前言: 面对C语言,很多童鞋都会高呼:指针难,指针难&#x…