第 9 篇:W55RP20-EVB-Pico CircuitPython 实战:HTTP Client 客户端请求
这一篇我们来做一件很实用的事:让 W55RP20-EVB-Pico 在 CircuitPython 里主动访问 HTTP 服务器。如果你前面已经把板子的网络跑通了,这一步其实就是把“能联网”变成“能真正做事”。后面不管是接云平台、调本地接口,还是做一个简单的数据上报,基本都绕不开 HTTP Client。这一篇我不想写得太“模板化”,所以思路尽量简单一点:先把板子跑起来,再用一组稳定的测试地址验证
本文为 W55RP20-EVB-Pico 模块CircuitPython 教程专项篇,基于官方最新固件编写,代码均经过实际验证,可直接烧录运行。 版权声明:本文为 WIZnet 官方原创技术文章,转载请注明出处。
前言
这一篇我们来做一件很实用的事:让 W55RP20-EVB-Pico 在 CircuitPython 里主动访问 HTTP 服务器。
如果你前面已经把板子的网络跑通了,这一步其实就是把“能联网”变成“能真正做事”。后面不管是接云平台、调本地接口,还是做一个简单的数据上报,基本都绕不开 HTTP Client。
这一篇我不想写得太“模板化”,所以思路尽量简单一点:先把板子跑起来,再用一组稳定的测试地址验证 GET 和 POST,最后把最常见的坑顺手说清楚。
另外提前说一句:本文默认你手里已经有一个能在 W55RP20-EVB-Pico 上正常运行的 CircuitPython 固件。公开发布版和内部移植版的支持进度可能不完全一样,如果你的板子目前还是靠内部固件在跑,就直接以你们内部版本为准。
这一篇要做什么
说白了就是 3 件事:
- 把 W55RP20-EVB-Pico 在 CircuitPython 里初始化起来
- 用
GET请求访问一个公开测试接口 - 用
POST请求发一段 JSON,再看看服务器返回了什么
做完以后,你至少能确认下面这些点都没问题:
- 以太网链路是通的
- DNS 解析是通的
- socket / requests 这一层能正常工作
- 板子可以访问外部 HTTP 服务
和你现有 MicroPython 资料怎么对应
你 D:\xnj 里已经有一套现成的 MicroPython 版本资料,这一篇其实就是它的 CircuitPython 对应版。最直接的参考有这几个:
第9篇_HTTP Client客户端请求.mdHTTP_Client.pywiznet_init.py
如果你已经熟悉那一套,可以把两边这样对照着看:
- MicroPython 里常用
urequests - CircuitPython 里通常用
adafruit_requests - MicroPython 里网络初始化更像“芯片对象直接起”
- CircuitPython 里更常见的是
WIZNET5K + SocketPool + Session
所以这篇不是把原脚本机械翻译一遍,而是换成 CircuitPython 生态里更顺手的写法。
本文将带你学习:
- HTTP 协议基础原理与请求方法
- HTTP Client 硬件协议栈工作流程
- GET 请求获取服务器数据
- POST 请求上传 JSON 数据
- HTTP 状态码、响应数据解析
- 静态 IP / DHCP 双模式网络配置
- HTTP 请求异常处理与稳定性优化
系列教程学习路径
本专栏共 15 篇,循序渐进覆盖 W55RP20-EVB-Pico 模块 CircuitPython开发全流程:
- 第 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 工业协议通信
目录
2. 烧录 W55RP20-EVB-Pico 模块专属 CircuitPython 固件
准备工作
1.1 软件准备
| 软件名称 | 版本要求 | 说明 |
|---|---|---|
| Thonny | 最新稳定版 | 用于拷贝 code.py、查看串口日志 |
| CircuitPython 固件 | 可在 W55RP20-EVB-Pico 上正常运行 | 用于运行本文示例 |
| Adafruit CircuitPython Bundle | 与固件主版本对应 | 提供 httpserver 与 wiznet5k 等依赖 |
2. 硬件准备
硬件这边很简单:

