c++ Arduino UNO LoRa SX 1278未正确发送/接收数据

f2uvfpb9  于 2022-12-05  发布在  其他
关注(0)|答案(1)|浏览(198)

当我上传代码尝试LoRa Sx 1278与Arduino UNO的双向通信时,它无法工作。我使用了2个具有相同代码的模块。这是我收到的输出:
23:09:27.186 -〉接收到的数据包:207-〉发送消息
我了解到模块接收到消息但无法读取,并且带有接收器代码的第二个LoRa模块失败。
下面是我的代码:

#include <Wire.h>
#include <SPI.h>
#include <LoRa.h>

String outgoing;
byte msgCount = 0;            // count of outgoing messages
byte localAddress = 0xBB;     // address of this device
byte destination = 0xFF;      // destination to send to
long lastSendTime = 0;        // last send time
int interval = 300;          // interval between sends

void setup() {
  Serial.begin(115200);
  while (!Serial);
  Serial.println("LoRa Two-Way Communication");
  if (!LoRa.begin(433E6)) {
    Serial.println("Starting LoRa failed!");
    delay(100);
    while (1);
  }
}

void loop() {
  if (millis() - lastSendTime > interval) {
    String message = "data from sensors";
    Serial.println("Sending message");
  sendMessage(message);
    // Serial.println("Sending " + message);
    lastSendTime = millis(); // timestamp the message
    interval = random(50) + 300; // 2-3 seconds
  }
  // parse for a packet, and call onReceive with the result:
  onReceive(LoRa.parsePacket());
}

void sendMessage(String outgoing) {
  LoRa.beginPacket();                   // start packet
  LoRa.write(destination);              // add destination address
  LoRa.write(localAddress);             // add sender address
  LoRa.write(msgCount);                 // add message ID
  LoRa.write(outgoing.length());        // add payload length
  LoRa.print(outgoing);                 // add payload
  LoRa.endPacket();                     // finish packet and send it
  msgCount++;                           // increment message ID
}

void onReceive(int packetSize) {
  if (packetSize == 0) return;
  // read packet header bytes:
  int recipient = LoRa.read();          // recipient address
  byte sender = LoRa.read();            // sender address
  byte incomingMsgId = LoRa.read();     // incoming msg ID
  byte incomingLength = LoRa.read();    // incoming msg length
  // received a packet
  Serial.print("Received packet:  ");
  String LoRaData = LoRa.readString();
  Serial.print(LoRaData);
  // read packet
  while (LoRa.available()) {
    Serial.print((char)LoRa.read());
  }
  // print RSSI of packet
  Serial.print("' with RSSI ");
  Serial.println(LoRa.packetRssi());
  delay(1000);
}

我从教程中获得了代码并进行了修改,以便用于测试模块的双向通信。之前,我尝试了库“LoRa Sender”和“LoRa Receiver”中的一个示例,它工作得非常完美,所以就我而言,这不是硬件问题。

h43kikqp

h43kikqp1#

代码中有一些地方不太正确,但主要的一点是:interval = random(50) + 300; // 2-3 seconds这离2秒还差得远。interval的单位是毫秒,所以50+300会给予你0.35秒。这意味着两个设备都在不停地传输,彼此听不到对方的声音。试试2000 + random(1000)之类的......虽然有比使用random更好的方法来获得随机数。但无论如何。
另外,远离433e6,这是一个忙碌的频率,如果附近有人用汽车遥控器,你会收到很多东西不是从你。

相关问题