文章目录

1 前言

2 相关网络信息

2.1 TCP Server简介

2.2 TCP Server 标准工作流程(嵌入式通用)

2.3 TCP Server 优点

2.4 典型应用场景

3 硬件平台:WIZnet 芯片深度对比

4 TCP Server网络设置示例概述以及使用

4.3 连接方式

      程序的运行框图如下所示:

4.2 准备工作核心

4.3 连接方式

4.4 主要代码概述

5 硬件接线

RP2040 ↔ W5100S/W5500

串口接线

6 代码逐行超详细解析

6.1 网络配置

6.2 网卡初始化

6.3 TCP 服务逻辑

7 烧录与调试

7.1 烧录代码

7.2 网络调试助手连接

7.3 测试效果

8 功能扩展

8.1 多客户端支持

8.2 硬件心跳包

8.3 串口 ←→ 网口 双向透传

8.4 指令解析

9 常见问题 + 排错指南

9.1 无法获取 IP

9.2 电脑 ping 不通

9.3 连接成功但收不到数据

9.4 经常掉线

9.5 报错:WIZNET5K 不存在

10 实际应用案例

11 注意事项

12 相关链接


1 前言

在这个智能硬件和物联网 时代,MicroPython和树莓派 PICO正以其独特的优势引领着嵌入式开发的新潮流。MicroPython作为一种精简优化的Python 3语言,为微控制器和嵌入式设备提供了高效开发和简易调试的

  当我们结合WIZnet W5100S/W5500网络模块,MicroPython和树莓派PICO的开发潜力被进一步放大。这两款模块都内置了TCP/IP协议栈,使得在嵌入式 设备上实现网络连接变得更加容易。无论是进行数据传输、远程控制,还是构建物联网应用,它们都提供了强大的支持。

  本章我们将以WIZnet W5100S为例,以MicroPython的开发方式进行TCP_Server解析示例


2 相关网络信息

2.1 TCP Server简介

TCP Server = TCP 协议服务器

TCP Server是使用TCP协议进行通信的服务器端程序。TCP是一种面向连接的、可靠的、基于字节流的传输协议,用于在计算机网络上传输数据。TCP Server在计算机网络中扮演重要角色,它监听客户端的连接请求,并与客户端建立可靠的连接,实现数据的传输。在TCP Server中,服务器程序需要指定监听的端口号,并使用TCP协议与客户端建立连接。一旦有客户端连接进来,服务器程序就会为每个客户端建立一个单独的连接,并通过数据流对象(NetworkStream)与客户端进行数据交互。

2.2 TCP Server 标准工作流程(嵌入式通用)

一般的TCP服务器的创建步骤:

  1. 创建套接字(socket)。
  2. 将套接字绑定到指定的IP地址和端口号。
  3. 开始监听来自客户端的连接请求。
  4. 当有客户端请求连接时,接受连接请求,并创建一个新的套接字(通常被称为子套接字)来处理与该客户端的通信。
  5. 通过子套接字与客户端进行数据交换。
  6. 在完成数据交换后,关闭子套接字,并继续监听其他客户端的连接请求。

2.3 TCP Server 优点

TCP Server的优点主要包括:

  1. 面向连接的传输:TCP是一种面向连接的协议,它在进行数据传输前需要先建立连接。这种连接可以保证数据传输的可靠性和顺序性
  2. 可靠的数据传输:TCP提供了可靠的数据传输服务,它通过确认机制、重传机制等手段保证数据在传输过程中不会丢失或重复。
  3. 全双工方式传输:TCP支持全双工方式传输,即数据可以在两个方向上同时传输,提高了传输效率。
  4. 字节流方式:TCP以字节流的方式进行数据传输,这种方式可以更好地处理大量数据,并且可以控制数据的流量。
  5. 紧急数据传送功能:TCP提供了紧急数据传送功能,可以在紧急情况下优先传送数据。

2.4 典型应用场景

