Arduino与Python串口连接COM3权限错误问题求助
解决Python读取Arduino COM3串口时的PermissionError(13)权限问题
核心原因
PermissionError(13)本质是COM3端口被其他进程占用——你提到VS Code里的Arduino串口监视器能正常输出数据,这说明当前串口正被串口监视器占用,Python无法获取端口访问权限。
快速修复步骤
- 立即关闭VS Code中的Arduino串口监视器,同时确认没有其他串口调试工具(比如PuTTY)占用COM3
- 以管理员身份运行VS Code或Python脚本:右键点击VS Code图标选择「以管理员身份运行」,再执行你的代码,避免系统权限限制
- 确认Arduino上传代码后端口已释放:上传完成后,Arduino插件会暂时占用端口,等待几秒再运行Python脚本
代码验证建议
Arduino代码(确保串口输出正常)
确保你的代码能稳定向串口输出数据,示例如下:
// 流量传感器引脚定义 const int flowSensorPin = 2; void setup() { Serial.begin(9600); // 波特率要和Python代码一致 pinMode(flowSensorPin, INPUT); } void loop() { // 读取流量传感器状态并发送 int flowState = digitalRead(flowSensorPin); Serial.println(flowState); delay(100); // 控制输出频率,避免数据过载 }
Python代码(优化串口连接与异常处理)
使用pyserial库时,务必匹配Arduino的串口参数,同时添加异常处理排查问题:
import serial import time try: # 串口参数必须和Arduino一致:端口、波特率、超时时间 ser = serial.Serial('COM3', 9600, timeout=1) time.sleep(2) # 等待Arduino重启(上传代码后会自动重启) print("串口连接成功!") # 持续读取串口数据 while True: if ser.in_waiting > 0: data = ser.readline().decode('utf-8').strip() print(f"收到传感器数据:{data}") except serial.SerialException as e: print(f"串口错误详情:{e}") finally: # 确保程序退出时关闭串口 if 'ser' in locals() and ser.is_open: ser.close() print("串口已关闭")
额外排查方向
- 设备管理器确认端口归属:右键「此电脑」→「管理」→「设备管理器」→「端口(COM和LPT)」,确认Arduino对应的端口确实是COM3
- 重新安装Arduino驱动:如果端口权限有异常,卸载现有驱动后重新安装可修复权限问题
- 更换USB端口:部分USB接口可能存在权限限制,换一个USB口尝试连接
等串口问题解决后,后续实现Chrome恐龙跳跃可以用pyautogui库,当检测到流量传感器触发信号时,调用pyautogui.press('space')模拟空格键即可。
内容的提问来源于stack exchange,提问作者Julie Rønnov
相关产品推荐
相关产品推荐

