我正在尝试使用Pyserial python库将Arduino Uno的串行输出打印到我的屏幕上。
这是我的Arduino代码。它只是生成并打印随机数到串行监视器:
void setup() {
Serial.begin(9600);
}
void loop() {
long rand = random(10);
Serial.print(rand);
}
我的python代码只是将serial中的值打印到命令行,这里是代码:
#!/usr/bin/python
import serial
ser = serial.Serial("/dev/ttyACM0",9600)
while True:
thing = ser.readline()
print(thing)
当Arduino将随机数打印到串行监视器时,我运行我的python脚本并得到错误:
Traceback (most recent call last):
File "/home/archimedes/anaconda3/lib/python3.6/site-packages/serial/serialposix.py", line 265, in open
self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
OSError: [Errno 16] Device or resource busy: '/dev/ttyACM0'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "pythonSerialTest.py", line 6, in <module>
ser = serial.Serial("/dev/ttyACM0",9600)
File "/home/archimedes/anaconda3/lib/python3.6/site-packages/serial/serialutil.py", line 240, in __init__
self.open()
File "/home/archimedes/anaconda3/lib/python3.6/site-packages/serial/serialposix.py", line 268, in open
raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 16] could not open port /dev/ttyACM0: [Errno 16] Device or resource busy: '/dev/ttyACM0'
答案 0 :(得分:0)
您不能让两个程序使用相同的串行端口。
关闭Arduino IDE中的串行监视器。
PS:你也试图在Python中读取行,但你不是从Arduino发送它们。
将数字打印为Serial.println(rand);
的行。
答案 1 :(得分:0)
我之所以得到resource busy error
是因为Python试图访问串行监视器,但是由于我使用命令sudo make upload monitor clean
将代码上传到Arduino,所以我的PC可以从以下位置访问串行监视器Arduino,这使Python无法从Arduino访问串行监视器。现在,如果我打算使用Python访问串行监视器,只需使用sudo make upload clean
将代码上传到Arduino并排除命令monitor
。