TCP Server的应用场景非常广泛,以下是一些主要的场景:

  1. 电子商务平台:TCP Server可以用于电子商务平台的后端服务,处理用户的订单、支付等操作,保证交易的安全性和可靠性。
  2. 在线游戏:TCP Server可以用于在线游戏的服务器端,处理游戏玩家的连接、数据交换等操作,提供稳定、高效的游戏体验。
  3. 即时通讯:TCP Server可以用于即时通讯系统的服务器端,处理用户的登录、消息发送和接收等操作,保证通讯的稳定性和可靠性。
  4. 远程监控:TCP Server可以用于远程监控系统的服务器端,接收和处理监控数据,提供实时的监控画面和报警信息。
  5. 文件传输:TCP Server可以用于文件传输系统的服务器端,处理文件的上传和下载等操作,保证文件传输的完整性和可靠性。
  6. 网络视频会议:TCP Server可以用于网络视频会议系统的服务器端,处理音视频数据的传输和处理等操作,提供稳定、流畅的会议体验。

3 硬件平台:WIZnet 芯片深度对比

ModelEmbedded CoreHost I/FTX/RX BufferHW SocketNetwork Performance
W5100STCP/IPv4,MAC & PHY8bit BUS, SPI16KB4Max.25Mbps
W5500TCP/IPv4/IPv6, MAC & PHY8bit BUS, Fast SPI32KB8Max.25Mbps
W6100TCP/IPv4, MAC & PHYFast SPI32KB8Max.15Mbps
  1. W5100S/W6100 支持 8bit数据总线接口,网络传输速度会优于W5500。
  2. W6100 支持IPv6,与W5100S 硬件兼容,若已使用W5100S的用户需要支持IPv6,可以Pin to Pin兼容。
  3. W5500 拥有比 W5100S更多的 Socket数量以及发送与接收缓存。

4 TCP Server网络设置示例概述以及使用

4.3 连接方式

      程序的运行框图如下所示:

4.2 准备工作核心

软件

  • Thonny
  • WIZnet UartTool
  • SocketTester

硬件

  • W5100SIO模块 + RP2040 树莓派Pico开发板 或者 WIZnet W5100S-EVB-Pico开发板
  • Micro USB 接口的数据线
  • TTL 转 USB
  • 网线

4.3 连接方式

  • 通过数据线连接PC的USB口(主要用于烧录程序,也可以虚拟出串口使用)
  • 通过TTL串口转USB,连接UART0 的默认引脚:
    • RP2040 GPIO0(UART0 TX) <----> USB_TTL_RX
    • RP2040 GPIO1(UART0 RX) <----> USB_TTL_TX
  • 使用模块连接RP2040 进行接线时
    • RP2040 GPIO16 <----> W5100S MISO
    • RP2040 GPIO17 <----> W5100S CS
    • RP2040 GPIO18 <----> W5100S SCK
    • RP2040 GPIO19 <----> W5100S MOSI
    • RP2040 GPIO20 <----> W5100S RST
  • 通过PC和设备都通过网线连接路由器LAN口

4.4 主要代码概述

        我们直接打开TCP_Server.py文件。

第一步:可以看到在w5x00_init()函数中,进行了SPI 的初始化。以及将spi相关引脚和复位引脚注册到库中,后续则是激活网络,并使用DHCP配置网络地址信息,当DHCP失败时,则配置静态网络地址信息。当未配置成功时,会打印出网络地址相关寄存器的信息,可以帮助我们更好的排查问题。

第二步:然后是进行客户端监听的操作,当有客户端连接时,进行数据的收发测试。

from wiznet_init import wiznet
import usocket as socket
import time

# --------------------------
# 网络初始化(你已成功)
# --------------------------
nic = wiznet("W55RP20-EVB-Pico", dhcp=True)
ip = nic.ifconfig()[0]
print("✅ 板子 IP:", ip)

# --------------------------
# TCP 服务器(真正可用)
# --------------------------
PORT = 8087

# 创建 socket
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# 绑定端口(板子作为服务器)
s.bind(("0.0.0.0", PORT))
s.listen(1)

