德拉吉诺 LG01-S 收到异常数据包并停止工作
Dragino LG01-S receives unusual packet and stops working
我在Dragino LG01-S和Heltec WiFi LoRa 32之间的连接方面遇到问题。
WiFi LoRa 32 每 5 秒向 LG01-S 发送带有温度数据的数据包.LG01-S 不断接收数据包,但一段时间后(可能是 20 分钟,可能是 7 小时(,它会收到一个与其他数据包不同的数据包。我跟踪串行监视器中的数据包,直到出现失败的数据包,这就是我看到它们的样子。
"失败"数据包如下所示:
¹h260äàŽÛNR·à,ª ê@ ö9AÚ o...Œ?£ÚK;Ëu000bÍ×.Ü*!®d§" ¿'ZoL
通常是这样的:
30:00
通常数据包的大小为 5 个字节,而失败数据包的大小为 73 个字节。
故障出在接收器(LG01-S(中,因为在出现失败的数据包后,它只是停止接收任何数据并且根本不执行任何代码。失败后,LoRa32 继续发送数据包.
我检查了失败是否一致,但事实并非如此,如前所述,它们发生在不同的时间。
您可以在下面看到发送方和接收方的代码。
寄件人
#include <SPI.h>
#include <LoRa.h>
#include "SSD1306.h"
#include<Arduino.h>
#include <dht.h>
SSD1306 display(0x3c, 4, 15);
#define DHTPIN 17
#define SS 18
#define RST 14
#define DI0 26
#define BAND 915E6
//create an instance of DHT sensor
dht TempSensor;
void setup()
{
pinMode(16, OUTPUT);
digitalWrite(16, LOW);
delay(50);
digitalWrite(16, HIGH);
Serial.begin(115200);
while (!Serial);
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.drawString(5, 5, "LoRa Sender");
display.display();
SPI.begin(5, 19, 27, 18);
LoRa.setPins(SS, RST, DI0);
Serial.println("LoRa Sender");
if (!LoRa.begin(BAND)) {
Serial.println("Starting LoRa failed!");
while (1);
}
LoRa.setSyncWord(0xF3);
Serial.println("LoRa Initial OK!");
display.drawString(5, 20, "LoRa Initializing OK!");
display.display();
delay(2000);
}
void loop() {
double check = TempSensor.read11(DHTPIN);
Serial.println(TempSensor.temperature);
Serial.print("Sending temperature: ");
Serial.println(TempSensor.temperature);
display.clear();
display.setFont(ArialMT_Plain_16);
display.drawString(3, 5, "Sending temperature ");
display.drawString(50, 30, String(TempSensor.temperature));
display.display();
// sending packet
LoRa.beginPacket();
LoRa.print(TempSensor.temperature);
Serial.println("package sent");
LoRa.endPacket();
delay(5000);
}
接收器:
#include <SPI.h>
#include <LoRa.h>
#include <Console.h>
#include <Process.h>
#include <Bridge.h>
// Set center frequency
uint32_t freq = 915E6;
Process logdata;
int timeCounter = 0;
void setup() {
Bridge.begin(115200);
Console.begin();
Console.println("LoRa Receiver");
if (!LoRa.begin(freq)) {
Console.println("Starting LoRa failed!");
while (1);
}
LoRa.setSyncWord(0xF3);
LoRa.receive();
}
void loop() {
// try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) {
// received a packet read packet
while (LoRa.available()) {
String TemperatureData = LoRa.readString();
Console.println(TemperatureData);
Console.println(packetSize);
//Save in db
logdata.begin("lua");
logdata.addParameter("/root/LinkTempInside.lua"); //
logdata.addParameter(String(TemperatureData)); //
logdata.run(); // run the command
// read the output of the command
while (logdata.available() > 0) {
char c = logdata.read();
}
Console.println("Data Sent");
}
}
}
感谢您的帮助。
LoRa 是一种共享介质, 所以你会期望从自己的设备和外来设备接收数据包.您必须验证您是否在正确的软件包上工作。
最好的主意是使用 LoRaWAN 协议,该协议允许通过设备地址和消息完整性代码验证数据包的来源.
相关文章:
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 发送固定大小的 UDP 数据包
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 在 c++ 中解析数据包数据的最佳方法是什么?
- 接受函数在发送数据包时等待
- 如何在 omnet++ 中发送自定义数据包?
- 数据包访问实践
- 在C++中创建一个简单的数据包路由器,如何跟踪"客户端"?
- 德拉吉诺 LG01-S 收到异常数据包并停止工作
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- 使用C++将UDP数据包存储在Structure中
- FFmpeg av_read_frame从音频流返回数据包
- 为什么操作系统正在更改我的数据包的指定传出端口
- 是否可以将多个结构作为一个数据包存储在一个函数中,然后传递给其他函数并在那里提取?
- recvfrom 只收到几个数据包,之后它进入等待状态
- 如何调试由 C++ 编写的 npm 数据包
- 如何在INET的应用层中发送广播数据包
- C++ 将字符串数据包转换为 iphdr语言 - 字符串数据包的格式应该是什么?
- 不同的数据包,联合 - 正确的用法\验证?