我需要在LoRa接收器中解析从LoRa发件人接收到的这些消息。 我没有任何问题可以打印序列中的所有字符串 例如:“ 29.56,1004,20” 但是我无法解析“ String LoRaData = LoRa.readString();”在数组中以单独的数据形式发送它们,或者在Oled屏幕上使用它们以与MQTT一起发送。
我的实际代码是这样:
#include <SPI.h>
#include <LoRa.h>
#include <Wire.h>
#include "SSD1306.h"
#include "images.h"
#define SCK 5 // GPIO5 -- SX1278's SCK
#define MISO 19 // GPIO19 -- SX1278's MISO
#define MOSI 27 // GPIO27 -- SX1278's MOSI
#define SS 18 // GPIO18 -- SX1278's CS
#define RST 14 // GPIO14 -- SX1278's RESET
#define DI0 26 // GPIO26 -- SX1278's IRQ(Interrupt Request)
#define BAND 868E6
SSD1306 display(0x3c, 4, 15);
String rssi = "RSSI --";
String packSize = "--";
String packet ;
void logo(){
display.clear();
display.display();
}
void loraData(){
display.clear();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_24);
display.drawString(0 , 15 , "Received "+ packSize + " bytes");
display.drawStringMaxWidth(0 , 26 , 128, packet);
display.drawString(0, 0, rssi);
display.display();
}
void cbk(int packetSize) {
packet ="";
packSize = String(packetSize,DEC);
for (int i = 0; i < packetSize; i++) { packet += (char) LoRa.read();
}
rssi = "RSSI " + String(LoRa.packetRssi(), DEC) ;
loraData();
}
void setup() {
pinMode(16,OUTPUT);
pinMode(2,OUTPUT);
digitalWrite(16, LOW); // set GPIO16 low to reset OLED
delay(50);
digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 in high
Serial.begin(9600);
while (!Serial);
Serial.println();
Serial.println("LoRa Receiver Callback");
SPI.begin(SCK,MISO,MOSI,SS);
LoRa.setPins(SS,RST,DI0);
if (!LoRa.begin(868E6)) {
Serial.println("Starting LoRa failed!");
while (1);
}
//LoRa.onReceive(cbk);
LoRa.receive();
Serial.println("init ok");
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_16);
delay(1500);
}
void loop() {
display.clear();
display.setTextAlignment(TEXT_ALIGN_LEFT);
// try to parse packet
int packetSize = LoRa.parsePacket();
if (packetSize) {
// received a packet
Serial.print("Recived packet '");
// read packet
while (LoRa.available()) {
String LoRaData = LoRa.readString();
Serial.print(LoRaData);
display.drawString(0, 0, "Reciving.... ");
display.drawString(0, 20, "message: ");
display.drawString(0, 40, String(LoRaData));
display.display();
delay(1500);
}
// print RSSI of packet
Serial.print("' with RSSI ");
Serial.println(LoRa.packetRssi());
String packetRssi_to_send = String(LoRa.packetRssi());
display.clear();
display.drawString(0, 0, "Sinial Quality ");
display.drawString(0, 40, "Rssi = ");
display.drawString(50, 40, String(packetRssi_to_send));
display.display();
delay(1500);
}
}
答案 0 :(得分:0)
我怀疑LoRa.readString()
API有问题。我更改了:
String LoRaData = LoRa.readString();
到
LoRaData = LoRaData+(char)LoRa.read();
示例:
// wait for LoRa packet
int packetSize = LoRa.parsePacket();
if (packetSize)
{
Serial.println("Paquet recu ");
String LoRaData ="";
while (LoRa.available())
{ // tant que le paquet LoRa arrive
LoRaData = LoRaData+(char)LoRa.read();
}