W55RP20-EVB-MKR模块 MicroPython 实战 (5):UDP 快速实现 UDP 通信
本文为 WIZnet W55RP20 芯片 MicroPython 教程第 5 篇,基于官方最新固件编写,代码均经过实际验证,可直接烧录运行。
版权声明:本文为 WIZnet 官方原创技术文章,转载请注明出处。
前言
上一篇教程中,我们已经完成了 TCP Server 服务端通信 的开发,实现了面向连接、稳定可靠的 TCP 数据交互。而在局域网设备快速通信、低延迟指令下发等场景中,UDP 协议凭借更轻量、更高效的特性,成为嵌入式开发的重要选择。
当我们结合 WIZnet W5500 网络模块,MicroPython 和树莓派 MKR 的开发潜力被进一步放大。W5500 模块内置硬件 TCP/IP 协议栈,免去 MCU 协议栈移植与解析压力,可快速实现无连接 UDP 数据交互。
UDP 凭借低延迟、轻量化、高效率的特性,广泛应用于传感器上报、局域网设备交互、工业短指令通信等物联网场景。本文将基于 W55RP20-EVB-MKR 开发板,使用极简封装代码快速搭建 UDP 服务端,完成数据接收与自动回复功能。
本文将带你完成 W55RP20 芯片的 UDP 通信实战。学完本文,你将掌握:
- UDP 协议的核心原理与无连接工作流程
- W55RP20-EVB-MKR 模块开发环境快速搭建
- 极简代码实现 UDP 服务端收发通信
- 网络调试助手联调测试方法
- UDP 通信异常与网络故障一站式排查
- WIZnet 硬件协议栈在短包通信中的核心优势
系列教程学习路径
本系列共 16 篇,循序渐进覆盖从基础联网到工业级应用的全流程:
- 第 1 篇:静态 IP 配置与网络基础
- 第 2 篇:DHCP 自动联网与网络诊断
- 第 3 篇:TCP Client 客户端通信
- 第 4 篇:TCP Server 服务端通信
- 第 5 篇:UDP 单播数据通信(本文)
- 第 6 篇:UDP 组播/广播数据通信
- 第 7 篇:DNS 域名解析
- 第 8 篇:NTP 从网络获取时间
- 第 9 篇:HTTP Client 客户端请求
- 第 10 篇:HTTP Server 服务端搭建
- 第 11 篇:HTTP 协议与 OneNET 平台数据上云
- 第 12 篇:MQTT 协议基础通信验证
- 第 13 篇:MQTT 协议与阿里云平台对接
- 第 14 篇:MQTT 协议与 OneNET 平台对接
- 第 15 篇:MQTT 协议与 ThingSpeak 平台对接
- 第 16 篇:Modbus 工业协议通信
建议收藏本系列,跟随教程逐步学习,所有代码均会同步更新至官方 Gitee 仓库。
目录
- 1 UDP 通信原理
- 2 准备工作
- 3 烧录 W55RP20-EVB-MKR 专属 MicroPython 固件
- 4 硬件连接与开发环境配置
- 5 核心代码解析
- 6 运行结果与测试验证
- 7 常见问题一站式排查指南
- 8 WIZnet 硬件协议栈核心优势对比
- 9 典型应用场景
- 10 总结
- 11 系列预告与资源获取
1. UDP 通信原理
1.1 UDP 协议简介
UDP(User Datagram Protocol,用户数据报协议)是传输层无连接通信协议,区别于 TCP 面向连接的特性,UDP 无需三次握手、无需维持连接状态,以独立数据报形式完成收发。
协议结构精简、头部开销极小,牺牲部分可靠性换取超低延迟与高速传输,是嵌入式物联网短消息交互的首选协议。
相比 TCP,UDP 没有连接建立和断开的握手过程,每个数据包独立发送,接收方无需确认,发送方也不等待回应,因此延迟更低、效率更高。
1.2 UDP 工作流程
W55RP20-EVB-MKR 模块实现 UDP 通信的完整工作流程如下:
- 开发板上电 → 初始化 SPI 接口 → 激活 W55RP20-EVB-MKR 模块网络模块
- 通过 DHCP / 静态 IP 完成网络入网
- 创建 UDP 数据报套接字,绑定固定监听端口
- 持续阻塞监听,等待局域网客户端数据接入
- 接收数据报文,同步获取客户端 IP 与端口信息
- 封装回复数据,定向回传至发送端
- 循环监听,持续处理多轮 UDP 交互
1.3 UDP 核心优势
- 无连接通信,无需握手流程,响应速度快
- 协议轻量化,占用网络带宽与 MCU 资源极低
- 支持单播、广播、组播多种通信模式
- 适合短帧、高频、实时性要求高的数据传输
- 代码实现简单,嵌入式开发调试成本低
1.4 典型应用场景
| 场景 | 说明 |
|---|---|
| 物联网传感器定时数据上报 | 低延迟、低功耗,适合频繁短包上报 |
| 局域网设备发现与批量控制 | 支持广播模式,一次发送多设备响应 |
| 工业设备轻量化指令交互 | 实时性强,适合短指令双向通信 |
| 智能家居实时状态同步 | 多设备组播通信,状态同步高效 |
| 嵌入式网络协议入门学习 | 代码简洁,适合快速验证网络功能 |
2. 准备工作

