使用 Micropython 通过 MQTT 将 W5100S-EVB-Pico 连接到 Azure IoT Hub 并发送和接收消息的过程。
转发: https://maker.wiznet.io/rena/projects/connect-to-azure-iot-hub-using-micropython-on-w5100s-evb-pico/
项目介绍
使用 Micropython 通过 MQTT 将 W5100S-EVB-Pico 连接到 Azure IoT Hub 并发送和接收消息的过程。
我对 IoT 中心使用了 SAS 令牌身份验证方法。
组件
硬件
- W5100S-EVB-Pico
- Micro 5pin USB cable
- LAN cable
软件
- Thonny
RP2040 Micropython开发环境
检查设备信息
遥测监控
C2D传输
准备 Azure 资源
创建 Azure IoT 中心
创建Azure IoT Hub的方式有多种,例如Azure门户、Azure CLI、REST API等。一开始我们主要采用通过Azure门户创建的方法。
可以在下面的链接中找到说明。
Micropython 固件
建造
构建操作使用WSL2(Ubuntu 20.04.4 LTS)环境。
rena@Rena-PC:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
您可以参考Micropython的官方文档来了解构建环境的信息,例如安装工具。 official documentation of Micropython
Micropython 存储库内的自述文件引用了构建过程。
micropython/ports/rp2 at master · micropython/micropython · GitHub
存储库克隆
克隆包含子模块的存储库并检索子模块。
git clone https://github.com/micropython/micropython.git
cd micropython
git submodule update --init
构建子模块
make -C ports/rp2 submodules
mpy-cross build(MicroPython 交叉编译器)
在构建设备固件之前,必须先进行 mpy-cross 构建。
make -C mpy-cross
构建 W5100S-EVB-Pico 设备固件
W5100S_EVB_PICO 使用任何支持的设备构建固件。
支持列表可以在以下位置找到: Micropython: ports/rp2/boards.
cd ports/rp2
make BOARD=W5100S_EVB_PICO submodules
make BOARD=W5100S_EVB_PICO
这是最终的构建过程。 至少需要几分钟。
固件上传
将固件上传到设备。
进入启动模式
H/W v1.0和v1.1的形状略有不同,但我的板子是v1.0,因此在按下板子的BOOTSEL按钮的同时供电(USB线),它进入Boot模式。
在v1.1的情况下,如果按住BOOTSEL按钮的同时按RUN按钮,则进入启动模式,无需重新上电。
H/W v1.0 Hé v1.1 De xíngzhuàng lüè yǒu b
固件上传
构建的固件位于以下路径中。
micropython/ports/rp2/build-W5100S_EVB_PICO
上传文件: firmware.uf2
.
现在固件工作已经完成。
接下来,安装 umqtt 库,使用 Thonny 编写一些代码,向 IoT 中心发送/接收数据并使用 Azure IoT Explorer 监视数据。
编写设备代码
Azure-Samples 中的 IoTMQTTSample 代码引用了示例代码。
[2022.10.14] 随着 master 分支的更新,Micropython 目录被删除。 使用提交分支地址进行编辑
从 IoT Explorer 获取设备信息
您需要获取信息以连接到 Azure IoT 中心并将其写入代码中。
请参阅 Azure IoT 中心指南:使用 MQTT 协议与 IoT 中心通信,了解与 MQTT 通信时每个字段所需的内容 Azure IoT Hub Guide: Communicate with your IoT hub using the MQTT protocol
对于示例代码,应获得以下数据。
- 设备连接字符串
- 设备 SAS 令牌
如果你看一下代码,它的实现是解析连接字符串以获取主机名、设备 ID 和共享访问密钥值。
获取信息的方法有多种,其中我使用了 IoT Explorer。
设置 IoT Explorer IoT 中心连接
首先,需要授予访问权限,以便 IoT Explorer 可以访问 IoT 中心。
默认权限中,iothubowner 权限(包括所有权限)将授予 IoT Explorer。
单击 iothubonwer,单击主连接字符串右侧的按钮,复制值,然后将其粘贴到在 IoT Explorer 中单击“添加连接”并保存时出现的窗口中。
如果一开始仅设置一次此设置,则可以在该工具中执行 IoT 中心和设备的大部分任务。
创建设备后,获取如图所示的信息值。
设备创建
复制连接字符串
SAS 令牌创建和复制
设备源代码
我将设备代码上传到下面的链接。
新增、修改了以下内容: original example code.
- W5100S 网络连接设置
- 遥测消息传输修改:String -> JSON string
如果不更改为 JSON,则很难识别 IoT Explorer 中的数据。
安装库
在 Thonny 环境中安装库。
从顶部菜单中选择“工具”-“管理包”后,输入 umqtt 并搜索。
在找到的软件包中,按顺序安装umqtt.simple和umqtt.robust。
如果安装成功,点击左侧列表中的umqtt,会显示已安装的包,如下所示。
执行和监控
遥测
connecting
Publishing
Sending message 0
Sending message 1
Sending message 2
Sending message 3
Sending message 4
Sending message 5
Sending message 6
Sending message 7
Sending message 8
Sending message 9
Sending message 10
waiting for message
Received message
b'message from IoT Hub'
C2D消息
参考
- RP2040-HAT-MicroPython Repository
- Azure IoTMQTTSample - Micropython
- Micropython forum post from nickehallgren
文件