Hello everyone (and especially @rickkas7 !)
First, I’m new to C++ coding, so apologies if I get my terminology mixed up (if anyone can recommend a good book that’s suitable for me, that would be great - I have loads of experience with very high level languages [esp. Matlab], but I’m navigating in the dark with pointers, objects, classes etc).
I’m collecting data from various sensors. My main loop() calls a function for each sensor, which reads it’s value, creates a JSON string and publishes the result. Ideally, I would like a single (nested) JSON string containing data from all of the sensors. If everything was done within my main loop(), I could do it like this:
JsonWriterStatic<100> meta;
{
JsonWriterAutoObject obj(&meta);
meta.insertKeyValue("deviceId", System.deviceID());
}
JsonWriterStatic<100> data1;
{
JsonWriterAutoObject obj(&data1);
data1.insertKeyValue("sensor1val", sensor1val);
}
JsonWriterStatic<100> data2;
{
JsonWriterAutoObject obj(&data2);
data2.insertKeyValue("sensor2val", sensor2val);
}
JsonWriterStatic<400> full;
{
JsonWriterAutoObject obj(&full);
full.insertKeyValue("meta", meta.getBuffer());
full.insertKeyValue("firstSensor", data1.getBuffer());
full.insertKeyValue("secondSensor", data2.getBuffer());
}
Particle.publish("MyData", full.getBuffer(), PRIVATE, WITH_ACK);
What I want to achieve is (pseudocode):
loop()
{
JsonWriterStatic<100> meta;
{
JsonWriterAutoObject obj(&meta);
meta.insertKeyValue("deviceId", System.deviceID());
}
JsonWriterStatic<400> full;
{
JsonWriterAutoObject obj(&full);
full.insertKeyValue("meta", meta.getBuffer());
full.insertKeyValue("firstSensor", data1.getBuffer());
full.insertKeyValue("secondSensor", data2.getBuffer());
}
Particle.publish("MyData", full.getBuffer(), PRIVATE, WITH_ACK);
}
XXXX mySensor1function()
{
sensor1val = <read my sensor>;
JsonWriterStatic<100> data1;
{
JsonWriterAutoObject obj(&data1);
data1.insertKeyValue("sensor1val", sensor1val);
}
}
YYYY mySensor2function()
{
sensor2val = <read my sensor>;
JsonWriterStatic<100> data2;
{
JsonWriterAutoObject obj(&data2);
data2.insertKeyValue("sensor2val", sensor2val);
}
}
I’m uncertain how to pass the JSON object from my functions back to the loop(). Any tips/advice gratefully received!
Thanks
Dave