Value is always zero
//JsonDocument jDoc; // This is the new way of doing it in v7 and it doesn't work; applied is alyways zero.
StaticJsonDocument < 64 > jDoc;
if (wifi_client.available()) {
deserializeJson(jDoc, wifi_client);
Serial.println("RECEIVED");
serializeJson(jDoc, Serial);
temp = jDoc["temp"];
unsigned long applied = jDoc["applied"];
Serial.print(t_current);
Serial.print(" -> ");
Serial.println(temp);
Serial.print("applied: ");
Serial.println(applied);
prints
RECEIVED
{"temp":60,"applied":39543}0 -> 60
applied: 39543
but with JsonDocument it prints
RECEIVED
{"temp":60,"applied":39543}0 -> 60
applied: 0
Hi @rwb196884,
Do you mean that the code works with ArduinoJson 6 but not with ArduinoJson 7, or that it works with ArduinoJson 7 but only when using StaticJsonDocument?
Best regards, Benoit
Version 7 is installed.
This is the latest fuckup.
StaticJsonDocument<64> jDocFlow;
jDocFlow["t_flow"] = t_flow;
jDocFlow["t_return"] = t_return;
jDocFlow["foo"] = -1;
char payload[64];
serializeJson(jDocFlow, payload);
bool p = false;
while(!p) {
connect_wifi();
connect_ap();
connect_mqtt();
p = mqtt_client.publish(mqtt_topic_temp, payload, true);
if (!p) {
blink(6);
} // Error 6: couldn't report temperatures to MQTT.
else {
Serial.println("--published temp--");
serializeJson(jDocFlow, Serial);
Serial.println();
}
}
outputs
--published temp--
{}
What does the ArduinoJson Troubleshooter say?
Another example
StaticJsonDocument<128> jDocFlow;
jDocFlow["t_flow"] = 11;
jDocFlow["t_return"] = 12;
char payload[128];
serializeJson(jDocFlow, Serial);
Serial.print("serializeJson overflowed: ");
Serial.println(jDocFlow.overflowed());
Outputs
{} serializeJson overflowed: 1
Getting some junk from Serial.print
Reported temperatures: {"tt�low": 28, "t_re�r!�
I wonder if the board is fucked?
This last issue suggests a stack overflow.
Reduce the size of the stack variables.
Start by removing char payload[128].
How do you determine whether something is stored in the heap on on the stack?
I imagine it's something to do with where you declare the variable -- either inside a function of outside of any function -- but I can't find any documentation.
There is no quick answer to this question, unfortunately. I invite you to check out the "Missing C++ Course" in my book or any other C++ course.