首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dragino LG01-S收到异常数据包并停止工作

Dragino LG01-S收到异常数据包并停止工作
EN

Stack Overflow用户
提问于 2018-08-13 17:14:21
回答 1查看 250关注 0票数 0

我在Dragino LG01-S和Heltec WiFi LoRa 32之间的连接有问题。

WiFi LoRa 32每5秒向LG01-S发送一次带有温度数据的数据包。LG01-S不断地接收数据包,但经过一段时间(可能是20分钟,可能是7小时),它会收到一个与其他数据包不同的数据包。我跟踪串行监视器中的数据包,直到出现一个失败的数据包,这就是我看到它们的样子。

“失败”的数据包如下所示:

»�o…中的h260äàŽ²NR...à,ªé@��ö9AŒ?¿内K;字符。u.*!®d§“»‘ZoL

通常是这样的:

30.00

普通分组的大小是5字节,而失败分组的大小是73字节。

故障出在接收器(LG01-S)中,因为在出现失败的数据包之后,它只是停止接收任何数据,并且根本不执行任何代码。故障后,LoRa32继续发送数据包。

我检查了失败是否一致,但它们不是,正如前面提到的,它们发生在不同的时间。

下面你可以看到发送者和接收者的代码。

发件人

代码语言:javascript
复制
    #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);
}

接收者:

代码语言:javascript
复制
#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");
    }
  }
}

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-01-10 09:15:32

LoRa是一种共享媒介,因此您可能希望从自己的设备和外部设备接收数据包。您必须验证您使用的是正确的包。

最好的想法是使用LoRaWAN协议,该协议允许通过设备地址和消息完整性代码来验证数据包的来源。

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

https://stackoverflow.com/questions/51818962

复制
相关文章

相似问题

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