と、つい人は不良化してしまいます。
というわけで、また楽な道を探しましたところ、良いライブラリ見つけました。
これ使いやすいですよ。ちょっとバッファを食うので、nano / unoあたりだと大きなデータは作りにくいかもしれないですが、例えばAmbient(thingspeak.comのようなクラウドサービス)に送るデータをserializeする場合なんか、これだけで書けてしまいます。dictionaryもarrayもかなり直感的に書くことができてとてもラクです。
//
// send to Ambient
//
const int kMaxJsonBuffer = 2048;
StaticJsonBuffer<kMaxJsonBuffer> jsonBuffer;
char jsonPrintBuffer[kMaxJsonBuffer];
bool sendStorageToAmbient() {
int n = storage.uni.datas.counter;
JsonObject& root = jsonBuffer.createObject();
root["writeKey"] = "*****************"; // ambientのapi write key
JsonArray& dataArray = root.createNestedArray("data");
for (int i = 0; i < n; i++) {
OneData_t *pSrc = &storage.uni.datas.blocks[i];
JsonObject& one = jsonBuffer.createObject();
one["created"] = pSrc->created;
one["d1"] = pSrc->temperature;
one["d2"] = pSrc->humidity;
one["d3"] = pSrc->pressure;
one["d4"] = pSrc->airQuality;
dataArray.add(one);
}
root["data"] = dataArray;
Serial.print("text size = ");
Serial.println(root.measureLength());
root.printTo(jsonPrintBuffer, sizeof(jsonPrintBuffer));
Serial.println(jsonPrintBuffer);
int sent = ambient.bulk_send(jsonPrintBuffer);
return true;
}
お勧め。
上の例ではバッファサイズを2048バイトにしているのでArduinoだと一発アウトですが、一度に送るレコード数を制限する等でカバーしてみてください。
なお、写真は特にこの記事とは関係ありませんが、次期モデルのプロトタイプ。LEDの色をちょっくら変えてみました。緑色LEDが明るすぎるので少し抵抗を大きくしないといけないの図。
上の例ではバッファサイズを2048バイトにしているのでArduinoだと一発アウトですが、一度に送るレコード数を制限する等でカバーしてみてください。
なお、写真は特にこの記事とは関係ありませんが、次期モデルのプロトタイプ。LEDの色をちょっくら変えてみました。緑色LEDが明るすぎるので少し抵抗を大きくしないといけないの図。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。