2.1 软件准备
| 软件名称 | 版本要求 | 下载地址 | 说明 |
|---|---|---|---|
| Thonny | 4.0 及以上 | Thonny 官方下载 | 轻量级 MicroPython IDE,支持代码编辑、烧录与串口调试,新手友好 |
| W55RP20-EVB-MKR 模块 MicroPython 固件 | 最新稳定版 | WIZnet 官方固件下载 | 专为 W55RP20-EVB-MKR 模块编写,已集成 WIZnet 硬件驱动与协议栈 |
2.2 硬件准备
需要准备以下硬件:
- W55RP20-EVB-MKR 开发板 × 1
- Micro USB 数据线(必须支持数据传输,不能使用纯充电线)× 1
- 标准网线 × 1
- 开启 DHCP 功能的路由器 / 交换机 × 1
提示:W55RP20-EVB-MKR 模块已集成以太网相关器件,无需额外焊接飞线,配合 RP2040 开发板可快速搭建开发环境,大幅降低接线错误和硬件故障概率。
3. 烧录 W55RP20-EVB-MKR 专属 MicroPython 固件
运行 UDP 示例前,需要先给 W55RP20-EVB-MKR 烧录对应的 MicroPython 固件。
W55RP20-EVB-MKR 模块完全兼容树莓派 MKR 的 UF2 固件烧录方式,操作步骤如下:
- 按住 RP2040 开发板上的
BOOTSEL按键不放 - 使用 Micro USB 数据线连接开发板与电脑
- 待电脑识别出名为
RPI-RP2的 U 盘后,松开 BOOTSEL 按键 - 将下载好的
.uf2固件文件拖拽到RPI-RP2U 盘中 - 开发板会自动重启,固件烧录完成
注意:如果电脑没有识别出
RPI-RP2U 盘,可以重新插拔 USB 数据线,或更换支持数据传输的 USB 线,也可以更换电脑 USB 接口(优先使用 USB 2.0 接口)。
4. 硬件连接与开发环境配置
4.1 硬件连接
W55RP20-EVB-MKR 的连接极其简单,仅需两步:
-
使用 Micro USB 数据线连接 RP2040 开发板与电脑(用于供电、代码烧录和串口调试)
-
使用网线连接 W55RP20-EVB-MKR 模块的以太网接口与路由器的 LAN 口

