无法通过 LoRa 从 Arduino 发送到 Raspberry pi

物联网 树莓派 阿杜伊诺 劳拉
2021-06-04 03:40:52

我正在尝试将消息从我的 Arduino 发送到我的 Raspberry pi。但我不明白为什么 pi 没有收到消息。

在 Arduino 方面,我使用的是带有 Dragino Lora/GPS 屏蔽的 Arduino UNO,使用 Radiohead 库。

在 Pi 方面,用于 pi 零和 pi 零的 Upotronics LoRa 帽子基于 RFM95 芯片。在软件方面,我使用的是 Raspi Lora 库。

我编写了几个简单的程序来测试连接,我可以从树莓派向 Arduino 发送消息,但反过来不行。

我是否在从 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);
    }
  }
}

Raspberry pi 代码:这只是初始化 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个回答

我想到了。原来raspi_lora我用于 python 代码库中有一个错误因此,如果您没有专门发送到设备地址或有receive_all=True,它将不会对消息进行任何处理。

如果您打算使用 raspi_lora 库,则应将 lora.py 文件中的第 268 行替换为

if (self._this_address != header_to) and ((header_to != BROADCAST_ADDRESS) or (self._receive_all is False)):