Arduino和Raspberry pi3之间的串行通信



我正在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")

当射频模块存在于我的射频模块接收器附近时,它可以工作 但问题是我的射频模块接收器附近没有射频模块 我发现data= arduino8.readline((是问题。因为没有来自arduino8的数据。所以它不会转到下一行。我知道这个问题,但我不知道如何解决它。如果你帮助我,我真的很感激。谢谢

当将readline与Python Serial一起使用时,文档状态

使用 readline(( 时要小心。打开串行端口时请指定超时,否则如果没有收到换行符,它可能会永远阻塞。另请注意,readlines(( 仅适用于超时。readlines(( 依赖于超时并将其解释为 EOF(文件结束(。如果未正确打开端口,则会引发异常。

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

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

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

最新更新