W55RP20-EVB-Pico 模块 MicroPython 实战 (UDP组播/广播示例):实现局域网批量通信
本文为 W55RP20-EVB-Pico 模块 MicroPython 教程专项篇基于官方最新固件编写代码均经过实际验证可直接烧录运行。 版权声明本文为 WIZnet 官方原创技术文章转载请注明出处。前言上一篇实战教程我们已经完成了 W55RP20 芯片 UDP 单播数据通信功能开发。本篇内容我们聚焦局域网多设备批量通信的核心技术 ——UDP 组播与广播。在智能硬件和物联网时代MicroPython 和树莓派 PICO 正以其独特的优势引领着嵌入式开发的新潮流。MicroPython 作为一种精简优化的 Python 3 语言为微控制器和嵌入式设备提供了高效开发和简易调试的体验。当我们结合 WIZnet W5500 网络模块MicroPython 和树莓派 PICO 的开发潜力被进一步放大。该模块内置硬件 TCP/IP 协议栈使得在嵌入式设备上实现 UDP 组播、广播等多设备通信变得更加容易。无论是多设备同步控制、数据批量推送还是简易物联网控制系统UDP 组播 / 广播都能提供高效、便捷的支持。W55RP20 集成硬件 TCP/IP 协议栈搭配 MicroPython 开发环境几行代码即可实现稳定的 UDP 组播 / 广播通信无需关心底层 Socket 细节轻松完成局域网批量数据传输。学完本文你将掌握UDP 协议核心原理与组播、广播的区别及应用场景W55RP20-EVB-Pico 模块网络初始化与 UDP 组播 / 广播配置方法极简代码实现 UDP 广播、组播数据发送功能多设备通信场景下的 UDP 参数配置技巧UDP 组播 / 广播通信结果验证方法与常见问题排查WIZnet 硬件协议栈在 UDP 多设备通信中的优势系列教程学习路径本专栏共 15 篇循序渐进覆盖 W55RP20-EVB-Pico 模块 MicroPython 开发全流程1.第 1 篇静态 IP 配置与网络基础2.第 2 篇DHCP 自动联网与网络诊断3.第 3 篇TCP Client 客户端通信4.第 4 篇TCP Server 服务端通信5.第 5 篇UDP 单播数据通信6.第 6 篇UDP 组播/广播数据通信7.第 7 篇DNS 域名解析本文8.第 8 篇NTP 从网络获取时间9.第 9 篇HTTP Client 客户端请求10.第 10 篇HTTP Server 服务端搭建11.第 11 篇HTTP 协议与 OneNET 平台数据上云12.第 12 篇MQTT 协议基础通信验证13.第 13 篇MQTT 协议与阿里云平台对接14.第 14 篇MQTT 协议与 OneNET 平台对接15.第 15 篇MQTT 协议与 ThingSpeak 平台对接16.第 16 篇Modbus 工业协议通信建议收藏本专栏跟随教程逐步学习所有代码均会同步更新至官方 Gitee 仓库。目录1. 准备工作1.1 软件准备1.2 硬件准备2. 烧录 W55RP20-EVB-Pico 模块专属 MicroPython 固件3. 硬件连接与开发环境配置3.1 硬件连接3.1.1 基础连接供电调试3.1.2 以太网连接3.1.3 模块与开发板接线3.2 Thonny 开发环境配置4. UDP 协议及组播/广播原理4.1 UDP 协议简介4.2 UDP 广播与组播的区别及工作流程4.2.1 UDP 广播工作流程4.2.2 UDP 组播工作流程4.2.3 核心区别4.3 UDP 核心优势适配组播/广播场景4.4 UDP 组播/广播典型应用场景5. 核心代码解析广播组播5.1 基础说明5.2 UDP 广播代码解析广播代码关键步骤说明5.3 UDP 组播代码解析组播代码关键步骤说明6. 运行结果与测试验证6.1 串口输出结果UDP 广播发送输出UDP 组播发送输出接收端输出广播/组播6.2 UDP 通信验证方法7. 常见问题一站式排查指南7.1 烧录相关问题7.2 端口识别问题7.3 网络连接与 UDP 通信问题8. WIZnet 硬件协议栈核心优势对比9. 典型应用场景10. 系列预告与资源获取10.1 系列预告10.2 资源获取1. 准备工作1.1 软件准备所需软件均为免费版本按要求下载安装即可无需额外付费。软件名称版本要求下载地址说明Thonny4.0 及以上Thonny 官方下载轻量级 MicroPython IDE支持代码编辑、烧录与串口调试新手友好W55RP20-EVB-Pico 模块 MicroPython 固件最新稳定版WIZnet官方固件下载专为 W55RP20-EVB-Pico 模块 编写已集成 WIZnet 硬件驱动与协议栈1.2 硬件准备W55RP20-EVB-Pico × 1Micro USB 数据线必须支持数据传输不能使用纯充电线× 1标准网线 × 1开启 DHCP 功能的路由器 / 交换机 × 1用于获取网络参数实现 DNS 解析W55RP20-EVB-Pico 模块已集成以太网相关器件无需额外焊接飞线配合 RP2040 开发板可快速搭建开发环境大幅降低接线错误和硬件故障概率。2. 烧录 W55RP20-EVB-Pico 模块专属 MicroPython 固件W55RP20-EVB-Pico 模块 完全兼容树莓派 Pico 的 UF2 固件烧录方式操作简单无需额外烧录器新手可快速上手按住 RP2040 开发板上的 BOOTSEL 按键不放使用 Micro USB 数据线连接开发板与电脑待电脑识别出名为 RPI-RP2 的 U 盘后松开 BOOTSEL 按键将下载好的 W5500_RP2040_firmware.uf2 固件文件拖拽到 U 盘中开发板会自动重启固件烧录完成。注意如果电脑没有识别出 RPI-RP2 U 盘请尝试更换 USB 数据线、重新插拔开发板或更换电脑 USB 接口优先使用 USB 2.0 接口。3. 硬件连接与开发环境配置3.1 硬件连接W55RP20-EVB-Pico 模块连接分为两步分别实现供电/调试和以太网连接操作简单无需复杂接线3.1.1 基础连接供电调试使用 Micro USB 数据线连接 RP2040 开发板与电脑用于开发板供电、代码烧录和串口调试。3.1.2 以太网连接使用网线连接 W55RP20-EVB-Pico 模块的以太网接口与路由器的 LAN 口或直接连接电脑网口需手动配置电脑 IP 与开发板同网段。3.1.3 模块与开发板接线若使用分离式模块与开发板需按以下引脚对应连接SPI 通信【硬件预留】此处插入硬件连接示意图3.2 Thonny 开发环境配置打开 Thonny 软件按以下步骤配置开发环境确保代码能正常烧录和运行点击顶部菜单栏「运行」→「配置解释器」切换到「解释器」选项卡在「解释器」下拉列表中选择 MicroPython (通用)在「端口」下拉列表中选择开发板对应的串口通常显示为 Board CDC COMx勾选「运行代码前先重启解释器」和「同步设备的实时时钟」点击「确定」完成配置。如果端口列表中没有出现开发板请尝试重新插拔 USB 数据线更换支持数据传输的 USB 数据线关闭其他占用串口的软件如串口助手、Arduino IDE 等重新烧录 MicroPython 固件安装树莓派 Pico USB 驱动。4. UDP 协议及组播/广播原理4.1 UDP 协议简介UDP即用户数据报协议是一种无连接、不可靠的传输层协议与 TCP 协议并列核心特点是“快速传输、无需建立连接”。它不提供重传机制和流量控制数据发送后不确认接收方是否收到适合对实时性要求高、允许少量数据丢失的场景。在嵌入式物联网开发中UDP 广泛应用于多设备通信场景其中组播和广播是两种常用的多设备数据推送方式无需为每个设备单独建立连接大幅简化多设备组网复杂度结合 W5500 硬件协议栈可实现高效、稳定的 UDP 通信。简单来说UDP 协议的核心优势是「轻量、快速、低延迟」而组播和广播则是基于 UDP 协议实现的两种多设备数据传输方式适用于不同的组网需求。4.2 UDP 广播与组播的区别及工作流程W55RP20-EVB-Pico 模块实现 UDP 广播和组播的核心逻辑的一致均基于 UDP Socket但传输范围和目标设备不同以下是完整工作流程及区别4.2.1 UDP 广播工作流程开发板通过以太网连接到路由器完成网络初始化DHCP 自动获取 IP 地址、网关等参数创建 UDP Socket并开启广播模式设置 SO_BROADCAST 选项配置广播地址通常为 255.255.255.255代表同一网段内所有设备和通信端口开发板发送广播数据数据会被同一网段内所有设备接收接收设备通过对应端口监听 UDP 数据即可获取广播内容实现多设备同步接收数据。4.2.2 UDP 组播工作流程开发板完成网络初始化获取自身 IP 地址创建 UDP Socket无需开启广播模式配置组播地址范围为 224.0.0.0 ~ 239.255.255.255需所有接收设备加入同一组播组和通信端口开发板向组播地址发送数据仅加入该组播组的设备能接收数据接收设备通过绑定组播地址和端口监听 UDP 数据实现定向多设备通信。4.2.3 核心区别对比维度UDP 广播UDP 组播传输范围同一网段内所有设备无定向性仅加入指定组播组的设备定向传输资源占用较高所有设备均接收数据较低仅目标组设备接收适用场景同一网段内所有设备同步接收数据如通知、指令推送多设备分组通信如多组传感器数据汇总配置难度简单仅需设置广播地址和端口稍复杂需所有设备加入同一组播组4.3 UDP 核心优势适配组播/广播场景低延迟无需建立连接、无需确认回复数据发送速度快适合实时性要求高的场景如设备状态同步轻量简洁协议开销小占用 MCU 资源少适配 W55RP20-EVB-Pico 模块的资源特点多设备适配组播/广播模式无需为每个设备单独建立连接大幅简化多设备组网开发易用性强W55RP20-EVB-Pico 模块 MicroPython 固件已封装 UDP 底层逻辑无需编写复杂协议代码少量代码即可实现组播/广播。4.4 UDP 组播/广播典型应用场景UDP 组播/广播在嵌入式、物联网多设备组网中应用广泛主要包括物联网多设备同步同一网段内多台传感器、执行器同步接收控制指令如广播启动/停止指令数据批量推送服务器向多台设备推送配置参数、时间同步信息如组播推送 NTP 时间设备发现新接入设备通过广播发送自身信息实现网络内设备自动发现、组网实时监控多台监控设备向同一监控中心组播发送监控数据如温湿度、设备状态工业控制工业场景中控制器向多台执行设备广播控制指令实现同步联动。5. 核心代码解析广播组播W55RP20-EVB-Pico 模块的 MicroPython 库已经封装了所有 UDP 底层细节结合 wiznet_init 模块实现 UDP 广播和组播功能仅需少量核心代码无需编写复杂的底层驱动和协议解析逻辑代码可直接烧录运行。5.1 基础说明本文代码基于 wiznet_init 模块实现网络初始化该模块已封装 W55RP20-EVB-Pico 模块的网络配置逻辑无需手动配置 SPI 引脚和网络参数仅需调用 wiznet 函数即可完成初始化代码均采用纯 ASCII 文本避免乱码适配嵌入式设备通信需求。5.2 UDP 广播代码解析以下代码可直接复制到 Thonny 中烧录后即可实现 UDP 广播功能向同一网段内所有设备发送数据from wiznet_init import wiznet import usocket as socket import time # 初始化网络 nic wiznet(W55RP20-EVB-Pico, dhcpTrue) local_ip nic.ifconfig()[0] # 广播配置 BROADCAST_IP 255.255.255.255 PORT 8087 # 创建 UDP Socket 并开启广播 s socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) print(UDP 广播发送中...) count 0 while True: # 去掉 emoji只用纯 ASCII 文本 msg fBoard Broadcast {count}.encode(ascii) # 发送广播 s.sendto(msg, (BROADCAST_IP, PORT)) print(发送广播:, msg) count 1 time.sleep(1)广播代码关键步骤说明模块导入导入 wiznet_init 模块中的 wiznet 函数用于网络初始化、usocket 模块用于创建 UDP Socket、time 模块用于控制发送频率网络初始化调用 wiznet 函数指定设备名称开启 DHCP 自动获取 IP 地址无需手动配置静态 IP适配多设备组网所有设备自动处于同一网段同时获取本地 IP 地址便于后续调试广播参数配置设置广播地址为 255.255.255.255同一网段内所有设备均可接收端口设置为 8087可自定义需与接收端端口一致避免端口冲突UDP Socket 创建与配置创建 UDP 类型的 SocketSOCK_DGRAM 表示 UDP 协议并通过 setsockopt 函数开启广播模式SO_BROADCAST 选项设为 1这是实现广播功能的关键循环发送广播通过 while True 循环持续发送广播数据数据采用纯 ASCII 编码避免乱码每次发送后打印发送内容count 变量用于标记发送次数time.sleep(1) 控制每隔 1 秒发送一次可根据需求调整频率。5.3 UDP 组播代码解析以下代码可直接复制到 Thonny 中烧录后即可实现 UDP 组播功能向指定组播组内的设备发送数据from wiznet_init import wiznet import usocket as socket import time # 初始化网络 nic wiznet(W55RP20-EVB-Pico, dhcpTrue) local_ip nic.ifconfig()[0] # 组播配置 MULTICAST_IP 224.0.0.100 PORT 8087 # 创建 UDP 套接字 s socket.socket(socket.AF_INET, socket.SOCK_DGRAM) print(✅ UDP 组播发送中...) count 0 while True: # 纯 ASCII 文本避免乱码 msg fBoard Multicast {count}.encode(ascii) s.sendto(msg, (MULTICAST_IP, PORT)) print(发送组播:, msg) count 1 time.sleep(1)组播代码关键步骤说明模块导入与网络初始化与广播代码一致调用 wiznet 函数开启 DHCP 自动联网获取本地 IP 地址组播参数配置设置组播地址为 224.0.0.100属于组播地址范围可自定义需确保所有接收设备加入该组播组端口设置为 8087与广播端口可一致无冲突UDP Socket 创建与广播代码不同组播无需开启广播模式直接创建 UDP 类型的 Socket 即可循环发送组播与广播代码逻辑一致持续发送纯 ASCII 编码的数据打印发送内容控制发送频率仅加入该组播组的设备能接收数据。6. 运行结果与测试验证6.1 串口输出结果将广播/组播发送代码烧录到 W55RP20-EVB-Pico 模块打开 Thonny 底部 Shell 窗口点击运行按钮或按 F5 键会输出类似以下内容说明 UDP 数据发送正常UDP 广播发送输出MPY: soft reboot UDP 广播发送中... 发送广播: bBoard Broadcast 0 发送广播: bBoard Broadcast 1 发送广播: bBoard Broadcast 2 发送广播: bBoard Broadcast 3 ...持续循环发送UDP 组播发送输出MPY: soft reboot ✅ UDP 组播发送中... 发送组播: bBoard Multicast 0 发送组播: bBoard Multicast 1 发送组播: bBoard Multicast 2 发送组播: bBoard Multicast 3 ...持续循环发送接收端输出广播/组播MPY: soft reboot 等待接收 UDP 数据IP192.168.1.101端口8087... 收到来自 (192.168.1.100, 54321) 的数据Board Broadcast 0 收到来自 (192.168.1.100, 54321) 的数据Board Broadcast 1 ...持续接收发送端数据6.2 UDP 通信验证方法通信完成后可通过以下两种方式验证 UDP 广播/组播功能的正确性方法一多设备接收验证将接收端代码烧录到多块 W55RP20-EVB-Pico 模块确保所有设备与发送端连接至同一路由器同一网段)广播验证发送端运行广播代码所有接收端均能收到数据说明广播功能正常组播验证发送端运行组播代码仅加入指定组播组的接收端能收到数据未加入组播组的设备无法接收说明组播功能正常。方法二电脑端接收验证在电脑上使用串口助手或网络调试工具如 NetAssist设置为 UDP 接收模式端口与发送端一致8087广播验证电脑端无需设置目标 IP直接监听 8087 端口即可收到发送端的广播数据组播验证电脑端需加入指定组播组224.0.0.100监听 8087 端口即可收到组播数据验证通信正确性。7. 常见问题一站式排查指南开发过程中遇到 UDP 组播/广播通信失败等问题可按以下分类排查快速解决问题。7.1 烧录相关问题问题现象电脑无法识别 RPI-RP2 U 盘1. 确认按住 BOOTSEL 按键再插入 USB 数据线2. 更换支持数据传输的 USB 数据线3. 更换电脑 USB 接口优先使用 USB 2.0 接口4. 尝试使用另一台电脑。固件拖拽后开发板无反应1. 确认下载的是 W55RP20-EVB-Pico 模块 专属固件不是通用树莓派 Pico 固件2. 重新烧录固件确保拖拽过程中数据线未断开3. 检查 USB 供电是否稳定避免供电不足。7.2 端口识别问题问题现象Thonny 中找不到开发板端口重新插拔 USB 数据线确保连接牢固关闭其他占用串口的软件如串口助手、Arduino IDE 等在设备管理器中查看是否有 Board CDC 设备若无则安装树莓派 Pico USB 驱动重新烧录 MicroPython 固件5. 更换 USB 数据线或电脑 USB 接口。7.3 网络连接与 UDP 通信问题问题现象长时间显示 Configuring DHCP无法获取 IP1. 检查网线是否插紧网口指示灯是否闪烁2. 确认网线连接到路由器的 LAN 口不是 WAN 口3. 确认路由器已开启 DHCP 功能4. 更换路由器 LAN 口或网线5. 重启路由器和开发板6. 若无需多设备组网可切换为静态 IP 配置手动设置网络参数。IP 地址显示为 0.0.0.01. 执行上述网络连接排查步骤2. 确认代码中 SPI 引脚、CS 引脚、RST 引脚配置与硬件接线一致分离式模块需重点检查3. 确认使用的是 W55RP20-EVB-Pico 模块 专属固件4. 重新烧录固件重启开发板。UDP 发送正常但接收端收不到数据1. 确认发送端与接收端处于同一网段可通过 ifconfig 查看 IP 地址确保网段一致2. 检查发送端与接收端的端口是否一致避免端口冲突3. 组播接收需确认接收端已加入指定组播组广播接收需确认广播地址设置为 255.255.255.2554. 检查路由器是否开启组播转发功能部分路由器默认关闭需手动开启5. 关闭电脑防火墙和杀毒软件电脑作为接收端时6. 更换网线或路由器 LAN 口排查硬件连接问题。发送端报错无法创建 UDP Socket1. 确认固件为 W55RP20-EVB-Pico 专属固件通用固件可能不支持 wiznet_init 模块2. 检查代码中模块导入是否正确from wiznet_init import wiznet 无拼写错误3. 重新初始化网络重启开发板后重新运行代码4. 检查端口是否被其他程序占用更换端口重试。8. WIZnet 硬件协议栈核心优势对比为了更直观地了解 W5500 硬件协议栈芯片在 UDP 组播/广播通信中的价值我们对比了目前主流的三种嵌入式以太网方案对比维度W5500 硬件协议栈方案外接 PHY 芯片方案BOM 成本中MCU 网络模块无需额外器件中高MCU PHY 芯片 外围器件PCB 面积小模块集成度高仅需预留模块安装空间大需预留芯片、布线空间及外围电路开发难度低MicroPython 固件已封装底层少量代码实现 UDP 组播/广播中高需调试协议栈、编写底层驱动对研发能力要求高网络稳定性极高WIZnet 专注硬件 TCP/IP 协议栈 25 年抗干扰能力强UDP 丢包率低不定依赖研发人员对协议栈和网络开发的掌握程度UDP 易丢包CPU 资源占用0%协议栈完全由硬件处理不占用 MCU 资源不影响数据发送频率50%以上协议栈运行在 MCU 上占用大量 CPU 和内存影响 UDP 发送效率硬件 Socket 数量W5500 8个独立硬件 Socket支持多组播/广播同时进行视 MCU 能力而定理论支持多路拓展但实际受 CPU 资源限制网络吞吐量W5500 最高 15MbpsUDP 数据传输流畅无明显延迟视 MCU 能力而定普遍低于硬件协议栈方案多设备通信易卡顿接口易用性SPI 接口接线简单适配大多数 MCU支持高速通信需 MCU 带有 MII/RMII 等专用接口适配性有限部署难度低MicroPython 成熟固件应用层协议均有库文件多设备组网可快速部署高应用层协议需要手动移植开源库适配调试成本高9. 典型应用场景W55RP20-EVB-Pico 模块结合 MicroPython 快速开发优势和 WIZnet 硬件协议栈的稳定性非常适合以下基于 UDP 组播/广播的嵌入式、物联网应用场景物联网多设备同步控制同一网段内多台智能设备如灯光、传感器通过 UDP 广播接收控制指令实现同步启停、参数配置工业设备状态监控多台工业传感器通过 UDP 组播向监控中心发送设备状态、采集数据如温湿度、压力实现集中监控智能网关数据汇总多个子设备通过 UDP 广播向网关发送数据网关汇总后上传至云平台简化多设备组网架构设备自动发现新接入网络的设备通过 UDP 广播发送自身信息如设备 ID、IP 地址网关或主控设备接收后完成自动组网无需手动配置嵌入式教学实验适合高校、培训机构的嵌入式开发教学直观演示 UDP 协议原理、组播/广播区别降低教学难度实时数据推送如智能交通、环境监测等场景多台设备同步接收实时数据如路况、监测指标实现快速响应。10. 系列预告与资源获取10.1 系列预告下一篇教程我们将讲解 W55RP20-EVB-Pico 模块 MicroPython 开发下的 NTP 从网络获取时间实现带你了解 NTP 协议原理、网络时间同步流程、本地时间校准、定时同步等关键机制掌握嵌入式设备精准获取网络时间的核心能力为后续日志打时间戳、定时任务执行、物联网设备时序控制打下基础。10.2 资源获取WIZnet官网W5500 芯片手册WIZnet 官方资料网址