W55RP20-EVB-MKR 模块 MicroPython 实战 (9):HTTP Client 客户端请求
本文为 WIZnet W55RP20 芯片 MicroPython 教程第 9篇,基于官方最新固件编写,代码均经过实际验证,可直接烧录运行。
版权声明:本文为 WIZnet 官方原创技术文章,转载请注明出处。
前言
上一篇实战教程,我们已经完成了 W55RP20 芯片 NTP 网络时间同步 功能开发,实现了设备精准计时、北京时间自动校准。
本篇内容我们进入网络数据交互核心技术 ——HTTP Client 客户端请求。
HTTP 是互联网最基础的通信协议,广泛用于接口调用、云端数据上报、网页获取、配置拉取等场景。HTTP Client 允许嵌入式设备主动请求服务器数据,是物联网设备接入互联网的必备基础能力。
W55RP20 集成硬件 TCP/IP 协议栈,搭配 MicroPython 内置的 urequests 库,几行代码即可完成 GET/POST 请求,无需手动处理 Socket、DNS、TCP 连接,开发效率远超传统嵌入式方案。
本文将带你学习:
- HTTP 协议基础原理与请求方法
- HTTP Client 硬件协议栈工作流程
- GET 请求获取服务器数据
- POST 请求上传 JSON 数据
- HTTP 状态码、响应数据解析
- 静态 IP / DHCP 双模式网络配置
- HTTP 请求异常处理与稳定性优化
系列教程学习路径
本专栏共 15 篇,循序渐进覆盖 W55RP20-EVB-Pico 模块 MicroPython 开发全流程
11.第 11 篇:HTTP 协议与 OneNET 平台数据上云
14.第 14 篇:MQTT 协议与 OneNET 平台对接
15.第 15 篇:MQTT 协议与 ThingSpeak 平台对接
目录
2. 烧录 W55RP20-EVB-Pico 模块专属 MicroPython 固件
1. 准备工作
1.1 软件准备
所需软件均为免费版本,按要求下载安装即可,无需额外付费。
|
软件名称 |
版本要求 |
下载地址 |
说明 |
|---|---|---|---|
|
Thonny |
4.0 及以上 |
Thonny 官方下载 |
轻量级 MicroPython IDE,支持代码编辑、烧录与串口调试,新手友好 |
|
W55RP20-EVB-Pico 模块 MicroPython 固件 |
最新稳定版 |
WIZnet 官方固件下载 |
专为 W55RP20-EVB-Pico 模块 编写,已集成 WIZnet 硬件驱动与协议栈 |
1.2 硬件准备
如图所示,W55RP20-EVB-MKR 开发板实物图。
需要准备以下硬件:
- W55RP20-EVB-MKR开发板× 1
- USB 数据线 × 1
- 标准网线 × 1
- 路由器或交换机 × 1
提示:
W55RP20-EVB-MKR,已板载以太网接口,无需额外焊接飞线其他器件,即插即用。
大幅降低了接线错误和硬件故障概率。
2. 烧录 W55RP20-EVB-Pico 模块专属 MicroPython 固件
运行静态 IP 示例前,需要先给 W55RP20-EVB-MKR 烧录对应的 MicroPython 固件。
固件文件示例:
firmware.uf2
W55RP20-EVB-MKR 兼容树莓派 Pico 的 UF2 固件烧录方式,操作步骤如下:
- 使用 USB 数据线连接开发板和电脑
- 按住开发板上的
BOOTSEL按键 - 点按
RUN按键 - 电脑识别出
RPI-RP2磁盘后松开按键 - 将
.uf2固件文件拖入RPI-RP2磁盘 - 开发板自动重启,固件烧录完成
注意:如果电脑没有识别出
RPI-RP2磁盘,可以重新插拔 USB 数据线,或更换支持数据传输的 USB 线。
3. 硬件连接与开发环境配置
3.1 硬件连接
W55RP20-EVB-MKR 的连接极其简单,仅需两步:
-
使用 USB 数据线连接开发板与电脑(用于供电、代码烧录和串口调试)
-
使用网线连接开发板的以太网接口与路由器的 LAN 口
如图所示为硬件连接示意图

3.2 Thonny 开发环境配置
- 打开 Thonny 软件,点击顶部菜单栏「运行」→「配置解释器」
- 切换到「解释器」选项卡
- 在「解释器」下拉列表中选择 MicroPython(通用)
- 在「端口」下拉列表中选择 W55RP20-EVB-MKR 对应的串口(通常显示为 Board CDC @ COMx)
- 勾选「运行代码前先重启解释器」和「同步设备的实时时钟」
- 点击「确定」完成配置
配置完成后的界面如下图所示:

如果端口列表中没有出现开发板,请尝试:
- 重新插拔 USB 数据线
- 更换支持数据传输的 USB 数据线
- 关闭其他占用串口的软件(如串口助手、Arduino IDE 等)
- 重新烧录 MicroPython 固件
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. 常见问题一站式排查
8.1HTTP 请求超时 / 失败
|
排查类别 |
具体排查步骤 |
|---|---|
|
网络连接 |
检查网线是否插紧,确认设备能否正常访问外网 |
|
DNS 配置 |
确认 DNS 可用,可尝试使用 8.8.8.8 或 114.114.114.114 |
|
防火墙设置 |
关闭路由器防火墙(临时关闭测试) |
|
URL 规范 |
确认访问的 URL 以 http:// 开头,避免遗漏协议 |
8.2POST 数据上传失败
|
排查类别 |
具体排查步骤 |
|---|---|
|
数据格式 |
检查上传的 JSON 数据格式是否正确,避免语法错误 |
|
连接释放 |
代码中使用 r.close() 及时释放连接,避免资源占用 |
8.3Thonny 无法烧录
|
排查类别 |
具体排查步骤 |
|---|---|
|
硬件与驱动 |
更换支持数据传输的 USB 数据线,重新安装对应驱动 |
|
烧录模式 |
按住开发板 BOOTSEL 按键,重新进入烧录模式后再尝试烧录固件 |
9. 典型应用场景
- 物联网传感器数据云端上报
- 从服务器获取配置信息
- 获取天气、时间、公告等公开 API 数据
- 设备远程升级、日志上传
- 嵌入式网络接口调试工具
10. 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 接口 |
| 部署难度 | 低(MicroPython 成熟固件,应用层协议绝大部分均有库文件,可灵活添加部署) | 高(应用层协议需要手动移植开源库适配) | 视模块集成情况,无集成的功能需要自我封包拆包 |
11. 系列预告与资源获取
11.1 系列预告
下一篇教程:HTTP Server 服务端搭建将实现开发板作为网页服务器,提供局域网内网页访问、表单提交、设备控制功能。
11.2 资源获取
- 本文完整代码:WIZnet 官方 Gitee 仓库
- W55RP20 芯片手册:WIZnet 官方资料网址
下篇我们讲解:W55RP20-EVB-MKR 模块 MicroPython 实战 (10):HTTP Server 服务端搭建-CSDN博客
更多推荐




所有评论(0)