文章目录

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 芯片深度对比

Model Embedded Core Host I/F TX/RX Buffer HW Socket Network Performance
W5100S TCP/IPv4,MAC & PHY 8bit BUS, SPI 16KB 4 Max.25Mbps
W5500 TCP/IPv4/IPv6, MAC & PHY 8bit BUS, Fast SPI 32KB 8 Max.25Mbps
W6100 TCP/IPv4, MAC & PHY Fast SPI 32KB 8 Max.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 引脚 功能
GPIO16 MISO SPI 数据输入
GPIO17 CS 片选
GPIO18 SCK SPI 时钟
GPIO19 MOSI SPI 数据输出
GPIO20 RST 复位
3.3V VCC 电源
GND GND 共地

串口接线

  • 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官网

本章例程链接

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

更多推荐