当前位置: 首页 > news >正文

W55RP20芯片 CircuitPython 实战 (1):快速完成静态IP联网测试

本文为 WIZnet W55RP20 芯片 CircuitPython 教程第 1 篇,基于 CircuitPython 环境编写,代码均经过实际验证,可直接参考使用。
版权声明:本文为 WIZnet 官方原创技术文章,转载请注明出处。


前言

在嵌入式物联网开发中,网络连接永远是第一步,也是最容易踩坑的一步。

传统以太网开发面临三大普遍痛点:

  1. 资源占用高:软件 TCP/IP 协议栈会占用 MCU 大量的 CPU 和内存资源,挤占主业务运行空间,实时性变差

  2. 开发难度大:外接以太网模块需要手动接线、调试接口时序、编写底层驱动,新手入门周期长,时间开销大

  3. 调试稳定门槛高:软件协议栈可参考资料少、问题定位困难,想要达到长期稳定运行,需要深度掌握网络原理与丰富的网络调试经验

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. 第 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 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作为代码编辑和串口输出查看工具。

需要准备的软件如下:

软件名称版本要求下载地址说明
Thonny4.0 及以上Thonny 官方下载用于编辑、运行代码和查看串口输出
W55RP20 CircuitPython 固件最新稳定版按实际资料页面下载用于让开发板运行 CircuitPython 程序
CircuitPython 库文件与固件版本匹配CircuitPython Libraries用于提供adafruit_pioasm等依赖库
WIZnet CircuitPython 驱动最新版本按实际工程提供用于提供wiznet5k_pio驱动文件

注意:本文代码中使用了wiznet5k_pioadafruit_pioasmrp2pio等模块,运行前需要确保相关库文件已经放入CIRCUITPY磁盘。


3.2 硬件准备

如图所示,W55RP20-EVB-MKR 开发板实物图。


需要准备以下硬件:

提示:W55RP20-EVB-MKR开发板已经板载以太网接口,因此不需要额外连接 W5500/W5100S 模块。但在 CircuitPython 程序中,仍需要指定 W5500 与 RP2040 内部连接所使用的 SPI、CS 和 RST 引脚,驱动才能正常访问 W5500。


4. CircuitPython 固件烧录与文件准备

运行 CircuitPython 示例前,需要先为开发板烧录对应的 CircuitPython 固件。

整体流程如下:

  1. 按住开发板上的BOOTSEL按键不放
  2. 使用 USB 数据线连接开发板与电脑
  3. 电脑识别出名为RPI-RP2的 U 盘后,松开BOOTSEL按键
  4. 将对应的 CircuitPython.uf2固件拖入RPI-RP2U 盘
  5. 开发板自动重启后,电脑会识别出CIRCUITPY磁盘
  6. 将需要的库文件复制到CIRCUITPY/lib目录
  7. 将本文代码保存为code.py
  8. 保存后开发板会自动运行程序

如果没有出现CIRCUITPY磁盘,请确认固件是否烧录成功,或重新插拔 USB 数据线。


5. 硬件连接与开发环境配置

5.1 硬件连接

硬件连接主要分为两步:

  1. 使用 USB 数据线连接开发板与电脑,用于供电、编辑代码和查看串口输出
  2. 使用网线连接开发板以太网接口与路由器或交换机 LAN 口

如图所示为硬件连接示意图


5.2 Thonny 开发环境配置

打开 Thonny 后,需要将解释器配置为 CircuitPython 设备对应的串口。

配置步骤如下:

  1. 打开 Thonny 软件,点击顶部菜单栏「运行」→「配置解释器」
  2. 切换到「解释器」选项卡
  3. 在解释器下拉列表中选择CircuitPython
  4. 在端口下拉列表中选择开发板对应串口
  5. 点击「确定」完成配置

配置完成后的界面如下图所示:


6. Network 静态 IP 示例代码

