MicroPython 开发
本章节包含以下部分,请按需阅读:
MicroPython 入门教程
初次接触 Pico MicroPython 开发,想要快速上手?我们为您准备了一套通用的入门教程。此教程旨在帮助开发者快速熟悉 Thonny IDE 并上手开发。教程内容涵盖环境搭建、项目创建、组件使用及外设编程等,帮助您迈出 MicroPython 编程的第一步。
配置开发环境
请参考 安装和配置 Thonny IDE 教程 下载安装 Thonny IDE。
示例程序
MicroPython 示例程序位于 示例程序包 的 examples\MicroPython 目录中。
| 示例程序 | 基础例程说明 | 依赖库 |
|---|---|---|
| 01_MQTT | MQTT 示例程序 | - |
01_MQTT
【程序说明】
- 该示例演示 RP2350-POE-ETH 在 MicroPython 下,通过 W6300 以太网连接公网 MQTT Broker(默认
broker.emqx.io:1883),并实现:- 订阅主题:
Sub/ed229f15 - 发布主题:
Pub/ed229f15 - 上电后发布一次设备状态 JSON,随后 每 10 秒发布一次(包含 CPU 主频、温度、VSYS 电压、USB/POE 插入状态、运行时间等)
- 订阅主题:
- 开源使用注意(强烈建议首次使用就修改,避免多人/多设备冲突)
- MQTT Broker 通常要求
Client ID在同一时刻全局唯一:两台设备使用相同MQTT_CLIENT_ID登录时,后连入的会把先连入的挤掉,表现为设备频繁掉线。 - Topic 如果使用固定值,多台设备的数据会混在一起,且容易被其它人误订阅/误控制。
- 建议至少修改:
MQTT_CLIENT_ID、MQTT_SUB_TOPIC、MQTT_PUB_TOPIC;如你自建 Broker 或启用了鉴权,也要修改MQTT_USERNAME、MQTT_PASSWORD。
- MQTT Broker 通常要求
对应到本示例的源代码,相关配置在以下位置:
main.py:Topic 定义 + 从config.py读取 MQTT 参数
# Constants for MQTT Topics
MQTT_SUB_TOPIC = 'Sub/ed229f15'
MQTT_PUB_TOPIC = 'Pub/ed229f15'
# MQTT Parameters
MQTT_SERVER = config.mqtt_server
MQTT_PORT = config.mqtt_port
MQTT_USERNAME = config.mqtt_username
MQTT_PASSWORD = config.mqtt_password
MQTT_CLIENT_ID = config.mqtt_client_id
MQTT_KEEPALIVE = config.mqtt_keepalive
config.py:MQTT Broker 与账号信息
mqtt_server = b'broker.emqx.io'
mqtt_port = 1883
mqtt_client_id = b'ed229f15'
mqtt_keepalive = 60
mqtt_username = b'w6300_test'
mqtt_password = b'0123456789'
【硬件连接】
- 使用 USB 线将开发板连接电脑(用于供电、烧录与串口日志查看)
- 插入网线到 RJ45 口,并确保网络可访问公网(能访问
broker.emqx.io:1883) - 可选:插入 POE 网线为板子供电(程序上报 JSON 中体现
poe_inserted状态)
【代码分析】
- 入口文件
main.py- 以太网初始化
ethernet_init()network.WIZNET6K()初始化以太网接口nic.ifconfig('dhcp')开启 DHCP 获取 IP,并等待nic.isconnected()
- MQTT 连接
mqtt_connect()- 使用
from umqtt.simple import MQTTClient - 连接成功后设置回调
client.set_callback(mqtt_recv_callback)并订阅MQTT_SUB_TOPIC
- 使用
- 发布主题与订阅主题(默认写在
main.py顶部常量区):
- 以太网初始化
MQTT_SUB_TOPIC = 'Sub/ed229f15'
MQTT_PUB_TOPIC = 'Pub/ed229f15'
- 上报(启动一次 + 每 10 秒一次)
PUBLISH_INTERVAL = 10- 发布的 JSON 由
device/system/message三部分组成(当前代码中get_network_info()已实现但未加入 payload,你可以按需扩展):
{
"device": { "chip": "RP2350A", "client_id": "ed229f15" },
"system": {
"cpu_mhz": 150,
"ram_kb": 520,
"temp_c": 36.2,
"vsys_voltage_v": 5.021,
"vsys_adc_raw": 2048,
"usb_inserted": true,
"poe_inserted": false,
"uptime": "0:00:01:23"
},
"message": "Hello, waveshare!"
}
- 订阅消息回调
mqtt_recv_callback(topic, message)- 订阅主题收到消息后,会尝试将 payload 解析为 JSON,并按字段执行指令(支持一个 payload 同时带多个字段):
{"adc": 1}:读取 VSYS 电压(GPIO29 ADC),并向Pub/...回包{"led": 2}:设置 WS2812 颜色(GPIO25,取值0-8){"io_dect": 1}:读取 USB/POE 插入状态(GPIO24/23),并向Pub/...回包
- 回包示例:
- 订阅主题收到消息后,会尝试将 payload 解析为 JSON,并按字段执行指令(支持一个 payload 同时带多个字段):
{"vsys_voltage":5.021,"vsys_adc_raw":2048}
{"led_color":2,"led_name":"RED"}
{"usb_inserted":true,"poe_inserted":false}
- MQTT 库
lib/umqtt/simple.py:基础 MQTT 协议实现(connect/publish/subscribe/wait_msg/check_msg)robust.py:在simple.py上封装自动重连逻辑(本示例当前使用umqtt.simple,如需更强韧性可自行切换)
【运行效果】
运行前请先完成 【硬件连接】,并按以下步骤完成烧录与部署:
- 烧录 MicroPython 固件(UF2)
- 进入 BOOT 模式后,将
firmware\MicroPython目录下的RP2350-POE-ETH.uf2拖拽/复制到开发板的 U 盘盘符中完成烧录。
- 进入 BOOT 模式后,将
- 上传示例代码到开发板文件系统,并在 Thonny 执行运行mian.py
examples\MicroPython\01_MQTT目录下文件:main.py(MicroPython 上电自启动入口)config.pylib/umqtt/simple.pylib/umqtt/robust.py
- 说明:
lib/目录需要保持目录结构,最终在板子上应类似:
/
main.py
config.py
lib/
umqtt/
simple.py
robust.py
- 烧录并上传文件后复位开发板,串口会打印类似日志(不同网络环境会略有差异):
Initialize Ethernet (W6300)
Waiting for Ethernet connection...
Ethernet connection successful!
IP address: 192.168.1.100
Subscribe to topic: Sub/ed229f15
Published: {...} -> Pub/ed229f15
...
-
使用任意 MQTT 客户端验证(推荐 MQTTX)
- MQTTX 客户端设置:

RP2350-POE-ETH连接参数:- Host:
broker.emqx.io - Port:
1883 - Username:
w6300_test - Password:
0123456789 - Client ID:
ed229f15
- Host:
- 订阅主题:
Pub/ed229f15,可收到开发板每 10 秒上报的 JSON - 向主题
Sub/ed229f15发布控制指令(payload 为 JSON 字符串),例如:
{"led":2}
{"adc":1,"io_dect":1}
