求助:Windows下PyCharm环境中Python串口连接路由器/交换机代码问题
修复Python串口连接路由器/交换机的代码问题
1. 先解决依赖缺失问题
- 你的代码里用了
serial模块但没导入,而且Python没有内置这个模块,得先装pyserial库:pip install pyserial - 如果还没装
keyboard模块,也得先装:pip install keyboard - 代码开头必须补上导入语句:
import serial import keyboard
2. 修复代码逻辑与稳定性问题
- Windows下用
keyboard模块必须以管理员身份启动PyCharm,不然会因为权限不够没法检测按键。 - 把串口关闭的操作放到
finally块里,避免程序异常崩溃时串口没释放,导致后续没法重新连接。 - 编码换成
utf-8(兼容更多设备,部分老设备可能需要用latin-1,可根据实际情况调整)。 - 加个异常捕获,方便排查串口打不开、参数不匹配这类问题。
修正后的完整代码
import serial import keyboard ser = None try: # 注意:这里的串口参数要和你的路由器/交换机完全匹配,比如多数设备波特率是115200,不是9600 ser = serial.Serial( port="COM1", baudrate=9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, # 多数网络设备默认无校验,可查设备手册调整 stopbits=serial.STOPBITS_ONE, timeout=2 ) print("串口连接成功") while True: ser.write('You got connected\r\n'.encode('utf-8')) receive = ser.readline() if receive: print(receive.decode('utf-8').strip()) if keyboard.is_pressed('q'): print('用户退出程序') break except serial.SerialException as e: print(f"串口错误: {e}") except Exception as e: print(f"其他错误: {e}") finally: if ser and ser.is_open: ser.close() print("串口已关闭")
额外注意事项
- 确认
COM1是设备实际用的串口:去Windows设备管理器的「端口(COM和LPT)」里找路由器/交换机对应的串口编号。 - 核对设备参数:大部分网络设备默认波特率是
115200,不是代码里的9600,一定要查设备手册确认波特率、奇偶校验、停止位这些参数。 - 如果
keyboard模块还是有问题,可以换成不用权限的退出方式,比如监听回车键:# 替换原有的键盘监听部分 print("按回车键退出...") import sys, select while True: # 保留原有的发送接收逻辑 ser.write('You got connected\r\n'.encode('utf-8')) receive = ser.readline() if receive: print(receive.decode('utf-8').strip()) # 监听回车键 if sys.stdin in select.select([sys.stdin], [], [], 0)[0]: input() print('用户退出程序') break
内容的提问来源于stack exchange,提问作者BMO
相关产品推荐
相关产品推荐

