我想将Raspberry Pi上的Python程序中的值发送到Arduino。我的RPi程序如下所示:
import time, serial
time.sleep(3)
ser = serial.Serial('/dev/ttyACM0', 9600)
ser.write(b'5')
我的Arduino程序:
void setup() {
Serial.begin(9600); // set the baud rate
Serial.println("Ready"); // initial "ready" signal
}
void loop() {
char inByte = ' ';
if(Serial.available()) {
inByte = Serial.read();
Serial.println(inByte);
}
delay(100)
}
我的问题是,当我使用Python运行程序并随后在Arduino IDE中打开串行监视器时,它仅显示“就绪”,而不显示发送的值。如果我想在程序同时打开监视器,则出现错误:
设备或资源繁忙:'/ dev / ttyACM0'
我正在使用Python 3.6。
很抱歉,如果这是一个简单的错误,但是我对Serial和Arduino很陌生。
答案 0 :(得分:0)
您一次只能从一个应用程序连接到Arduino串行端口。 通过串行端口监视器连接到它时,Python无法连接到它。
您有两种解决方案:
使用串行嗅探器代替Arduino IDE的串行监视器。关于此主题还有另一个答案:https://unix.stackexchange.com/questions/12359/how-can-i-monitor-serial-port-traffic
不要使用任何串行监视器,请使用Python!您可以连续读取序列号,并打印收到的内容,如下所示:
import time, serial
time.sleep(3)
ser = serial.Serial('/dev/ttyACM0', 9600)
# Write your data:
ser.write(b'5')
# Infinite loop to read data back:
while True:
try:
# get the amount of bytes available at the input queue
bytesToRead = ser.inWaiting()
if bytesToRead:
# read the bytes and print it out:
line = ser.read(bytesToRead)
print("Output: " + line.strip())
except IOError:
raise IOError()