首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LoRa与ESP8266与RPi 3B+的通信

LoRa与ESP8266与RPi 3B+的通信
EN

Stack Overflow用户
提问于 2022-11-01 06:20:50
回答 1查看 130关注 0票数 0

我有一个ESP8266和一个RPI 3B+都配备了LoRa-02 (SX1278)模块.我正试图从ESP发送一个数据包到RPi,但它不起作用。

请考虑ESP8266上的以下代码片段:

main.cpp

代码语言:javascript
复制
#include "loRaComms.h"
void setup() {
  // sender
  Serial.begin(115200);
  initLoRa(434800000);
}

void loop() {
  // sender
  brodcastBuffer();
  delay(1000);
}

loRaComms.cpp

代码语言:javascript
复制
#include <LoRa.h>

void initLoRa(int freq) {
  LoRa.setPins(Lora_NSS, Lora_RESET, Lora_DIO0);
  LoRa.setFrequency(freq);
  LoRa.setSignalBandwidth(62500);
  LoRa.setSpreadingFactor(12);
  LoRa.setCodingRate4(8);
  LoRa.setGain(0);
  LoRa.setPreambleLength(6);
  if (!LoRa.begin(freq)) {
    // initialize ratio at 915 MHz  433E6 - Asia, 866E6 - Europe, 915E6 - North America
    Serial.println("LoRa init failed.");
  } else {
    Serial.println("LoRa init succeeded.");
  }
}

void brodcastBuffer() {
  LoRa.beginPacket(); // start packet
  LoRa.print("hello!");
  LoRa.endPacket();
}

我对ESP8266代码没有问题。我已经测试了这个代码与2 ESP8266,一个发件人和一个接收者,一切都很好!

现在让我们看看RPi 3B+代码。我使用了这个存储库和它自己的示例代码,如下所示:

代码语言:javascript
复制
void * rx_f(void *p) {
  rxData *rx = (rxData *)p;
  printf("rx done \n");
  printf("CRC error: %d\n", rx->CRC);
  printf("Data size: %d\n", rx->size);
  printf("string: %s\n", rx->buf); // Data we've received
  printf("RSSI: %d\n", rx->RSSI);
  printf("SNR: %f\n", rx->SNR);
  free(p);
  return NULL;
}

int main() {
  LoRa_ctl modem;
  // See for typedefs, enumerations and there values in LoRa.h header file
  modem.spiCS = 0; // Raspberry SPI CE pin number
  modem.rx.callback = rx_f;
  modem.eth.preambleLen = 6;
  modem.eth.bw = BW62_5; // Bandwidth 62.5KHz
  modem.eth.sf = SF12; // Spreading Factor 12
  modem.eth.ecr = CR8; // Error coding rate CR4/8
  modem.eth.freq = 434800000; // 434.8MHz
  modem.eth.resetGpioN = 27; // GPIO4 on lora RESET pin
  modem.eth.dio0GpioN = 17; // GPIO17 on lora DIO0 pin to control Rxdone and Txdone interrupts
  modem.eth.outPower = OP20; // Output power
  modem.eth.powerOutPin = PA_BOOST; // Power Amplifier pin
  modem.eth.AGC = 1; // Auto Gain Control
  modem.eth.OCP = 240; // 45 to 240 mA. 0 to turn off protection
  modem.eth.implicitHeader = 0; // Explicit header mode
  modem.eth.syncWord = 0x12;
  printf("%d\n", modem.eth.bw);
  printf("%d\n", modem.eth.ecr);
  // For detail information about SF, Error Coding Rate, Explicit header, Bandwidth, AGC, Over current protection and other features refer to sx127x datasheet https:// www.semtech.com/uploads/documents/DS_SX127$

  LoRa_begin(&modem);
  LoRa_receive(&modem);

  while (1) {
    usleep(200000);
  }
  printf("end\n");
  LoRa_end(&modem);
}```

But I can't receive anything on RPi. I also tested the ping pong sample on two RPi 3 and it didn't work.

Did I miss something here? I'm open to use any alternative library on RPi3, but I can only use C/C++ libraries. I've used the following pins:

    raspi                       LoRa
    GPIO27, pin13               RESET
    GPIO17, pin 11              DIO0
    MOSI (GPIO10, pin 19)       MOSI
    MISO (GPIO9, pin 21)        MISO
    CLK (GPIO11, pin 23)        SCK
    SPI_CE0 (GPIO8, pin 24)     NSS


  [1]: https://%20github.com/YandievRuslan/sx1278-LoRa-RaspberryPi.git
EN

回答 1

Stack Overflow用户

发布于 2022-11-12 07:04:39

您可以检查您的引脚连接。

PI _3 MISO为GPIO09,MOSI为GPIO10。因此,您需要将引脚连接更改为

代码语言:javascript
复制
raspi                       LoRa

MOSI (GPIO10, pin 19)       MISO

MISO (GPIO9, pin 21)        MOSI

这里是SPI MOSI和MISO https://www.analog.com/en/analog-dialogue/articles/introduction-to-spi-interface.html的介绍。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74272212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档