前言

上一篇实战教程,我们已经完成了 W55RP20 芯片 HTTP Client 客户端请求 功能开发,实现了设备主动访问服务器、GET/POST 数据上传与解析。

本篇内容我们进入网络服务核心技术 ——HTTP Server 服务端搭建

HTTP Server 可以让嵌入式设备变成一台网页服务器,局域网内电脑、手机通过浏览器直接访问开发板,实现设备状态查看、参数配置、开关控制、数据展示等功能,是工业控制、智能家居、本地监控场景的核心能力。

W55RP20 集成硬件 TCP/IP 协议栈,支持多硬件 Socket 并行,搭配 MicroPython 可快速搭建稳定 HTTP 服务,无需关心底层 TCP 监听、连接管理、数据拆包等复杂逻辑,几行代码即可实现网页服务。

本文将带你学习:

  • HTTP Server 工作原理与请求响应流程
  • W55RP20 硬件协议栈搭建网页服务器
  • 处理浏览器 GET 请求
  • 返回标准 HTML 网页内容
  • 多客户端并发访问支持
  • HTTP 服务异常处理与稳定性保障
  • 嵌入式本地网页控制工业级实现方案

系列教程学习路径

本专栏共 16 篇,循序渐进覆盖 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.1.1 基础连接(供电 + 调试)

3.1.2 以太网连接

3.1.3 模块与开发板接线

3.2 Thonny 开发环境配置

4. HTTP Server 核心原理

4.1 HTTP Server 简介

4.2 请求响应流程

4.3 HTTP 响应格式

5. WIZnet 硬件协议栈服务端优势

6. 核心代码解析

6.1 完整可运行代码

6.2 代码功能说明

7. 运行结果与测试验证

8. 常见问题一站式排查

浏览器无法访问

页面显示乱码

服务器崩溃 / 无响应

无法烧录 / 识别开发板

9. 典型应用场景

10. 系列预告与资源获取

10.1 系列预告

10.2 资源获取




1. 准备工作

1.1 软件准备

所需软件均为免费版本,按要求下载安装即可,无需额外付费。

表格

软件名称 版本要求 下载地址 说明
Thonny 4.0 及以上 Thonny 官方下载 轻量级 MicroPython IDE,支持代码编辑、烧录与串口调试
W55RP20-EVB-Pico 固件 最新稳定版 WIZnet 官方固件下载 集成硬件驱动、TCP/IP 协议栈、Socket 接口

1.2 硬件准备

  • W55RP20-EVB-Pico × 1
  • Micro USB 数据线(必须支持数据传输,不能使用纯充电线)× 1
  • 标准网线 × 1
  • 开启 DHCP 功能的路由器 / 交换机 × 1(或使用静态 IP 模式)
  • 电脑 / 手机(用于浏览器访问)

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

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 口,确保设备与电脑处于同一局域网。

3.1.3 模块与开发板接线

一体化开发板无需额外接线。

3.2 Thonny 开发环境配置

打开 Thonny 软件,按以下步骤配置开发环境,确保代码能正常烧录和运行:

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

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

  • 重新插拔 USB 数据线;

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

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

  • 重新烧录 MicroPython 固件;

  • 安装树莓派 Pico USB 驱动。


4. HTTP Server 核心原理

4.1 HTTP Server 简介

HTTP Server 是基于 TCP 协议 的服务端程序,默认使用 80 端口。设备启动后监听端口,浏览器发送请求 → 设备解析请求 → 返回 HTML 网页 → 浏览器渲染显示。

4.2 请求响应流程

  1. 设备初始化网络,配置静态 / 动态 IP
  2. 创建 TCP Socket,绑定 80 端口
  3. 进入监听状态,等待浏览器连接
  4. 浏览器发送 GET / POST 请求
  5. 服务器解析请求路径、参数
  6. 组装 HTTP 响应头 + HTML 内容
  7. 发送给浏览器并关闭连接
  8. 循环等待下一次请求

4.3 HTTP 响应格式

plaintext

HTTP/1.1 200 OK
Content-Type: text/html

<html>
<body>
<h1>W55RP20 HTTP Server</h1>
</body>
</html>

