如何将Python串口读取UHF天线数据的程序改为以太网端口读取?
把串口UHF标签读取程序改成以太网版本的方法
首先你要把原来依赖的串口库换成Python标准库的socket,以太网通信靠它实现。下面是具体的修改步骤:
1. 替换导入的库
把原来的import serial, binascii改成import socket, time,串口相关的库就不需要了。
2. 初始化以太网连接(以TCP为例,多数UHF设备用TCP Server模式)
原来的串口初始化代码,替换成socket连接逻辑。你需要提前从设备手册里查到UHF天线的IP地址和端口号(常见的比如5000、9000):
# 替换成你的UHF设备实际参数 UHF_IP = "192.168.1.100" UHF_PORT = 5000 # 创建TCP socket并连接设备 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((UHF_IP, UHF_PORT)) # 设置超时,和原串口的timeout逻辑一致 sock.settimeout(1)
3. 修改循环读取逻辑
原来的ser.read()要换成socket.recv(),两者都返回字节流,所以数据处理逻辑可以直接复用:
while True: try: # 读取25字节,和原串口的read(25)对应 data = sock.recv(25) if data: # 收到非空数据 print(f"tag: {data}") else: print("no hay tag") except socket.timeout: # 超时对应原串口没读到数据的情况 print("no hay tag") time.sleep(1)
4. 增加连接关闭的处理(可选但建议)
如果需要正常退出程序,记得关闭socket连接:
# 捕获Ctrl+C信号来优雅关闭 try: while True: # 上面的读取逻辑 except KeyboardInterrupt: sock.close() print("连接已关闭")
完整修改后的代码示例
import socket import time # 配置UHF设备的网络参数 UHF_IP = "192.168.1.100" # 替换为你的设备实际IP UHF_PORT = 5000 # 替换为设备的实际端口号 # 初始化TCP连接 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((UHF_IP, UHF_PORT)) sock.settimeout(1) try: while True: try: # 读取25字节数据,和原串口逻辑保持一致 data = sock.recv(25) if data: print(f"tag: {data}") else: print("no hay tag") except socket.timeout: print("no hay tag") time.sleep(1) except KeyboardInterrupt: print("\n正在关闭连接...") sock.close() print("连接已关闭")
注意事项
- 先确认你的UHF天线支持以太网通信,且已配置好和电脑同网段的IP地址
- 设备的端口号必须和手册标注一致,不同厂商的UHF设备端口可能不同
- 如果设备用UDP通信,只需把
socket.SOCK_STREAM改成socket.SOCK_DGRAM,并改用recvfrom接收数据,但多数UHF读写器默认用TCP - 原代码里的
ser.flushInput()在socket中不需要,网络缓冲区的读取逻辑和串口不同,无需手动清空
内容的提问来源于stack exchange,提问作者cesarkmp
相关产品推荐
相关产品推荐

