我正在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的数据。因此它不会转到下一行。我知道这个问题,但我不知道如何解决。如果您能帮助我,我非常感谢。谢谢
答案 0 :(得分:1)
将readline与Python Serial一起使用时,documentation状态
使用readline()时要小心。在打开串行端口时,请务必指定一个超时时间,否则如果没有收到换行符,它将永远阻塞。另请注意,readlines()仅适用于超时。 readlines()取决于是否存在超时,并将其解释为EOF(文件末尾)。如果未正确打开端口,则会引发异常。
这就是您在打开端口时在python代码中看到的内容
arduino8 = serial.Serial(port, baudrate=brate, timeout=None)
您可能应该将超时设置为合理的值,例如1秒或更多(取决于您的使用),以便库放弃一段时间后的等待。