Bonjour à tous, je viens vers vous car cela fait deux jours que je me casse la tête sur l'envoi d'une trame Json.
Je suis sur un ESP32 qui reçoit des données en Lora. Jusqu'à là tout va bien je "print" bien toutes mes données sur le sérial.
Je voudrais exploiter ces données avec Node red. Pour cela il faut que je les traduisent en Json. Et la, catastrophe ! Je n'y arrive pas !
Pourriez-vous me donner un coup de pouce s'il vous plaît ?
Voici mon code:
#include <ArduinoJson.h>
#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 8695E5
SSD1306 display(0x3c, 21, 22);
unsigned int compteur = 0;
String rssi = "RSSI --";
String packSize = "--";
String packet ;
String poids = "";
String tempINT = "";
String tempEXT = "";;
String humEXT = "";;
float data1R[7];
int NumRuche; // Donnée de discrimination pour reconnaître les différentes ruches
String Data1 = "";
String Volts = "";
void setup() {
pinMode(16,OUTPUT);
digitalWrite(16, LOW); // set GPIO16 low to reset OLED
delay(50);
digitalWrite(16, HIGH); // while OLED is running, must set GPIO16 in high、
compteur = 0 ;
Serial.begin(9600);
while (!Serial);
Serial.println();
Serial.println("LoRa Receiver Callback");
LoRa.setSpreadingFactor(10);
SPI.begin(SCK,MISO,MOSI,SS);
LoRa.setPins(SS,RST,DI0);
if (!LoRa.begin(BAND)) {
Serial.println("Starting LoRa failed!");
while (1);
}
LoRa.setSpreadingFactor(10); // Facteur d'étalement 7 est la valeur par défaut. Permet de discriminer deux émissions
LoRa.receive();
Serial.println("init ok");
display.init();
display.flipScreenVertically();
display.setFont(ArialMT_Plain_10);
delay(1500);
}
void loop() {
int packetSize = LoRa.parsePacket();
if (packetSize) {
received a packet
read packet
while (LoRa.available()) {
Serial.println("Paquets recus ");
compteur++ ;
Serial.println(compteur);
LoRa.readBytes((uint8_t *)&data1R, packetSize);
Data1 += data1R[0]; //Lit les données l'une après l'autre (+=)
Data1 = Data1.toFloat();
NumRuche = data1R[0];
tempINT = data1R[1];
tempEXT = data1R[2];
humEXT = data1R[3];
poids = data1R[5];
Volts = data1R[6];
/* Serial.print("Tension :");
Serial.println (Volts);
Serial.print("Numero de ruche :");
Serial.println (NumRuche);
Serial.print("Température INT :");
Serial.println (tempINT);
Serial.print("Température EXT :");
Serial.println (tempEXT);
Serial.print("Humidite EXT :");
Serial.println (humEXT);
Serial.print("Poids :");
Serial.println (poids);*/
//json
//Gestion de l'écran
display.clear();
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.setFont(ArialMT_Plain_10);
display.drawString(0, 0, "Numero de ruche :");
display.drawString(90, 0, String(NumRuche));
display.drawString(0, 15, "Temp INT: ");
display.drawString(90, 15, String(tempINT));
display.drawString(0, 30, "Temp EXT: ");
display.drawString(90, 30, String(tempEXT));
display.drawString(0, 45, "Humidite EXT: ");
display.drawString(90, 45, String(humEXT));
display.drawString(0, 60, "Poids: ");
display.drawString(90, 60, String(poids));
display.display();
}
}
}