Arduino和Python之间的串行通信错误

时间:2018-08-08 14:29:15

标签: python python-3.x arduino raspberry-pi serial-port

我想将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很陌生。

1 个答案:

答案 0 :(得分:0)

您一次只能从一个应用程序连接到Arduino串行端口。 通过串行端口监视器连接到它时,Python无法连接到它。

您有两种解决方案:

  1. 使用串行嗅探器代替Arduino IDE的串行监视器。关于此主题还有另一个答案:https://unix.stackexchange.com/questions/12359/how-can-i-monitor-serial-port-traffic

  2. 不要使用任何串行监视器,请使用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()