print("==================================")
print("    板子 TCP 服务器已启动 ✅")
print("    IP:", ip, " 端口:", PORT)
print("  电脑请用 TCP Client 连接我!")
print("==================================")

# --------------------------
# 等待电脑连接(死等)
# --------------------------
conn, addr = s.accept()
print("✅ 电脑已连接:", addr)

# --------------------------
# 稳定收发(不断线)
# --------------------------
while True:
    try:
        data = conn.recv(1024)
        
        if not data:
            print("❌ 电脑断开")
            break
        
        print("收到:", data)
        conn.send(b"TCP Server 回复:" + data)
        
    except:
        print("❌ 连接异常")
        break

conn.close()
s.close()

5 硬件接线

RP2040 ↔ W5100S/W5500

RP2040 引脚W5500 引脚功能
GPIO16MISOSPI 数据输入
GPIO17CS片选
GPIO18SCKSPI 时钟
GPIO19MOSISPI 数据输出
GPIO20RST复位
3.3VVCC电源
GNDGND共地

串口接线

  • GPIO0 (TX) → USB-TTL RX
  • GPIO1 (RX) → USB-TTL TX

6 代码逐行超详细解析

6.1 网络配置

  • ip:服务器静态 IP
  • localport:服务端口(8080 通用)

6.2 网卡初始化

  • 初始化 SPI
  • 激活 WIZnet 网卡
  • DHCP 自动获取 / 静态 IP 双模式
  • 等待网线链接

6.3 TCP 服务逻辑

  1. socket() 创建套接字
  2. bind() 绑定 IP + 端口
  3. listen() 监听
  4. accept() 等待客户端
  5. recv() 接收数据
  6. send() 回复数据
  7. 异常断开 → 自动重启监听

7 烧录与调试

7.1 烧录代码

  1. 打开 Thonny
  2. 连接 Pico
  3. 复制代码
  4. 保存为 main.py(开机自动运行)

7.2 网络调试助手连接

  • 模式:TCP Client
  • IP:192.168.1.200
  • 端口:8000

7.3 测试效果

  • 发送:123
  • 收到:Server Reply: 123
  • 串口同时打印日志

将代码复制到Thonny之后,选择运行环境为Raspberry Pi Pico,然后点击运行即可。打开SocketTester选择客户端连接服务器后发送消息可以获取到回传,打开WIZnet UartTool 打开串口,可以看到客户端发送的消息,则表示可以测试成功。

8 功能扩展

8.1 多客户端支持

W5500 支持 8 路 Socket,可同时连接多个客户端。

8.2 硬件心跳包

定时发送心跳,防止路由掉线。

8.3 串口 ←→ 网口 双向透传

最常用工业功能:

  • 网口数据 → 串口输出
  • 串口数据 → 网口发送

8.4 指令解析

支持自定义指令,例如:

  • LED ON
  • RELAY 1
  • GET TEMP

9 常见问题 + 排错指南

9.1 无法获取 IP

  • 网线未插好
  • 路由器未分配地址
  • 改用静态 IP

9.2 电脑 ping 不通

  • 不在同一网段
  • 防火墙拦截
  • 网卡未初始化成功

9.3 连接成功但收不到数据

  • 数据编码问题
  • 缓冲区满
  • 客户端异常断开

9.4 经常掉线

  • 增加心跳包
  • 延长超时时间

9.5 报错:WIZNET5K 不存在

  • 固件不支持,必须刷 WIZnet 官方固件

10 实际应用案例

  1. 工业数据采集:传感器 → TCP Server → 上位机
  2. 远程控制:手机 / 电脑 → 控制继电器、电机
  3. 串口转网口:传统串口设备升级联网
  4. 物联网网关:本地设备 → 云平台
  5. 智能小车:WiFi / 以太网远程控制

11 注意事项

扩展如果采用的是WIZnet的W5500来实现本章的示例,则只需烧录W5500的固件并运行示例程序即可。

12 相关链接

WIZnet官网

本章例程链接

想了解更多,评论留言哦!

更多推荐