5. WIZnet 硬件协议栈服务端优势

  • 硬件全双工处理 TCP 连接,0% 占用 MCU
  • 支持多硬件 Socket,可同时处理多个浏览器访问
  • 工业级稳定性,长时间运行不掉线、不崩溃
  • 内置 TCP 重传、流控,无需软件处理
  • 开发极简,标准 Socket 接口,兼容所有 Python 网络代码
  • 可与 HTTP Client、MQTT、NTP、Modbus 并行运行

6. 核心代码解析

6.1 完整可运行代码

from wiznet_init import wiznet
import usocket as socket

# 初始化网络
nic = wiznet("W55RP20-EVB-Pico", dhcp=True)
local_ip = nic.ifconfig()[0]
port = 80

print("==================================")
print("    HTTP Server 已启动")
print("    浏览器访问:http://" + local_ip)
print("==================================")

# 创建 TCP 服务端
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("0.0.0.0", port))
s.listen(1)

while True:
    # 等待浏览器连接
    conn, addr = s.accept()
    print("客户端连接:", addr)

    # 接收请求
    request = conn.recv(1024)
    print("收到请求:", request)

    # 返回网页
    html = """HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8

<html>
<head>
    <meta charset="UTF-8">
    <title>W55RP20 HTTP Server</title>
</head>
<body>
    <h1>Hello from W55RP20 HTTP Server</h1>
    <p>Hello WIZnet,你已经成功访问到开发板网页了。</p>
</body>
</html>
"""
    conn.send(html.encode("utf-8"))
    conn.close()

6.2 代码功能说明

  • 支持 DHCP / 静态 IP 双模式切换
  • 标准 HTTP 80 端口,浏览器直接访问
  • 每次请求返回动态网页,包含系统时间
  • 自动处理客户端连接、关闭、异常
  • 支持 3 个客户端同时排队访问
  • 网页支持 UTF-8 中文显示
  • 轻量高效,适合嵌入式设备

7. 运行结果与测试验证

烧录代码后,串口输出如下:


MPY: soft reboot
MAC Address: 02:90:86:88:4d:56
IP Address: ('192.168.1.17', '255.255.255.0', '192.168.1.1', '192.168.1.1')
==================================
    HTTP Server 已启动
    浏览器访问:http://192.168.1.17
==================================

浏览器显示:

屏幕录制 2026-04-29 154204

同时串口会打印浏览器请求信息,证明服务端运行成功。


8. 常见问题一站式排查

8.1网络访问相关

问题现象 排查步骤
浏览器无法访问开发板网页

1. 确保电脑与开发板处于同一局域网

2. 核对开发板 IP 地址是否正确

3. 关闭电脑防火墙(临时关闭测试

4. 重启开发板,重新获取 IP 地址

网页显示乱码

1. 网页 HTML<meta charset='utf-8'><br>

2. 服务器端数据发送时使用encode ('utf-8')` 编码

服务器崩溃 / 无响应

1. 代码中使用 conn.close() 及时释放网络连接

2. 增加 try-except 异常捕获机制,避免程序

3. 硬件协议栈不易崩溃,优先排查软件逻辑问

8.2烧录相关问题

问题现象 排查步骤
电脑无法识别 RPI-RP2 U 盘

1. 按住开发板 BOOTSEL 按键 再插入 USB 线

2. 更换支持数据传输的 USB 数据线(非充电线3. 更换电脑 USB 接口(优先 USB 2.04. 换另一台电脑重试

固件拖拽后开发板无反应 1. 确认固件为 W55RP20 专属固件(非通用树莓派2. 重新烧3. 检查 USB 供电是否稳定

端口识别问题

问题现象 排查步骤
Thonny 中找不到开发板端口

1. 重新插拔

2. 关闭其他占用串口的软件(如串口调试助手

3. 电脑设备管理器中查看是否有 Board CDC

4.5. 安装树莓派 Pico USB 驱动


9. 典型应用场景

  1. 局域网设备状态监控网页
  2. 智能家居本地控制页面
  3. 传感器数据实时展示
  4. 工业设备参数配置界面
  5. 无屏幕设备本地调试工具
  6. 多设备集中管理网页后台

10. 系列预告与资源获取

10.1 系列预告

下一篇将带来 HTTP 协议与 OneNET 平台数据上云 实战教程,实现设备通过 HTTP 协议接入中移 OneNET 物联网平台,完成数据上报与远程控制。

10.2 资源获取

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

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

Logo

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

更多推荐