4.2 Thonny 开发环境配置
-
打开 Thonny 软件,点击顶部菜单栏「运行」→「配置解释器」
-
切换到「解释器」选项卡
-
在「解释器」下拉列表中选择
MicroPython(通用) -
在「端口」下拉列表中选择 W55RP20-EVB-MKR 对应的串口(通常显示为
Board CDC @ COMx) -
勾选「运行代码前先重启解释器」和「同步设备的实时时钟」
-
点击「确定」完成配置
如果端口列表中没有出现开发板,请尝试:
- 重新插拔 USB 数据线
- 更换支持数据传输的 USB 数据线
- 关闭其他占用串口的软件(如串口助手、Arduino IDE 等)
- 重新烧录 MicroPython 固件
- 安装树莓派 MKR USB 驱动
5. 核心代码解析
W55RP20-EVB-MKR 模块的 MicroPython 库已经封装了所有底层细节,实现 UDP 通信仅需少量核心代码,无需编写复杂的底层驱动和协议解析逻辑。
5.1 完整代码
打开 UDP 示例文件,或在 Thonny 中输入以下代码:
from wiznet_init import wiznet
import usocket as socket
import time
# 初始化网络
nic = wiznet("W55RP20-EVB-MKR", dhcp=True)
local_ip = nic.ifconfig()[0]
local_port = 8087
print("==================================")
print(" UDP 服务器已启动")
print(" 本地IP:", local_ip)
print(" 本地端口:", local_port)
print("==================================")
# 创建 UDP 套接字
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(("0.0.0.0", local_port)) # 绑定所有地址
# 循环接收 & 回复
while True:
data, addr = s.recvfrom(1024) # 等待电脑发送数据
print("收到来自", addr, ":", data)
# 回复电脑
s.sendto(b"UDP Server reply: " + data, addr)
5.2 代码关键步骤说明
- 网络初始化:基于官方封装的
wiznet工具库,一行代码完成 W55RP20-EVB-MKR 模块硬件驱动加载、以太网激活、DHCP 自动组网,规避底层 SPI 与寄存器复杂配置。 - UDP 套接字创建:使用
SOCK_DGRAM声明数据报模式,专属 UDP 通信,与 TCP 流式套接字做区分,适配 UDP 无连接特性。 - 端口绑定配置:绑定
0.0.0.0监听全网段,确保局域网内任意设备均可访问 W55RP20-EVB-MKR 模块的 UDP 服务端端口。 - 双向通信逻辑:
recvfrom阻塞等待接收数据,自动携带客户端地址;sendto根据目标地址定向回复,实现一问一答闭环通信,适配嵌入式短消息交互场景。
5.3 扩展:静态 IP 手动配置
无 DHCP 路由器环境下,可关闭自动组网,手动固定 IP、网关、DNS:
# 关闭DHCP,手动配置静态网络参数(适配W55RP20-EVB-MKR模块)
nic = wiznet("W55RP20-EVB-MKR", dhcp=False)
nic.ifconfig(("192.168.1.100","255.255.255.0","192.168.1.1","114.114.114.114"))
注意:静态 IP 需与电脑/服务器处于同一网段,否则无法实现 UDP 通信和网络交互。
6. 运行结果与测试验证
完成硬件连接和 Thonny 开发环境配置后,就可以运行 UDP 示例程序,并查看 W55RP20-EVB-MKR 是否成功收发 UDP 数据。
6.1 串口输出结果
在 Thonny 中点击运行按钮,或按 F5 运行程序。
运行后,Shell 窗口会输出类似以下内容:
Waiting for the network to connect...
MAC Address: 02:90:86:88:4d:56
IP Address: ('192.168.1.118', '255.255.255.0', '192.168.1.1', '202.96.134.33')
==================================
UDP 服务器已启动
本地IP: 192.168.1.118
本地端口: 8087
==================================
收到来自 ('192.168.1.141', 8087) : b'Hello WIZnet\r\n'
收到来自 ('192.168.1.141', 8087) : b'Hello WIZnet\r\n'
说明:解析后的 IP 地址可能因网络环境、路由器配置不同而略有差异,属于正常现象;若未显示 IP 地址,需检查网络连接和固件配置。
实际运行结果如下图所示:
UDP
6.2 UDP 联调验证方法
- 打开网络调试助手,选择 UDP 客户端模式
- 填写 W55RP20-EVB-MKR 模块打印的本地 IP 与端口
8087 - 手动输入测试数据,点击发送
- Thonny 串口实时打印接收内容,调试助手同步接收模块回复
- 数据收发正常,代表 W55RP20-EVB-MKR 模块 UDP 通信搭建完成
7. 常见问题一站式排查指南
7.1 烧录与端口问题
| 问题现象 | 排查步骤 |
|---|---|
电脑无法识别 RPI-RP2 U 盘 |
1. 确认按住 BOOTSEL 按键再连接 USB2. 更换支持数据传输的 USB 数据线 3. 更换电脑 USB 接口 4. 尝试使用另一台电脑 |
| Thonny 中找不到开发板端口 | 1. 重新插拔 USB 数据线 2. 更换支持数据传输的 USB 数据线 3. 关闭其他占用串口的软件 4. 在设备管理器中查看是否有新串口设备 5. 重新烧录 MicroPython 固件 |
7.2 网络连接问题
| 问题现象 | 排查步骤 |
|---|---|
| 网口灯不亮 | 1. 检查网线完整性 2. 更换路由器 LAN 口 3. 重新插拔网线,确保连接牢固 |
| DHCP 获取失败 | 1. 切换静态 IP 配置,手动填写同网段参数 2. 确认路由器已开启 DHCP 功能 3. 重启路由器和 W55RP20-EVB-MKR 模块 |
| IP 地址为 0.0.0.0 | 1. 重新烧录 W55RP20-EVB-MKR 专属固件 2. 重启设备 3. 检查网络连接和接线是否正常 |
7.3 UDP 收发异常问题
| 问题现象 | 排查步骤 |
|---|---|
| 客户端无法连接 | 1. 确认双方处于同一局域网 2. 确保服务端与客户端端口号保持一致 3. 关闭电脑防火墙 |
| 数据接收为空 | 1. 限制单包长度在 1024 字节以内 2. 检查代码中接收逻辑是否正确 3. 重新烧录代码并重启模块 |
| 通信丢包严重 | 1. 关闭电脑防火墙,降低网络干扰 2. 更换优质网线 3. 减少高频连续发包,增加短延时 |
8. WIZnet 硬件协议栈核心优势对比
为了让你更直观地了解 W55RP20 的价值,我们对比了目前主流的三种嵌入式以太网方案:
| 对比维度 | W5500 硬件协议栈方案 | 外接 PHY 芯片方案 | 外接串口转以太网模块方案 |
|---|---|---|---|
| BOM 成本 | 中 (MCU + 网络模块,无需额外器件) |
中高 (MCU + PHY 芯片 + 外围器件) |
高 |
| PCB 面积 | 小 (模块集成度高,仅需预留模块安装空间) |
大 (需预留芯片、布线空间及外围电路) |
高 |
| 开发难度 | 低 (MicroPython 固件已封装底层,少量代码实现 UDP 通信) |
中高 (需调试协议栈、编写底层驱动,对研发能力要求高) |
低 |
| 网络稳定性 | 极高 (WIZnet 专注硬件 TCP/IP 协议栈 25 年,抗干扰能力强,UDP 丢包率低) |
不定 (依赖研发人员对协议栈和网络开发的掌握程度,UDP 易丢包) |
不定 (视研发公司能力水平) |
| CPU 资源占用 | 0% (协议栈完全由硬件处理,不占用 MCU 资源,不影响数据发送频率) |
50% 以上 (协议栈运行在 MCU 上,占用大量 CPU 和内存,影响 UDP 发送效率) |
0% |
| 硬件 Socket 数量 | W5500 8 个独立硬件 Socket,支持多组播/广播同时进行 | 视 MCU 能力而定,理论支持多路拓展,但实际受 CPU 资源限制 | 一般为单路透传 |
| 网络吞吐量 | W5500 最高 15Mbps,UDP 数据传输流畅,无明显延迟 | 视 MCU 能力而定,普遍低于硬件协议栈方案,多设备通信易卡顿 | 约 3-5Mbps |
| 接口易用性 | SPI 接口,接线简单,适配大多数 MCU,支持高速通信 | 需 MCU 带有 MII/RMII 等专用接口,适配性有限 | TTL 接口 |
| 部署难度 | 低 (MicroPython 成熟固件,应用层协议均有库文件,多设备组网可快速部署) |
高 (应用层协议需要手动移植开源库适配,调试成本高) |
视模块集成情况,无集成的功能需要自我封包拆包 |
W55RP20-EVB-MKR 开发板已经板载以太网接口,因此非常适合快速完成以太网功能验证。
对于 UDP 示例来说,W55RP20-EVB-MKR 开发板的优势在于:不需要额外连接以太网模块,也不需要手动配置复杂的底层驱动,只需要通过 MicroPython 示例代码几行代码即可完成 UDP 通信测试。
9. 典型应用场景
W55RP20-EVB-MKR 模块,结合 MicroPython 快速开发优势和 WIZnet 硬件协议栈的稳定性,非常适合以下场景:
- 工业现场传感器数据定时采集上报
- 局域网内多设备快速发现与统一控制
- 嵌入式轻量化控制指令双向交互
- 物联网低功耗节点短消息通信
- 高校 / 企业嵌入式网络教学实战案例
在这些场景中,UDP 的低延迟和轻量化特性可以让开发板更高效地完成数据交互,减少网络通信的额外开销。
10. 总结
本文从 UDP 协议原理出发,系统介绍了如何基于 W55RP20-EVB-MKR 开发板快速实现 UDP 通信。通过 WIZnet 硬件 TCP/IP 协议栈的加持,仅需少量 MicroPython 代码即可完成 UDP 服务端的搭建与数据收发。
回顾本文核心要点:
- UDP 协议原理:理解了 UDP 无连接、轻量化、低延迟的核心特性,以及单播、广播、组播的工作模式
- 开发环境搭建:完成了 W55RP20-EVB-MKR 专属固件烧录与 Thonny IDE 配置
- UDP 服务端实现:使用
socket.SOCK_DGRAM创建 UDP 套接字,绑定端口监听,实现数据接收与自动回复 - 联调测试:通过网络调试助手完成 UDP 客户端与服务端的双向通信验证
- 故障排查:总结了烧录、网络连接、UDP 收发三大类常见问题的排查方法
- 方案对比:对比了 W5500 硬件协议栈、外接 PHY 芯片、串口转以太网三种方案,W55RP20 在开发便捷性、CPU 资源占用和网络稳定性方面具有显著优势
掌握本文的 UDP 通信基础后,你将能够轻松扩展到更复杂的网络应用——如组播通信、HTTP 服务、MQTT 上云等后续教程内容。
11. 系列预告与资源获取
11.1 系列预告
下一篇教程将讲解 W55RP20-EVB-MKR 模块 MicroPython 开发下的 UDP 组播与广播通信实现,带你了解:
- 组播地址配置
- 广播指令发送
- 多设备同步响应等关键机制
- 掌握局域网多设备集群控制的核心能力
11.2 资源获取
- 本文完整代码:WIZnet Pico MicroPython 示例工程
- W55RP20 芯片手册:WIZnet 官方资料页面
如果本文对你有帮助,欢迎点赞、收藏、关注,你的支持是我们持续更新的动力!
如有任何问题,欢迎在评论区留言,我们会第一时间回复。
更多推荐


所有评论(0)