Arduino和Raspberry pi3之间的串行通信

时间:2018-08-22 07:23:07

标签: python-3.x arduino serial-communication

我正在Arduino和Raspberry pi3之间进行RF通信。这是我的Arduino代码,与树莓派pi3连接,并从其他RF模块接收RF值。

#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>
#include <SPI.h>
char msg[10];
RF24 radio(7,8);
const uint64_t pipe = 0x0a0c0a0c0aLL;
int lastmsg = 1;
String theMessage = "";
void setup(void){
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(1,pipe);
  radio.startListening();
}
void loop(void){
  if (radio.available()){
    bool done = false;  
      done = radio.read(msg, 1); 
      char theChar = msg[0];
      if (msg[0] != 2){
        theMessage.concat(theChar);
        }
      else {
       Serial.println(theMessage);
       theMessage= ""; 
      }
   }
} 

这是我下面的Python代码

import serial
import time
# array
rf_array = ["RFID :"]

# Serial Communication
#port = "/dev/ttyACM2"
port = "/dev/ttyACM0"
# /dev/ttyACM2 is rfid Arduino
brate = 9600
arduino8 = serial.Serial(port, baudrate=brate, timeout=None)

while True:
    try:
        print("start")
        #arduino8 = serial.Serial(port, baudrate=brate, timeout=None)
        print("start1")
        data = arduino8.readline()
        print("start2")
        str = data[:-2].decode()
        str = str[:1]
        # str = int(str)
        rf_array.append(str)
        rf_array = list(set(rf_array))
        print(rf_array)


    except:
        print("no value")

当我的RF模块接收器附近存在RF模块时,它可以工作 但问题是我的RF模块接收器附近没有Rf模块 我发现data = arduino8.readline()是有问题的。因为没有来自arduino8的数据。因此它不会转到下一行。我知道这个问题,但我不知道如何解决。如果您能帮助我,我非常感谢。谢谢

1 个答案:

答案 0 :(得分:1)

将readline与Python Serial一起使用时,documentation状态

  

使用readline()时要小心。在打开串行端口时,请务必指定一个超时时间,否则如果没有收到换行符,它将永远阻塞。另请注意,readlines()仅适用于超时。 readlines()取决于是否存在超时,并将其解释为EOF(文件末尾)。如果未正确打开端口,则会引发异常。

这就是您在打开端口时在python代码中看到的内容

arduino8 = serial.Serial(port, baudrate=brate, timeout=None)

您可能应该将超时设置为合理的值,例如1秒或更多(取决于您的使用),以便库放弃一段时间后的等待。