i'm doing with nrf24l01 network. i want to storage value from sensor node ( like id, value temp, value humid) in JSON string like this one. my string:
{
"1": {//this is a ID from node
"Temp": "value",
"Humid": "value"
},
"2": {
"Temp": "value",
"Humid": "value"
}
}
i can create a object and add value from temp and humid, but i dont know how to create "1" /* ID /*
My code
void loop()
{
network.update();
if(network.available())
{
RF24NetworkHeader header;
network.read(header, &pack0, sizeof(pack0));
if (header.from_node == 1)//this is the ID , return 1, 2, ....
{
object["ID"] = header.from_node;
value["Temperature"] = pack0.temperature;
value["Humidity"] = pack0.humidity;
value["Soil"] = pack0.soil;
serializeJsonPretty(object, Serial);
Serial.println(""); }
else if (header.from_node == 2)
{
object["ID"] = header.from_node;
value["Temperature"] = pack0.temperature;
value["Humidity"] = pack0.humidity;
value["Soil"] = pack0.soil;
serializeJsonPretty(object, Serial);
Serial.println("");
}
}
}
You can use createnestedobject
, also remember that you are creating nested json objects in a loop so you need to take care of the size of your Json document (256
).
EDIT: For example when your nested object exceeds a fixed value, You can use clear()
function to clear the JSON object.
#define MAX_ELEMENTS 10
int receive_count = 0;
StaticJsonDocument<256> doc;
JsonObject object = doc.to<JsonObject>();
void loop()
{
network.update();
if (network.available())
{
RF24NetworkHeader header;
network.read(header, &pack0, sizeof(pack0));
if (header.from_node)
{
JsonObject ID = object.createNestedObject(String(header.from_node));
ID["Temperature"] = pack0.temperature;
ID["Humidity"] = pack0.humidity;
ID["Soil"] = pack0.soil;
serializeJsonPretty(object, Serial);
Serial.println("");
receive_count++;
//reset counter if reached and clear object
if (receive_count >= MAX_ELEMENTS)
{
doc.clear();
object = doc.to<JsonObject>();
receive_count = 0;
}
}
}
}