本文为 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客户端请求.md
  • HTTP_Client.py
  • wiznet_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. 第 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 工业协议通信

目录

准备工作

1.1 软件准备

2. 硬件准备

2. 烧录 W55RP20-EVB-Pico 模块专属 CircuitPython 固件

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

3.1 硬件连接

3.1.1 基础连接(供电+调试)

3.1.2 以太网连接

3.1.3 模块与开发板接线

3.2 Thonny 开发环境配置

 4. HTTP 协议核心原理

4.1 HTTP 简介

4.2 常用请求方法

4.3 HTTP 工作流程

4.4 状态码说明

5. WIZnet 硬件协议栈 HTTP 优势

6. 核心代码解析

6.1 完整可运行代码

6.2 代码功能说明

7. 运行结果与测试验证

8. 常见问题一站式排查

HTTP 请求超时 / 失败

POST 数据上传失败

Thonny 无法烧录

9. 典型应用场景

10. 系列预告与资源获取

10.1 系列预告

10.2 资源获取


准备工作

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 固件烧录方式,操作简单无需额外烧录器,新手可快速上手:

  1. 按住 RP2040 开发板上的 BOOTSEL 按键不放;
  2. 使用 Micro USB 数据线连接开发板与电脑;
  3. 待电脑识别出名为 RPI-RP2 的 U 盘后,松开 BOOTSEL 按键;
  4. 将下载好的 W5500_RP2040_firmware.uf2 固件文件拖拽到 U 盘中;
  5. 开发板会自动重启,固件烧录完成。

注意:如果电脑没有识别出 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 软件,按以下步骤配置开发环境,确保代码能正常烧录和运行:

  1. 点击顶部菜单栏「运行」→「配置解释器」;
  2. 切换到「解释器」选项卡;
  3. 在「解释器」下拉列表中选择 CircuitPython(通用);
  4. 在「端口」下拉列表中选择开发板对应的串口(通常显示为 Board CDC @ COMx);
  5. 勾选「运行代码前先重启解释器」和「同步设备的实时时钟」;
  6. 点击「确定」完成配置。

如果端口列表中没有出现开发板,请尝试:

  • 重新插拔 USB 数据线;

  • 更换支持数据传输的 USB 数据线;

  • 关闭其他占用串口的软件(如串口助手、Arduino IDE 等);

  • 重新烧录 MicroPython 固件;

  • 安装树莓派 Pico USB 驱动。

 4. HTTP 协议核心原理

4.1 HTTP 简介

HTTP(HyperText Transfer Protocol)超文本传输协议,基于 TCP 协议,是互联网使用最广泛的客户端 / 服务器通信协议。

4.2 常用请求方法

  • GET:从服务器获取数据(查询、读取)
  • POST:向服务器提交数据(上传、上报)

4.3 HTTP 工作流程

  1. 设备联网 → DNS 解析域名 → 建立 TCP 连接;
  2. 发送 HTTP 请求报文(方法、URL、头部、数据);
  3. 服务器处理并返回响应;
  4. 解析状态码、响应体数据;
  5. 关闭连接。

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 代码功能说明

  1. 双模式网络配置

    • USE_DHCP=True:自动获取 IP
    • USE_DHCP=False:使用静态 IP
  2. GET 请求

    • httpbin.org 获取服务器信息
    • 打印状态码、原始响应文本
  3. POST 请求

    • 上传 JSON 格式数据
    • 自动解析服务器返回的 JSON
  4. 资源自动释放

    • 使用 r.close() 关闭请求,释放 Socket 资源
  5. 高兼容性

    • 与标准 Python requests 使用方式一致,极易上手

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 资源获取
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