Je suis parti sur la version 6 de arduinojson donc : https://arduinojson.org/v6/assistant/marsflow a écrit : 15 mai 2020, 23:49 bonsoir alors déjà pour décrypter le json distant tu as besoin de coller ton json actuel que tu souhaites récupérer sur ce site https://arduinojson.org/v5/assistant/
J'ai adapté le sketch afin d'afficher le retour d'une sonde température sur un afficheur a base de Max7219.
Le sketch fonctionne, pendant une bonne heure il affiche bien la bonne température.
Mais au bout d'une heure le sketch plante avec le message dans le moniteur serie :
Code : Tout sélectionner
deserializeJson() failed: NoMemory
Voici le sketch si ça peut aider quelqu’un et si on peut m'aider!
Code : Tout sélectionner
#include <ESP8266WebServer.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <Wire.h>
#include <SPI.h>
#include <ArduinoJson.h>
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
// Parametrage matrice ( Pin Arduino ou est branché la matrice )
#define MAX_DEVICES 4 // ( nombre de matrice )
#define CLK_PIN D5
#define DATA_PIN D7
#define CS_PIN D6
#define MAX_INTENSITY 0xf
// initialisation de la matrice
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
MD_Parola P = MD_Parola(HARDWARE_TYPE,CS_PIN, MAX_DEVICES);
//MD_Parola P = MD_Parola(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
unsigned long delayTime;
const char* ssid = "xxxxxxx"; //Nom du reseau wifi
const char* password = "xxxxxxx"; //mot de passe
const char* host = "192.168.0.236"; //Domoticz
const char* url = "/json.htm?type=devices&rid=194"; //Url du device à analyser
const uint16_t port = 8080;
const int watchdog = 30000; // Fréquence de reception des données Domoticz
unsigned long previousMillis = millis();
ESP8266WebServer server ( 80 );
HTTPClient http;
void setup() {
//init affichage
P.begin();
Serial.setDebugOutput(true);
Serial.begin(115200);
#ifdef __AVR_ATmega32U4__ // If this is a 32U4 processor, then wait 3 seconds to initialize USB
delay(3000);
#endif
Serial.setDebugOutput(true);
Serial.println("Connecting Wifi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
int value = 0;
void loop() {
unsigned long currentMillis = millis();
if ( currentMillis - previousMillis > watchdog ) {
previousMillis = currentMillis;
WiFiClient client;
if (!client.connect(host, port)) {
Serial.println("connection failed");
delay(500);
return;
}
if(WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi not connected !");
} else {
Serial.println("reception data de Domoticz");
Serial.println("passage ok");
// Check HTTP status
http.begin(host, port, url);
int httpCode = http.GET();
if (httpCode) {
if (httpCode == 200) {
String client = http.getString();
Serial.println("200 OK");
}
}
// Send HTTP request
client.println(F("GET /json.htm?type=devices&rid=194 HTTP/1.0"));
client.println(F("Host: http://192.168.0.236:8080"));
client.println(F("Connection: close"));
if (client.println() == 0) {
Serial.println(F("Failed to send request"));
return;
}
Serial.println("passage 2 ok");
// Skip HTTP headers
char endOfHeaders[] = "\r\n\r\n";
if (!client.find(endOfHeaders)) {
Serial.println(F("Invalid response"));
return;
}
Serial.println("passage 3 ok");
// Allocate the JSON document
// Use arduinojson.org/assistant to compute the capacity.
const size_t capacity = 2*JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(16) + JSON_OBJECT_SIZE(34) + 1559;
DynamicJsonDocument doc(capacity);
Serial.println(capacity);
// Parse JSON object
DeserializationError error = deserializeJson(doc, client);
if (error) {
Serial.print(F("deserializeJson() failed: "));
Serial.println(error.c_str());
return;
}
// Extract values
JsonObject root = doc.as<JsonObject>();
Serial.println(F("Response:"));
long ActTime = root["ActTime"];
const char* ServerTime = doc["ServerTime"];
JsonObject result_0 = root["result"][0];
const char* result_0_Data = result_0["Data"];
const char* result_0_Name = result_0["Name"];
float result_0_Temp = result_0["Temp"];
Serial.println(ServerTime);
Serial.println(result_0_Temp);
Serial.println(result_0_Name);
Serial.println(result_0_Data);
P.begin();
P.print(result_0_Data);
// Disconnect
client.stop();
}
}
}Merci à tous