W55RP20-EVB-MKR 模块 MicroPython 实战 (5):UDP 快速实现 UDP 通信
本文为 W55RP20-EVB-MKR模块 MicroPython 教程专项篇,基于官方最新固件编写,代码均经过实际验证,可直接烧录运行。 版权声明:本文为 WIZnet 官方原创技术文章,转载请注明出处。
前言
上一篇教程中,我们已经完成了 TCP Server 服务端通信 的开发,实现了面向连接、稳定可靠的 TCP 数据交互。而在局域网设备快速通信、低延迟指令下发等场景中,UDP 协议凭借更轻量、更高效的特性,成为嵌入式开发的重要选择。
当我们结合 WIZnet W5500 网络模块,MicroPython 和树莓派 MKR的开发潜力被进一步放大。W5500 模块内置硬件 TCP/IP 协议栈,免去 MCU 协议栈移植与解析压力,可快速实现无连接 UDP 数据交互。
UDP 凭借低延迟、轻量化、高效率的特性,广泛应用于传感器上报、局域网设备交互、工业短指令通信等物联网场景。本文将基于 W55RP20-EVB-MKR开发板,使用极简封装代码快速搭建 UDP 服务端,完成数据接收与自动回复功能。
本文将带你快速上手 W55RP20-EVB-MKR模块的 MicroPython 开发,重点实现 UDP 通信功能,学完本文,你将掌握:
- UDP 协议的核心原理与无连接工作流程
- W55RP20-EVB-MKR模块开发环境快速搭建
- 极简代码实现 UDP 服务端收发通信
- 网络调试助手联调测试方法
- UDP 通信异常与网络故障一站式排查
- WIZnet 硬件协议栈在短包通信中的核心优势
系列教程学习路径
本专栏共 15 篇,循序渐进覆盖 W55RP20-EVB-MKR模块 MicroPython 开发全流程:
11.第 11 篇:HTTP 协议与 OneNET 平台数据上云
14.第 14 篇:MQTT 协议与 OneNET 平台对接
15.第 15 篇:MQTT 协议与 ThingSpeak 平台对接
建议收藏本专栏,跟随教程逐步学习,所有代码均会同步更新至官方 Gitee 仓库。
目录
2. 烧录 W55RP20-EVB-MKR模块专属 MicroPython 固件
1. 准备工作
1.1 软件准备
所需软件均为免费版本,按要求下载安装即可,无需额外付费。
|
软件名称 |
版本要求 |
下载地址 |
说明 |
|---|---|---|---|
|
Thonny |
4.0 及以上 |
Thonny 官方下载 |
轻量级 MicroPython IDE,支持代码编辑、烧录与串口调试,新手友好 |
|
W55RP20-EVB-MKR模块 MicroPython 固件 |
最新稳定版 |
WIZnet 官方固件下载 |
专为 W55RP20-EVB-MKR模块 编写,已集成 WIZnet 硬件驱动与协议栈 |
1.2 硬件准备
-
W55RP20-EVB-MKR× 1 -
Micro USB 数据线(必须支持数据传输,不能使用纯充电线)× 1
-
标准网线 × 1
-
开启 DHCP 功能的路由器 / 交换机 × 1(用于获取网络参数,实现 DNS 解析)
W55RP20-EVB-MKR模块已集成以太网相关器件,无需额外焊接飞线,配合 RP2040 开发板可快速搭建开发环境,大幅降低接线错误和硬件故障概率。
2. 烧录 W55RP20-EVB-MKR模块专属 MicroPython 固件
W55RP20-EVB-MKR模块 完全兼容树莓派 MKR的 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-MKR模块连接分为两步,分别实现供电/调试和以太网连接,操作简单,无需复杂接线:
3.1.1 基础连接(供电+调试)
使用 Micro USB 数据线连接 RP2040 开发板与电脑,用于开发板供电、代码烧录和串口调试。
3.1.2 以太网连接
使用网线连接 W55RP20-EVB-MKR模块的以太网接口与路由器的 LAN 口(或直接连接电脑网口,需手动配置电脑 IP 与开发板同网段)。
3.1.3 模块与开发板接线
若使用分离式模块与开发板,需按以下引脚对应连接(SPI 通信):
【硬件预留】此处插入硬件连接示意图
3.2 Thonny 开发环境配置
打开 Thonny 软件,按以下步骤配置开发环境,确保代码能正常烧录和运行:
-
点击顶部菜单栏「运行」→「配置解释器」;
-
切换到「解释器」选项卡;
-
在「解释器」下拉列表中选择 MicroPython (通用);
-
在「端口」下拉列表中选择开发板对应的串口(通常显示为 Board CDC @ COMx);
-
勾选「运行代码前先重启解释器」和「同步设备的实时时钟」;
-
点击「确定」完成配置。
如果端口列表中没有出现开发板,请尝试:
重新插拔 USB 数据线;
更换支持数据传输的 USB 数据线;
关闭其他占用串口的软件(如串口助手、Arduino IDE 等);
重新烧录 MicroPython 固件;
安装树莓派 MKR USB 驱动。
4. UDP 通信原理
4.1 UDP 协议简介
UDP(User Datagram Protocol,用户数据报协议)是传输层无连接通信协议,区别于 TCP 面向连接的特性,UDP 无需三次握手、无需维持连接状态,以独立数据报形式完成收发。
协议结构精简、头部开销极小,牺牲部分可靠性换取超低延迟与高速传输,是嵌入式物联网短消息交互的首选协议。
4.2 UDP 工作流程
W55RP20-EVB-MKR模块实现 UDP 通信的完整工作流程如下:
- 开发板上电 → 初始化 SPI 接口 → 激活 W55RP20-EVB-MKR模块网络模块;
- 通过 DHCP / 静态 IP 完成网络入网;
- 创建 UDP 数据报套接字,绑定固定监听端口;
- 持续阻塞监听,等待局域网客户端数据接入;
- 接收数据报文,同步获取客户端 IP 与端口信息;
- 封装回复数据,定向回传至发送端;
- 循环监听,持续处理多轮 UDP 交互。
4.3 UDP 核心优势
- 无连接通信,无需握手流程,响应速度快;
- 协议轻量化,占用网络带宽与 MCU 资源极低;
- 支持单播、广播、组播多种通信模式;
- 适合短帧、高频、实时性要求高的数据传输;
- 代码实现简单,嵌入式开发调试成本低。
4.4 典型应用场景
- 物联网传感器定时数据上报;
- 局域网设备发现与批量控制;
- 工业设备轻量化指令交互;
- 智能家居实时状态同步;
- 嵌入式网络协议入门学习。
5. 核心代码解析
W55RP20-EVB-MKR模块的 MicroPython 库已经封装了所有底层细节,实现 UDP 通信仅需 X 行核心代码,无需编写复杂的底层驱动和协议解析逻辑。
5.1 完整代码
以下代码可直接复制到 Thonny 中,烧录后即可运行,实现UDP 通信功能:
from wiznet_init import wiznet
import usocket as socket
import time
# 初始化网络
nic = wiznet("W55RP20-EVB-Pico", 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)
以下是实现UDP 通信功能过程:
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-Pico模块)
nic = wiznet("W55RP20-EVB-Pico", dhcp=False) nic.ifconfig(("192.168.1.100","255.255.255.0","192.168.1.1","114.114.114.114"))
注意:静态 IP 需与电脑/服务器处于同一网段,否则无法实现 UDP 通信和网络交互。
6. 运行结果与测试验证
6.1 串口输出结果
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 地址,需检查网络连接和固件配置。
6.2 UDP 联调验证方法
解析完成后,可通过以下步骤验证 UDP 通信功能的正确性:
- 打开网络调试助手,选择 UDP 客户端模式;
- 填写 W55RP20-EVB-MKR模块打印的本地 IP 与端口 8087;
- 手动输入测试数据,点击发送;
- Thonny 串口实时打印接收内容,调试助手同步接收模块回复;
- 数据收发正常,代表 W55RP20-EVB-MKR模块 UDP 通信搭建完成。
7. 常见问题一站式排查指南
开发过程中遇到问题,可按以下分类排查,快速解决问题。
7.1 烧录与端口问题
|
问题现象 |
排查步骤 |
|---|---|
|
无法识别 RPI-RP2 U 盘 |
1. 确认按住 BOOTSEL 按键再插入 USB 数据线; 2. 更换支持数据传输的 USB 数据线; 3. 更换电脑 USB 接口(优先使用 USB 2.0 接口); 4. 尝试使用另一台电脑。 |
|
Thonny 找不到串口 |
1. 安装树莓派 MKRUSB 驱动; 2. 关闭串口助手等占用软件; 3. 重新插拔 USB 数据线; 4. 重新烧录 W55RP20-EVB-MKR专属固件。 |
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 硬件协议栈核心优势对比
为了让你更直观地了解 W5500 硬件协议栈芯片的价值,我们对比了目前主流的三种嵌入式以太网方案:
|
对比维度 |
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 最高 15Mbps,UDP 数据传输流畅,无明显延迟 |
视 MCU 能力而定,普遍低于硬件协议栈方案,多设备通信易卡顿 |
|
|
接口易用性 |
SPI 接口,接线简单,适配大多数 MCU,支持高速通信 |
需 MCU 带有 MII/RMII 等专用接口,适配性有限 |
|
|
部署难度 |
低(MicroPython 成熟固件,应用层协议均有库文件,多设备组网可快速部署) |
高(应用层协议需要手动移植开源库适配,调试成本高) |
9. 典型应用场景
W55RP20-EVB-MKR模块,结合 MicroPython 快速开发优势和 WIZnet 硬件协议栈的稳定性,非常适合以下嵌入式、物联网应用场景:
- 工业现场传感器数据定时采集上报;
- 局域网内多设备快速发现与统一控制;
- 嵌入式轻量化控制指令双向交互;
- 物联网低功耗节点短消息通信;
- 高校 / 企业嵌入式网络教学实战案例。
10. 系列预告与资源获取
10.1 系列预告
下一篇教程我们将讲解 W55RP20-EVB-MKR模块 MicroPython 开发下的 UDP 组播与广播通信实现,带你了解组播地址配置、广播指令发送、多设备同步响应等关键机制,掌握局域网多设备集群控制的核心能力,为后续物联网多节点协同项目打下基础。W55RP20 芯片手册
10.2 资源获取
-
W55RP20 芯片手册: WIZnet 官方资料页面
下一篇我们讲解:W55RP20-EVB-MKR 模块 MicroPython 实战(6): UDP组播/广播实现局域网批量通信
更多推荐


所有评论(0)