我需要在LoRa接收器中解析从LoRa发送器收到的消息。打印序列中的所有字符串例如:"29.56,1004,20“没有任何问题,但我无法解析数组中的"String LoRaData = MQTT ();”,以便将它们作为单独的数据发送,您可以在LoRa.readString屏幕上使用它们来发送它们。
我的实际代码是:
#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);
}
}发布于 2020-01-02 21:51:22
我怀疑LoRa.readString()应用程序接口有问题。我改变了:
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();
}https://stackoverflow.com/questions/58405163
复制相似问题