下面给出 CircuitPython 静态 IP 联网测试完整代码。代码中已经对关键部分添加注释,实际使用时需要根据当前局域网环境修改ip_addressgateway_ipsubnet_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.120
5. 临时关闭电脑防火墙后再次测试

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 芯片集成以太网功能,适合以下应用场景:

  1. 工业数据采集网关;
  2. 远程监控终端;
  3. 串口转网口设备;
  4. 智能楼宇控制节点;
  5. 工业 PLC 扩展模块;
  6. 传感器数据采集与上传;

11. 系列预告与资源获取

11.1 系列预告

下一篇教程将继续讲解 W55RP20 CircuitPython 开发中的DHCP自动获取IP地址测试

相比静态 IP,DHCP 可以让开发板自动从路由器获取 IP 地址、子网掩码、网关和 DNS,更适合快速测试和初学者入门。


11.2 资源获取

如果本文对你有帮助,欢迎点赞、收藏、关注,你的支持是我们持续更新的动力!

如有任何问题,欢迎在评论区留言,我们会第一时间回复。

http://www.jsqmd.com/news/937698/

相关文章:

  • ESP8266串口通信与MicroPython开发实战指南
  • TypeScript 编程:实现 Fibonacci 序列与阶乘类型计算
  • 保姆级教程:用Docker容器一键部署Maven开发环境,彻底告别‘Command not found‘
  • 2026年在线SS分析仪十大品牌推荐|国产替代核心力量与选型实战全解析 - 液体流量液位品牌推荐
  • AI办公神器!用AI提升10倍效率,职场人必备!
  • LightGBM原理介绍
  • 一图理清对称加密 AEAD 为什么最怕 nonce 用错
  • PingFangSC字体包:跨平台字体一致性解决方案技术指南
  • 基于Arduino与光敏电阻的智能窗帘自动控制系统设计与实现
  • 3.3 Linux权限操作
  • 从“拼图式采购“到“全域闭环“:2026年GEO监测工具终极选型指南
  • 揭秘消息防撤回:如何永久保存微信QQ的消失对话
  • 2026年济南钻戒回收实用科普:素军奢品汇钻石回收闲置处置参考文稿 - GrowthUME
  • Sobel算子实战:用OpenCV 4.x给老旧照片‘描边’,实现一键卡通化/素描风效果
  • 去欧洲机票别再自己刷OTA了!武汉圣擎航空——您身边最靠谱的法国及全欧航线特价公务舱/头等舱专家(附全航线解析+售后保障) - 土星买买买
  • 告别阈值烦恼:用Halcon的MLP分类器搞定复杂场景下的颜色识别(附完整代码)
  • 用Python+灰色关联度分析,手把手教你量化低碳建筑全生命周期的碳排放(附代码)
  • Flutter跨小程序开发:如何用一套Dart代码征服微信小程序生态
  • 手把手教你学Simulink——双向 DC‑DC 变换器在恒压(CV)与恒流(CC)模式下的切换仿真
  • 肺部靶向 AAV 怎么选?如何解决靶向不精准、转导效率低的递送难题?
  • 类型体操实战:Promise.all 类型实现
  • 2026年赤峰劳动工伤律师推荐:5位实战经验丰富值得信赖的维权专家 - 本地品牌推荐
  • 2026年济南黄金回收实用科普:素军奢品汇贵金属回收闲置处置参考文稿 - GrowthUME
  • 【AI笔记】环境配置
  • 如何通过OmenSuperHub优化惠普OMEN游戏本的性能和散热
  • 2026 HENGSHI BOX 全域智控舱技术白皮书:衡石科技软硬一体的私有化 Agentic BI 架构
  • 7次碰壁、4个版本:我在一个浏览器插件里看到Agent该有的样子
  • 铜箔胶带电路制作:LED发光蝙蝠的串联电路实践
  • 告别零碎作业:留学生如何把大学四年代码重构为可交付全栈「蒸汽求职分享」
  • 【Agent 学习日记】我们来说说 Agent 记忆压缩通常有哪些方法?