`pyserial` 是 Python 中用于串口通信的主流库,支持 Windows、Linux 和 macOS 系统 pyserial是 Python 中用于串口通信的主流库支持 Windows、Linux 和 macOS 系统可与 Arduino、STM32、PLC、GPS 模块等通过 UART/RS232/USB-to-Serial 设备进行数据交互。基本用法示例importserialimportserial.tools.list_ports# 1. 列出可用串口调试用portsserial.tools.list_ports.comports()forportinports:print(port.device)# 2. 打开串口需根据实际设备修改端口名和参数serserial.Serial(portCOM3,# Windows 示例Linux 为 /dev/ttyUSB0baudrate9600,bytesizeserial.EIGHTBITS,parityserial.PARITY_NONE,stopbitsserial.STOPBITS_ONE,timeout1,# 读取超时秒write_timeout1# 写入超时)# 3. 发送数据字节形式ser.write(bHello\n)# 4. 接收数据返回 bytesdataser.readline()# 读至换行符print(data.decode(utf-8,errorsignore).strip())# 5. 关闭串口ser.close()⚠️ 注意事项端口号需确认如ls /dev/tty*或设备管理器波特率、校验位等必须与硬件设备严格一致使用try/except处理SerialException如端口被占用、权限不足推荐使用with serial.Serial(...) as ser:实现自动资源释放需 pyserial ≥ 3.5。# 推荐的安全写法上下文管理器fromserialimportSerialtry:withSerial(COM3,9600,timeout1)asser:ser.write(bAT\r\n)responseser.read(100)print(response.decode(ascii,errorsreplace))exceptserial.SerialExceptionase:print(f串口错误{e})在 Linux 系统中/dev/ttyUSB0等串口设备默认归属于dialout用户组且权限通常为crw-rw----仅 root 和dialout组成员可读写。普通用户无权限访问会导致PermissionError: [Errno 13] Permission denied错误。✅推荐解决方案安全、持久、标准1. 将当前用户加入dialout组sudousermod-a-Gdialout$USER⚠️ 注意执行后必须注销并重新登录或重启使组权限生效。2. 验证是否生效groups# 查看当前用户所属组确认含 dialoutls-l/dev/ttyUSB0# 应显示类似crw-rw---- 1 root dialout ...✅ 补充说明避免常见误区❌ 不推荐sudo chmod 666 /dev/ttyUSB0临时且不安全每次插拔设备后失效且降低系统安全性❌ 不推荐sudo chown $USER:$USER /dev/ttyUSB0设备重连后权限重置不可靠✅ 可选若系统无dialout组极少见可创建并配置 udev 规则但绝大多数主流发行版Ubuntu/Debian/Fedora已预置该组。 验证 Python 脚本是否成功importserial serserial.Serial(/dev/ttyUSB0,9600,timeout1)print(串口打开成功)ser.close()