WeMosをRESPのクライアントとして機能するため、JSONと、HTTPClientを検証する。
ライブラリの追加
JSONを扱うライブラリに「ArduinoJSON」というのがあるので、ライブラリの追加で、リストが出てくるので、JSONと入力し絞込。
(2018/7現在、5.x と6.x が共存して、6.xはまたベター版のため、エラーが発生する。5.xを利用する)
ArduinoJSONの動作、JsonBuffer size、Parsing program、Serializing programは、下記のURLで確認しながら進める方が便利でしょう。
https://bblanchon.github.io/ArduinoJson/assistant/
動作確認
公式のサンプルJsonParserExampleをそのまんま。
// Copyright Benoit Blanchon 2014-2017 // MIT License // // Arduino JSON library // https://bblanchon.github.io/ArduinoJson/ // If you like this project, please add a star! #include <ArduinoJson.h> void setup() { Serial.begin(9600); while (!Serial) { // wait serial port initialization } // Memory pool for JSON object tree. // // Inside the brackets, 200 is the size of the pool in bytes, // If the JSON object is more complex, you need to increase that value. // See https://bblanchon.github.io/ArduinoJson/assistant/ StaticJsonBuffer<200> jsonBuffer; // StaticJsonBuffer allocates memory on the stack, it can be // replaced by DynamicJsonBuffer which allocates in the heap. // // DynamicJsonBuffer jsonBuffer(200); // JSON input string. // // It's better to use a char[] as shown here. // If you use a const char* or a String, ArduinoJson will // have to make a copy of the input in the JsonBuffer. char json[] = "{\"sensor\":\"gps\",\"time\":1351824120,\"data\":[48.756080,2.302038]}"; // Root of the object tree. // // It's a reference to the JsonObject, the actual bytes are inside the // JsonBuffer with all the other nodes of the object tree. // Memory is freed when jsonBuffer goes out of scope. JsonObject& root = jsonBuffer.parseObject(json); // Test if parsing succeeds. if (!root.success()) { Serial.println("parseObject() failed"); return; } // Fetch values. // // Most of the time, you can rely on the implicit casts. // In other case, you can do root["time"].as<long>(); const char* sensor = root["sensor"]; long time = root["time"]; double latitude = root["data"][0]; double longitude = root["data"][1]; // Print values. Serial.println(sensor); Serial.println(time); Serial.println(latitude, 6); Serial.println(longitude, 6); } void loop() { // not used in this example }
出力
gps
1351824120
48.756080
2.302038
参考
- https://bblanchon.github.io/ArduinoJson/assistant/ — ArduinoJson Assistant
- http://shuzo-kino.hateblo.jp/entry/2016/05/06/203603 — ArduinoでJSONを扱う「ArduinoJSON」
- https://arduinojson.org/v5/assistant/ — How to use ArduinoJson?
How to compute the JsonBuffer size?
Paste your JSON in the box and you’ll know…