跳到主要内容

MicroPython 开发

本章节包含以下部分,请按需阅读:

MicroPython 入门教程

初次接触 Pico MicroPython 开发,想要快速上手?我们为您准备了一套通用的入门教程。此教程旨在帮助开发者快速熟悉 Thonny IDE 并上手开发。教程内容涵盖环境搭建、项目创建、组件使用及外设编程等,帮助您迈出 MicroPython 编程的第一步。

配置开发环境

请参考 安装和配置 Thonny IDE 教程 下载安装 Thonny IDE。

示例程序

MicroPython 示例程序位于 示例程序包examples\MicroPython 目录中。

示例程序基础例程说明依赖库
01_MQTTMQTT 示例程序-

01_MQTT

【程序说明】

  • 该示例演示 RP2350-POE-ETHMicroPython 下,通过 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_IDMQTT_SUB_TOPICMQTT_PUB_TOPIC;如你自建 Broker 或启用了鉴权,也要修改 MQTT_USERNAMEMQTT_PASSWORD

对应到本示例的源代码,相关配置在以下位置:

  • 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/... 回包
    • 回包示例:
{"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,如需更强韧性可自行切换)

【运行效果】

运行前请先完成 【硬件连接】,并按以下步骤完成烧录与部署:

  1. 烧录 MicroPython 固件(UF2)
    • 进入 BOOT 模式后,将firmware\MicroPython目录下的 RP2350-POE-ETH.uf2 拖拽/复制到开发板的 U 盘盘符中完成烧录。
  2. 上传示例代码到开发板文件系统,并在 Thonny 执行运行mian.py
    • examples\MicroPython\01_MQTT目录下文件:
      • main.py(MicroPython 上电自启动入口)
      • config.py
      • lib/umqtt/simple.py
      • lib/umqtt/robust.py
    • 说明:lib/ 目录需要保持目录结构,最终在板子上应类似:
/
main.py
config.py
lib/
umqtt/
simple.py
robust.py
  1. 烧录并上传文件后复位开发板,串口会打印类似日志(不同网络环境会略有差异):
Initialize Ethernet (W6300)
Waiting for Ethernet connection...
Ethernet connection successful!
IP address: 192.168.1.100
Subscribe to topic: Sub/ed229f15
Published: {...} -> Pub/ed229f15
...
  1. 使用任意 MQTT 客户端验证(推荐 MQTTX)

    • MQTTX 客户端设置:

    photo0

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

photo