本文为 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 开发全流程
 

 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.1 软件准备

1.2 硬件准备

​编辑

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

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

3.1 硬件连接

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. 常见问题一站式排查

8.1HTTP 请求超时 / 失败

8.2POST 数据上传失败

8.3Thonny 无法烧录

9. 典型应用场景

10. W55RP20 核心优势对比

11. 系列预告与资源获取

11.1 系列预告

11.2 资源获取

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 固件烧录方式,操作步骤如下:

  1. 使用 USB 数据线连接开发板和电脑
  2. 按住开发板上的 BOOTSEL 按键
  3. 点按 RUN 按键
  4. 电脑识别出 RPI-RP2 磁盘后松开按键
  5. 将 .uf2 固件文件拖入 RPI-RP2 磁盘
  6. 开发板自动重启,固件烧录完成

注意:如果电脑没有识别出 RPI-RP2 磁盘,可以重新插拔 USB 数据线,或更换支持数据传输的 USB 线。

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

3.1 硬件连接

W55RP20-EVB-MKR 的连接极其简单,仅需两步:

  1. 使用 USB 数据线连接开发板与电脑(用于供电、代码烧录和串口调试)

  2. 使用网线连接开发板的以太网接口与路由器的 LAN 口

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

3.2 Thonny 开发环境配置

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

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

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

  • 重新插拔 USB 数据线
  • 更换支持数据传输的 USB 数据线
  • 关闭其他占用串口的软件(如串口助手、Arduino IDE 等)
  • 重新烧录 MicroPython 固件

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. 常见问题一站式排查

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

下篇我们讲解:W55RP20-EVB-MKR 模块 MicroPython 实战 (10):HTTP Server 服务端搭建-CSDN博客

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