首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino UNO LoRa SX1278未能正确发送/接收数据

Arduino UNO LoRa SX1278未能正确发送/接收数据
EN

Stack Overflow用户
提问于 2022-11-27 22:22:28
回答 1查看 25关注 0票数 0

当我上传代码尝试LoRa Sx1278与Arduino UNO的双向通信时,它失败了。我使用的两个模块与相同的代码。这是我收到的输出:

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^‘:

23:09:27.186 ->接收数据包:->与RSSI -70 23:09:28.207 ->发送消息

我知道模块接收到了一条消息,但是无法读取它,第二个带有接收器代码的LoRa模块失败了。

这是我的代码:

代码语言:javascript
复制
#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发件人“和"LoRa接收器”的例子,它运行得完美无缺,所以就我而言,这不是一个硬件问题。

EN

回答 1

Stack Overflow用户

发布于 2022-12-02 08:17:35

在代码中有一些不太正确的地方,但主要的一点是:interval = random(50) + 300; // 2-3 seconds远未超过2秒。interval以毫秒为单位,因此50+300的最大值将给您0.35秒。这意味着这两种设备都在不停地传输,而且无法听到对方的声音。试试像2000 + random(1000)这样的..。尽管有比使用random更好的随机获取方法。但不管怎样。

另外,远离433e6,这是一个繁忙的频率,如果附近有人用汽车遥控器,你会收到很多东西不是从你。

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

https://stackoverflow.com/questions/74594248

复制
相关文章

相似问题

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