/**
* BasicHTTPClient.ino
* HTTPClient+http.getStringでGetしたJSONデータを解析する
*/
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h> //
https://github.com/bblanchon/ArduinoJson
const char* ssid = "アクセスポイントのSSID";
const char* password = "アクセスポイントのパスワード";
const char* host = "JSON Serverが動いているホスト";
WiFiClient client;
HTTPClient http;
void httpPrint(int len, char buff) {
char ch[2];
ch[1] = 0;
for(int i=0; i<len; i++) {
ch[0] = buff;
if (isAlphaNumeric(ch[0])) {
Serial.printf("%c",ch[0]);
} else if
(strstr("\"!#$%&'()=-<> ;:/,.@[]+*{}",ch)) {
Serial.printf("%c",ch[0]);
} else if (ch[0] == 0x0a) {
Serial.printf("\n");
} else {
//
Serial.printf("0x%02x",ch[0]);
Serial.printf("*");
}
}
}
void parseVariant(JsonVariant variant) {
JsonVariant val_id = variant.getMember("id");
int id = val_id.as<int>();
Serial.print("id=");
Serial.println(id);
JsonVariant val_title = variant.getMember("title");
const char * title = val_title.as<char*>();
Serial.print("title=");
Serial.println(title);
JsonVariant val_time = variant.getMember("time");
long time = val_time.as<long>();
Serial.print("time=");
Serial.println(time);
JsonArray val_data = variant.getMember("data");
//int arraySize = val_data.size();
Serial.print("val_data.size()=");
Serial.println(val_data.size());
for (int i = 0; i< val_data.size(); i++){
double data = val_data[i];
Serial.print("data[");
Serial.print(i);
Serial.print("]=");
Serial.println(data);
}
}
int parseJSON(String input) {
DynamicJsonDocument doc(1024);
//deserializeJson(doc, input);
DeserializationError error = deserializeJson(doc,
input);
if (error) {
Serial.print(F("deserializeJson()
failed: "));
Serial.println(error.c_str());
return 0;
}
Serial.print("measureJson=");
Serial.println(measureJson(doc));
JsonObject root = doc.as<JsonObject>();
JsonArray array = doc.as<JsonArray>();
Serial.print("array.size()=");
Serial.println(array.size());
if (array.size() == 0) {
JsonVariant variant =
doc.as<JsonVariant>();
parseVariant(variant);
} else {
for(int i=0; i<array.size(); i++) {
JsonVariant variant =
array[i];
parseVariant(variant);
}
}
return measureJson(doc);
}
void setup() {
delay(1000);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
DynamicJsonDocument doc(1024);
Serial.println("[HTTP] begin...");
http.begin(host, 3000, "/todos"); // list item
//http.begin(host, 3000, "/todos/2"); // non list
item
Serial.println("[HTTP] GET...");
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if(httpCode > 0) {
// HTTP header has been send and Server
response header has been handled
Serial.printf("[HTTP] GET... code:
%d\n", httpCode);
// file found at server
if(httpCode == HTTP_CODE_OK) {
String input =
http.getString();
Serial.print("input.length()=");
Serial.println(input.length());
for(int
i=0;i<input.length();i++) {
httpPrint(1,
(char)input[i]);
delay(1);
}
Serial.println();
parseJSON(input);
}
} else {
Serial.printf("[HTTP] GET... failed,
error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
void loop() {
}
|