当我上传代码尝试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”中的一个示例,它工作得非常完美,所以就我而言,这不是硬件问题。
1条答案
按热度按时间h43kikqp1#
代码中有一些地方不太正确,但主要的一点是:
interval = random(50) + 300; // 2-3 seconds
这离2秒还差得远。interval
的单位是毫秒,所以50+300
会给予你0.35秒。这意味着两个设备都在不停地传输,彼此听不到对方的声音。试试2000 + random(1000)
之类的......虽然有比使用random
更好的方法来获得随机数。但无论如何。另外,远离433e6,这是一个忙碌的频率,如果附近有人用汽车遥控器,你会收到很多东西不是从你。