W55RP20芯片 CircuitPython 实战 (1):快速完成静态IP联网测试
本文为 WIZnet W55RP20 芯片 CircuitPython 教程第 1 篇,基于 CircuitPython 环境编写,代码均经过实际验证,可直接参考使用。
版权声明:本文为 WIZnet 官方原创技术文章,转载请注明出处。
前言
在嵌入式物联网开发中,网络连接永远是第一步,也是最容易踩坑的一步。
传统以太网开发面临三大普遍痛点:
资源占用高:软件 TCP/IP 协议栈会占用 MCU 大量的 CPU 和内存资源,挤占主业务运行空间,实时性变差
开发难度大:外接以太网模块需要手动接线、调试接口时序、编写底层驱动,新手入门周期长,时间开销大
调试稳定门槛高:软件协议栈可参考资料少、问题定位困难,想要达到长期稳定运行,需要深度掌握网络原理与丰富的网络调试经验
W55RP20 作为 WIZnet 推出的 SiP 系统级芯片,它将微控制器与硬件 TCP/IP 以太网控制器集成在单一芯片中,TCP/IP 协议栈处理由硬件完成,可以降低 MCU 网络处理负担。
同时W55RP20-EVB-MKR 开发板兼容树莓派 Pico 的引脚和软件生态,既可以使用 C 语言进行工程开发,也可以使用 CircuitPython 进行快速验证和脚本式开发。
本文将带你完成 W55RP20 芯片的 CircuitPython 环境搭建与静态 IP 配置测试。学完本文,你将掌握:
- W55RP20-EVB-MKR 开发板的 CircuitPython 固件烧录与环境配置
- CircuitPython 的基本概念
- 静态 IP、子网掩码和网关的含义
- 使用 CircuitPython 配置固定 IP 地址
- 使用 PIO 模拟 SPI 与 W5500 通信
- 网络连通性验证与常见故障排查
系列教程学习路径
本系列共 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 CircuitPython 简介
- 1.1 CircuitPython 是什么
- 1.2 CircuitPython 的特点
- 2 Network 静态 IP 示例简介
- 2.1 本示例的作用
- 2.2 Network 静态 IP 联网流程
- 3 准备工作
- 3.1 软件准备
- 3.2 硬件准备
- 4. CircuitPython 固件烧录与文件准备
- 5 硬件连接与开发环境配置
- 5.1 硬件连接
- 5.2 Thonny 开发环境配置
- 6 Network 静态 IP 示例代码
- 6.1 完整代码
- 7 运行结果与网络验证
- 7.1 Thonny 输出结果
- 7.2 电脑端 ping 测试结果
- 7.3 Network 功能演示视频
- 8 常见问题一站式排查指南
- 8.1 W5500 初始化失败
- 8.2 ping 不通开发板
- 8.3 IP 地址冲突
- 9 W55RP20 核心优势对比
- 10 典型应用场景
- 11 系列预告与资源获取
- 11.1 系列预告
- 11.2 资源获取
1. CircuitPython 简介
1.1 CircuitPython 是什么
CircuitPython 是一种面向微控制器和嵌入式设备的 Python 解释器,语法接近 Python,适合快速编写、测试和修改程序。
在 CircuitPython 中,用户通常只需要将代码保存为code.py,开发板就会自动运行该文件。相比 C 语言工程,CircuitPython 不需要频繁编译和下载,更适合快速验证硬件功能和编写演示程序。
1.2 CircuitPython 的特点
CircuitPython 的主要特点如下:
| 特点 | 说明 |
|---|---|
| 上手简单 | 使用 Python 语法,代码更容易理解 |
| 修改方便 | 修改code.py后保存即可自动运行 |
| 适合快速验证 | 不需要每次编译工程,适合测试硬件功能 |
| 库生态丰富 | 可通过 CircuitPython 库快速扩展功能 |
| 适合教学演示 | 代码简洁,便于展示程序逻辑 |
2. Network 静态 IP 示例简介
2.1 本示例的作用
本文示例用于验证 W55RP20 在 CircuitPython 环境下是否可以正常初始化 W5500,并配置静态 IP 地址。
本文示例中,开发板静态 IP 为192.168.1.120,网关为192.168.1.1,子网掩码为255.255.255.0。程序运行后会读取 W5500 版本号,并打印当前网络配置信息。
该示例主要验证以下内容:
| 测试项目 | 说明 |
|---|---|
| PIO SPI 通信 | 通过 RP2040 PIO 模拟 SPI 与 W5500 通信 |
| W5500 初始化 | 判断 W5500 是否正常启动 |
| 静态 IP 配置 | 设置开发板固定 IP、网关和子网掩码 |
| 网络连通性 | 电脑端通过ping验证开发板是否在线 |
2.2 Network 静态 IP 联网流程
本示例整体流程如下:
系统启动 ↓ 加载 CircuitPython 代码 ↓ 通过 PIO 汇编实现 SPI Master ↓ 创建 rp2pio.StateMachine ↓ 配置 CS 和 RST 引脚 ↓ 初始化 WIZNET5K ↓ 配置静态 IP 参数 ↓ 读取 W5500 版本号 ↓ 打印网络信息 ↓ 电脑端 ping 开发板 IP从流程可以看到,本示例的核心是:使用 CircuitPython 通过 PIO 模拟 SPI,与 W5500 建立通信,并完成静态 IP 配置和网络连通性验证。
3. 准备工作
3.1 软件准备
本次实验使用CircuitPython作为开发语言,使用Thonny作为代码编辑和串口输出查看工具。
需要准备的软件如下:
| 软件名称 | 版本要求 | 下载地址 | 说明 |
|---|---|---|---|
| Thonny | 4.0 及以上 | Thonny 官方下载 | 用于编辑、运行代码和查看串口输出 |
| W55RP20 CircuitPython 固件 | 最新稳定版 | 按实际资料页面下载 | 用于让开发板运行 CircuitPython 程序 |
| CircuitPython 库文件 | 与固件版本匹配 | CircuitPython Libraries | 用于提供adafruit_pioasm等依赖库 |
| WIZnet CircuitPython 驱动 | 最新版本 | 按实际工程提供 | 用于提供wiznet5k_pio驱动文件 |
注意:本文代码中使用了
wiznet5k_pio、adafruit_pioasm、rp2pio等模块,运行前需要确保相关库文件已经放入CIRCUITPY磁盘。
3.2 硬件准备
如图所示,W55RP20-EVB-MKR 开发板实物图。
需要准备以下硬件:
- W55RP20-EVB-MKR开发板× 1
- USB 数据线 × 1
- 标准网线 × 1
- 路由器或交换机 × 1
提示:
W55RP20-EVB-MKR开发板已经板载以太网接口,因此不需要额外连接 W5500/W5100S 模块。但在 CircuitPython 程序中,仍需要指定 W5500 与 RP2040 内部连接所使用的 SPI、CS 和 RST 引脚,驱动才能正常访问 W5500。
4. CircuitPython 固件烧录与文件准备
运行 CircuitPython 示例前,需要先为开发板烧录对应的 CircuitPython 固件。
整体流程如下:
- 按住开发板上的
BOOTSEL按键不放 - 使用 USB 数据线连接开发板与电脑
- 电脑识别出名为
RPI-RP2的 U 盘后,松开BOOTSEL按键 - 将对应的 CircuitPython
.uf2固件拖入RPI-RP2U 盘 - 开发板自动重启后,电脑会识别出
CIRCUITPY磁盘 - 将需要的库文件复制到
CIRCUITPY/lib目录 - 将本文代码保存为
code.py - 保存后开发板会自动运行程序
如果没有出现
CIRCUITPY磁盘,请确认固件是否烧录成功,或重新插拔 USB 数据线。
5. 硬件连接与开发环境配置
5.1 硬件连接
硬件连接主要分为两步:
- 使用 USB 数据线连接开发板与电脑,用于供电、编辑代码和查看串口输出
- 使用网线连接开发板以太网接口与路由器或交换机 LAN 口
如图所示为硬件连接示意图
5.2 Thonny 开发环境配置
打开 Thonny 后,需要将解释器配置为 CircuitPython 设备对应的串口。
配置步骤如下:
- 打开 Thonny 软件,点击顶部菜单栏「运行」→「配置解释器」
- 切换到「解释器」选项卡
- 在解释器下拉列表中选择
CircuitPython - 在端口下拉列表中选择开发板对应串口
- 点击「确定」完成配置
配置完成后的界面如下图所示:
6. Network 静态 IP 示例代码
下面给出 CircuitPython 静态 IP 联网测试完整代码。代码中已经对关键部分添加注释,实际使用时需要根据当前局域网环境修改ip_address、gateway_ip和subnet_mask。
6.1 完整代码
importboardimportrp2pioimportadafruit_pioasmimportdigitalioimporttimefromwiznet5k_pioimportWIZNET5K# PIO 汇编代码:使用 RP2040 的 PIO 模拟 SPI Master# 这里通过 PIO 控制 MOSI、MISO、CLK 引脚,实现与 W5500 的 SPI 通信spi_master=""" .program spi_master pull block set x, 7 bitloop: out pins, 1 set pins, 1 nop [1] in pins, 1 set pins, 0 jmp x-- bitloop push block """# 配置开发板 MAC 地址mac_address=[0x00,0x08,0xDC,0x01,0x02,0x03]# 配置静态 IP 地址# 需要根据当前局域网环境修改,避免与其他设备 IP 冲突ip_address=[192,168,1,120]# 配置网关地址,通常为路由器地址gateway_ip=[192,168,1,1]# 配置子网掩码subnet_mask=[255,255,255,0]# 将 PIO 汇编代码编译成 StateMachine 可执行的指令assembled=adafruit_pioasm.assemble(spi_master)# 创建 PIO StateMachine,用于模拟 SPI 通信sm=rp2pio.StateMachine(assembled,frequency=1_000_000,# PIO SPI 通信频率:1 MHzfirst_out_pin=board.GP23,# MOSI,引脚用于输出数据first_in_pin=board.GP22,# MISO,引脚用于读取数据first_set_pin=board.GP21,# CLK,引脚用于输出时钟out_pin_count=1,in_pin_count=1,set_pin_count=1,in_shift_right=False,out_shift_right=False,push_threshold=8,pull_threshold=8,)# 配置 W5500 片选引脚 CScs_pin=digitalio.DigitalInOut(board.GP20)# 配置 W5500 复位引脚 RSTrst_pin=digitalio.DigitalInOut(board.GP25)# 初始化 WIZNET5K# 这里会完成 W5500 初始化,并写入 MAC、IP、网关、子网掩码等网络参数wiznet=WIZNET5K(sm,cs_pin,rst_pin,mac_address=mac_address,ip_address=ip_address,gateway_ip=gateway_ip,subnet_mask=subnet_mask,)# 读取 W5500 版本号# 正常情况下,W5500 版本号通常为 0x04version=wiznet.read_version()print("W5500 Version: 0x%02X"%version)# 打印当前网络信息# 输出格式通常为:IP 地址、子网掩码、网关、DNSprint("Network information:",wiznet.ifconfig)# 保持程序运行,避免 code.py 执行结束whileTrue:time.sleep(1)7. 运行结果与网络验证
完成固件烧录、库文件准备、代码保存和硬件连接后,即可在 Thonny 中查看程序运行结果,并在电脑端使用ping命令验证网络连通性。
7.1 Thonny 输出结果
程序运行后,Thonny Shell 输出如下:
>>> %Run -c $EDITOR_CONTENT W5500 Initialization complete W5500 Version: 0x04 Network information: ('192.168.1.120', '255.255.255.0', '192.168.1.1', b'\x00\x00\x00\x00')从输出结果可以看到,W5500 初始化成功,版本号读取结果为0x04,当前开发板 IP 地址为192.168.1.120。
7.2 电脑端 ping 测试结果
在 Windows 命令提示符中输入:
ping192.168.1.120实际测试结果如下图所示:
从 ping 结果可以看到,电脑成功收到来自192.168.1.120的回复,且丢包率为0%,说明电脑与 W55RP20-EVB-MKR 开发板之间网络连通正常。
7.3 Network 功能演示视频
下面的视频展示了 W55RP20 在 CircuitPython 环境下运行静态 IP 示例后,Thonny 输出 W5500 初始化信息,并通过电脑端ping命令验证网络连通性的过程。
8. 常见问题一站式排查指南
8.1 W5500 初始化失败
| 问题现象 | 排查步骤 |
|---|---|
无法打印W5500 Initialization complete或版本号异常 | 1. 确认 wiznet5k_pio.py已复制到开发板2. 确认 adafruit_pioasm等依赖库已放入lib目录3. 检查 PIO SPI 引脚是否与代码一致 4. 重新插拔 USB 数据线并重启程序 |
8.2 ping 不通开发板
| 问题现象 | 排查步骤 |
|---|---|
电脑端无法 ping 通192.168.1.120 | 1. 确认开发板和电脑连接到同一路由器 2. 确认网线已插好,路由器 LAN 口正常 3. 确认 ip_address与电脑处于同一网段4. 确认局域网中没有其他设备占用 192.168.1.1205. 临时关闭电脑防火墙后再次测试 |
8.3 IP 地址冲突
如果局域网中已经存在192.168.1.120,可能导致 ping 不通或网络不稳定。
可以修改代码中的静态 IP,例如:
ip_address=[192,168,1,121]修改后保存code.py,开发板会自动重新运行程序。
9. W55RP20 核心优势对比
为了让你更直观地了解 W55RP20 的价值,我们对比了目前主流的三种嵌入式以太网方案:
| 对比维度 | W55RP20 集成方案 | 外接 PHY 芯片方案 | 外接串口转以太网模块方案 |
|---|---|---|---|
| BOM 成本 | 低 (单芯片) | 中高 (MCU + 模块 + 外围器件) | 高 |
| PCB 面积 | 小 (仅需网口电路) | 大 (需预留芯片和布线空间) | 高 |
| 开发难度 | 低 (一行代码联网) | 中高 (调试协议栈、编写驱动) | 低 |
| 网络稳定性 | 极高 (WIZnet 专注硬件 TCP/IP 协议栈 25 年) | 不定 (对于研发人员要求高,熟悉协议栈与网络开发,才能调试稳定) | 不定 (视研发公司能力水平) |
| CPU 资源占用 | 0% (协议栈网络处理完全由硬件完成) | 50% 以上 (协议栈完全运行在 MCU 上,占用相关资源) | 0% |
| 硬件 Socket 数量 | 8 个独立硬件 Socket | 视 MCU 能力而定,理论支持多路拓展 | 一般为单路透传 |
| 网络吞吐量 | 最高 15Mbps | 视 MCU 能力而定 | 约 3-5Mbps |
| 接口易用性 | 单芯片集成 | 要 MCU 带有 MII/RMII 等接口 | TTL 接口 |
| 部署难度 | 低 (CircuitPython 固件和库生态完善,适合快速验证和脚本式开发) | 高 (应用层协议需要手动移植开源库适配) | 视模块集成情况,无集成的功能需要自我封包拆包 |
W55RP20-EVB-MKR已经板载以太网接口,因此非常适合新手快速完成以太网功能验证。
对于静态 IP 示例来说,W55RP20-EVB-MKR的优势在于:不需要额外连接以太网模块,也不需要手动配置复杂的底层驱动,只需要通过 CircuitPython 示例代码配置网络参数即可完成联网测试
10. 典型应用场景
W55RP20 芯片集成以太网功能,适合以下应用场景:
- 工业数据采集网关;
- 远程监控终端;
- 串口转网口设备;
- 智能楼宇控制节点;
- 工业 PLC 扩展模块;
- 传感器数据采集与上传;
11. 系列预告与资源获取
11.1 系列预告
下一篇教程将继续讲解 W55RP20 CircuitPython 开发中的DHCP自动获取IP地址测试。
相比静态 IP,DHCP 可以让开发板自动从路由器获取 IP 地址、子网掩码、网关和 DNS,更适合快速测试和初学者入门。
11.2 资源获取
- 本文完整代码:WIZnet Pico Circuitpython 示例工程
- W55RP20 芯片手册:WIZnet 官方资料页面
如果本文对你有帮助,欢迎点赞、收藏、关注,你的支持是我们持续更新的动力!
如有任何问题,欢迎在评论区留言,我们会第一时间回复。
