我编写了一些简单的程序来测试连接,我可以将消息从树莓派发送到arduino,但不能反过来。
我是否在从arduino发送数据或在树莓派上接收数据的代码中弄错了?
#include <SPI.h>
#include <RH_RF95.h>
RH_RF95 rf95;
void setup(){
Serial.begin(9600);
if (rf95.init()){
Serial.println("Init Success");
} else {
Serial.println("Init Failed");
}
if (rf95.setFrequency(868)) Serial.println("Freq set for 868Mhz");
if (!rf95.setModemConfig(RH_RF95::Bw125Cr45Sf128)) Serial.println("Invalid modem");
Serial.println("Send serial data to echo it through radio");
}
void loop(){
uint8_t data[100];
uint8_t len;
if (Serial.available()){
delay(20);
int i = 0;
while (Serial.available() && i < sizeof(data)-1){
data[i] = Serial.read();
i++;
data[i] = 0;
}
rf95.setModeTx();
if(rf95.send(data,i))
{
Serial.print("Message sent: ");
Serial.println((char *) data);
Serial.println(i);
} else {
Serial.println("Failure to send");
}
}
if (rf95.available())
{
if (rf95.recv((uint8_t *)data,&len)){
Serial.println("Got it");
Serial.println((char *)data);
Serial.println(len);
}
}
}
树莓派代码:这只是初始化了lora实例,我在交互式控制台上运行它,理论上它应该打印数据,但与我尝试的一样多发送消息时,没有设法在任何引脚上捕获IRQ。
from raspi_lora import LoRa, ModemConfig
# This is our callback function that runs when a message is received
def on_recv(payload):
print("From:", payload.header_from)
print("Received:", payload.message)
print("RSSI: {}; SNR: {}".format(payload.rssi, payload.snr))
lora = LoRa(0, 25, 2,freq=868, receive_all=True, modem_config=ModemConfig.Bw125Cr45Sf128)
lora.on_recv = on_recv
lora.set_mode_rx()
#1 楼
我知道了。结果发现我在python代码中使用的
raspi_lora
库中有一个错误。因此,如果您不是专门发送到设备地址或拥有
receive_all=True
,那么如果您打算使用raspi_lora库,则应使用
if (self._this_address != header_to) and ((header_to != BROADCAST_ADDRESS) or (self._receive_all is False)):
替换lora.py文件中的268行。
评论
哇,做得好。不要忘记将问题标记为已回答!
– SeanJ
20年7月26日在22:37