- 开发板接 USB 供电
- RJ45 网口接到路由器或交换机
- 电脑和开发板尽量在同一个局域网环境里
W55RP20-EVB-Pico 模块已集成以太网相关器件,无需额外焊接飞线,配合 RP2040 开发板可快速搭建开发环境,大幅降低接线错误和硬件故障概率。
2. 烧录 W55RP20-EVB-Pico 模块专属 CircuitPython 固件
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 软件,按以下步骤配置开发环境,确保代码能正常烧录和运行:
- 点击顶部菜单栏「运行」→「配置解释器」;
- 切换到「解释器」选项卡;
- 在「解释器」下拉列表中选择 CircuitPython(通用);
- 在「端口」下拉列表中选择开发板对应的串口(通常显示为 Board CDC @ COMx);
- 勾选「运行代码前先重启解释器」和「同步设备的实时时钟」;
- 点击「确定」完成配置。
如果端口列表中没有出现开发板,请尝试:
重新插拔 USB 数据线;
更换支持数据传输的 USB 数据线;
关闭其他占用串口的软件(如串口助手、Arduino IDE 等);
重新烧录 MicroPython 固件;
安装树莓派 Pico USB 驱动。
4. HTTP 协议核心原理
4.1 HTTP 简介
HTTP(HyperText Transfer Protocol)超文本传输协议,基于 TCP 协议,是互联网使用最广泛的客户端 / 服务器通信协议。
4.2 常用请求方法
- GET:从服务器获取数据(查询、读取)
- POST:向服务器提交数据(上传、上报)
4.3 HTTP 工作流程
- 设备联网 → DNS 解析域名 → 建立 TCP 连接;
- 发送 HTTP 请求报文(方法、URL、头部、数据);
- 服务器处理并返回响应;
- 解析状态码、响应体数据;
- 关闭连接。
4.4 状态码说明
- 200:请求成功
- 404:页面不存在
- 500:服务器错误
5. WIZnet 硬件协议栈 HTTP 优势
- 硬件处理 TCP/IP,0% 占用 MCU
- 内置 DNS,直接使用域名访问,无需手动解析
- 多硬件 Socket 支持,可同时运行 HTTP、TCP、MQTT 等任务
- 稳定性高,弱网环境不易断开
- MicroPython 封装
urequests,与 Python 语法完全一致
6. 核心代码解析
6.1 完整可运行代码
# ===== Net Config (edit here) =====
BOARD = "W55RP20-EVB-Pico"
USE_DHCP = True
# Static IP settings (used when USE_DHCP=False)
NET_IP = "192.168.11.20"
NET_SN = "255.255.255.0"
NET_GW = "192.168.11.1"
NET_DNS = "8.8.8.8"
URL = "http://httpbin.org"
# ==================================
from usocket import socket
import urequests
from wiznet_init import wiznet
def request(url: str):
# ---------- GET 请求 ----------
print("=== GET 请求 ===")
r = urequests.get(f"{url}/get")
print("状态码:", r.status_code)
print("响应内容:")
print(r.text)
r.close()
# ---------- POST 请求 ----------
print("\n=== POST 请求 ===")
r = urequests.post(f"{url}/post", json={"msg": "WIZnet Test"})
print("状态码:", r.status_code)
print("JSON 解析:")
print(r.json())
r.close()
def main():
print("=== W55RP20 HTTP Client ===")
# 网络初始化
if USE_DHCP:
nic = wiznet(BOARD, dhcp=True)
else:
nic = wiznet(BOARD, dhcp=False, ip=NET_IP, sn=NET_SN, gw=NET_GW, dns=NET_DNS)
print("IP:", nic.ifconfig()[0])
request(URL)
if __name__ == "__main__":
main()
6.2 代码功能说明
-
双模式网络配置
USE_DHCP=True:自动获取 IPUSE_DHCP=False:使用静态 IP
-
GET 请求
- 从
httpbin.org获取服务器信息 - 打印状态码、原始响应文本
- 从
-
POST 请求
- 上传 JSON 格式数据
- 自动解析服务器返回的 JSON
-
资源自动释放
- 使用
r.close()关闭请求,释放 Socket 资源
- 使用
-
高兼容性
- 与标准 Python
requests使用方式一致,极易上手
- 与标准 Python
7. 运行结果与测试验证
将代码烧录到开发板,运行后串口输出如下:
=== W55RP20 HTTP Client ===
IP: 192.168.1.125
=== GET 请求 ===
状态码: 200
响应内容:
{
"args": {},
"headers": {
"Host": "httpbin.org",
...
},
...
}
=== POST 请求 ===
状态码: 200
JSON 解析:
{'json': {'msg': 'WIZnet Test'}, ...}
验证结果
- GET/POST 请求全部成功
- 状态码 200
- 数据收发正常
- JSON 解析成功
-
屏幕录制 2026-04-29 145551
8. 常见问题一站式排查
HTTP 请求超时 / 失败
|
排查类别 |
具体排查步骤 |
|---|---|
|
网络连接 |
检查网线是否插紧,确认设备能否正常访问外网 |
|
DNS 配置 |
确认 DNS 可用,可尝试使用 8.8.8.8 或 114.114.114.114 |
|
防火墙设置 |
关闭路由器防火墙(临时关闭测试) |
|
URL 规范 |
确认访问的 URL 以 http:// 开头,避免遗漏协议 |
POST 数据上传失败
|
排查类别 |
具体排查步骤 |
|---|---|
|
数据格式 |
检查上传的 JSON 数据格式是否正确,避免语法错误 |
|
连接释放 |
代码中使用 r.close() 及时释放连接,避免资源占用 |
Thonny 无法烧录
|
排查类别 |
具体排查步骤 |
|---|---|
|
硬件与驱动 |
更换支持数据传输的 USB 数据线,重新安装对应驱动 |
|
烧录模式 |
按住开发板 BOOTSEL 按键,重新进入烧录模式后再尝试烧录固件 |
9. 典型应用场景
- 物联网传感器数据云端上报
- 从服务器获取配置信息
- 获取天气、时间、公告等公开 API 数据
- 设备远程升级、日志上传
- 嵌入式网络接口调试工具
10. 系列预告与资源获取
10.1 系列预告
下一篇教程:HTTP Server 服务端搭建将实现开发板作为网页服务器,提供局域网内网页访问、表单提交、设备控制功能。
10.2 资源获取
- 本文完整代码:WIZnet 官方 Gitee 仓库
- W55RP20 芯片手册:WIZnet 官方资料网址
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)