[ESP8266] Problème Json

Bonjour,

Voilà je veux envoyer des données en json depuis mon capteur DHT22 et mon ESP8266.

J’ai donc ce code :

#include <ESP8266WiFi.h>
#include <ArduinoJson.h>
#include <Constellation.h>
#include "DHT.h"

#define DHTPIN 2     // what digital pin we're connected to
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

StaticJsonBuffer<512> jsonBuffer;

WiFiClient wifiClient;
Constellation constellation(wifiClient, "ip_adress", 8088, "ESP8266", "DHT", "key");

char str_humi[6];
char str_temp[6];

void setup() {
  Serial.begin(9600);
  Serial.println("DHTxx test!");

  dht.begin();

    WiFi.begin("Freebox", "Freemdp");  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("WiFi connected. IP: ");
  Serial.println(WiFi.localIP());

  constellation.writeInfo("ESP8266 on Constellation !!"); 

  
JsonObject& settings = constellation.getSettings();
int interval = String(settings["Interval"].asString()).toInt();

}

void loop() {
  // Wait a few seconds between measurements.
  delay(10000);
  
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  dtostrf(t, 4, 2, str_temp);
  dtostrf(h, 4, 2, str_humi);
  JsonObject& stateObjectTemp = jsonBuffer.createObject();
  stateObjectTemp["Temperature"] = str_temp;
  stateObjectTemp["Humidity"] = str_humi;

  Serial.print("Humidity: ");
  Serial.print(str_humi);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(str_temp);
  Serial.print(" *C ");
  constellation.writeInfo(str_temp);
  constellation.pushStateObject("Salon", &stateObjectTemp, "TempSensor");

}

Au début tous fonctionne parfaitement, dans les logs arduino ou constellation la température apparait bien.

Dans les states objects j’ai bien : {“Temperature”:“22.80”,“Humidity”:“41.60”}

Par contre au bout d’un certain moment, dans les states objects j’ai plus de valeur : {}
Pourtant dans les logs j’ai toujours la température. J’ai essayé de modifier mon code mais tant que je reste en json, ça bug au bout d’un temps.

Quelqu’un à une idée ?

Merci

Hello,

A mon avis tu dois saturer la RAM de l’ESP8266 car tu recrées un objet JSON à chaque loop().

Tu devrais plutôt initialiser ton objet “stateObjectTemp” via le “jsonBuffer.createObject()” dans les déclarations de ton sketch et simplement mettre à jour tes deux propriétés du JSON dans la loop.

En gros, déplaces la ligne :
JsonObject& stateObjectTemp = jsonBuffer.createObject();
de ta fonction loop() et colles-la dans les déclarations juste après l’objet constellation!

A+

Effectivement plus de problème, merci beaucoup.

Le seul problème avec le esp8266 c’est que j’ai pas mal de valeur “NaN” retourné. Pourtant je fais un refresh que tous les 2 minutes.