ArduinoJsonですが、JsonBufferをグローバルに確保して、state管理のために使用していたところ、一定時間経過後、データが更新されない状態になりました。
調べていたところ、以下の説明がありました。
Why shouldn't I use a global JsonBuffer?
https://arduinojson.org/faq/why-shouldnt-i-use-a-global-jsonbuffer/?utm_source=github&utm_medium=issues

グローバルなJsonBufferは値を追加・更新していった時にメモリーが解放されないようです。
値を更新するたびにメモリー使用量が増加して、最後は更新できなくなる。ということが原因のようでした。

各ステートの前後比較をするために使用したかったのですが、そのように使用するには以下のように、データ格納先をまず確保して
データを扱うたびにJsonBufferを確保してJsonとして扱う、ということが必要です。

struct SensorData {
   const char* name;
   int time;
   float value;
};

#define SENSORDATA_JSON_SIZE (JSON_OBJECT_SIZE(3))

bool deserialize(SensorData& data, char* json)
{
    StaticJsonBuffer<SENSORDATA_JSON_SIZE> jsonBuffer;
    JsonObject& root = jsonBuffer.parseObject(json);
    data.name = root["name"];
    data.time = root["time"];
    data.value = root["value"];
    return root.success();
}

void serialize(const SensorData& data, char* json, size_t maxSize)
{
    StaticJsonBuffer<SENSORDATA_JSON_SIZE> jsonBuffer;
    JsonObject& root = jsonBuffer.createObject();
    root["name"] = data.name;
    root["time"] = data.time;
    root["value"] = data.value;
    root.printTo(json, maxSize);
}```
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.