You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PySerial读取Arduino Uno串口输出遇设备占用错误求助

解决Arduino串口被占用导致PySerial无法打开的问题

这个[Errno 16] Device or resource busy的错误原因其实很直白:同一个串口设备同一时间只能被一个程序占用。你已经打开了Arduino IDE的串口监视器,它正占着/dev/ttyACM0这个端口,所以Python脚本自然没法再打开它。下面是具体的解决步骤:

1. 最直接的方案:关闭Arduino串口监视器

这是最快解决问题的方法:

  • 打开Arduino IDE,找到右上角的串口监视器按钮(那个放大镜图标),点击它断开串口连接。
  • 关闭后重新运行你的Python脚本,应该就能正常读取串口数据了。

2. 排查并终止其他占用串口的进程

如果关闭串口监视器后还是报错,可能有后台进程偷偷占用了串口:

  • 在Linux终端里输入这条命令,查看哪个进程在占用/dev/ttyACM0:
    lsof /dev/ttyACM0
    
  • 输出结果里会显示占用设备的进程ID(PID),比如类似这样的行:
    arduino    1234  yourusername    5u   CHR  166,0      0t0  12345 /dev/ttyACM0
    
  • 用kill命令终止这个进程(把1234换成你查到的实际PID):
    kill 1234
    
  • 之后再尝试运行Python脚本。

3. 确保你的用户有串口访问权限

有时候即使设备没被占用,权限不够也会触发类似错误:

  • 执行这条命令,把当前用户加入dialout组(Linux系统中串口设备通常归这个组管理):
    sudo usermod -aG dialout $USER
    
  • 执行完后注销并重新登录,权限才会生效,之后再运行脚本即可。

附:你的代码整理

Arduino代码(生成随机数并发送到串口)

void setup() { 
  Serial.begin(9600); 
} 

void loop() { 
  long rand = random(10); 
  Serial.print(rand); 
}

Python代码(读取串口数据)

#!/usr/bin/python
import serial

ser = serial.Serial("/dev/ttyACM0", 9600)
while True:
    thing = ser.readline()
    print(thing)

内容的提问来源于stack exchange,提问作者Ramces Gonzalez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:02:23