ESP32でサーバーにJSONをPOSTする方法を紹介します。
おすすめのライブラリ
HTTP通信にはArduino Espressif32に含まれているHTTPClientを使用します。
JSONの処理についてはArudinoJsonがおすすめです。
PlatformIO Registry
The world's first package and project dependency management solution for embedded development
サンプル
ライブラリを読み込むため、includeに次を記載します。
#include <ArduinoJson.h>
#include <HTTPClient.h>
POSTするサンプルは次のようになります。
///
/// サーバーにPOSTする
///
// JSONを作成する
StaticJsonDocument<JSON_OBJECT_SIZE(4)> json_array;
char json_string[255];
// JSONに変換したいデータを連想配列で指定する
json_array["espid"] = 1;
json_array["temp"] = 2;
json_array["humi"] = 3;
json_array["press"] = 4;
// JSONフォーマットの文字列に変換する
serializeJson(json_array, json_string, sizeof(json_string));
// HTTPClinetでPOSTする
httpClient.begin("https://test.lc/hoge.php");
// postするのはjsonなので、Content-Typeをapplication/jsonにする
httpClient.addHeader("Content-Type", "application/json");
// POSTしてステータスコードを取得する
int status_code = httpClient.POST((uint8_t *)json_string, strlen(json_string));
if (status_code == 200)
{
Serial.printf("[POST]Send to server (URL:%s)", postUrl);
}
else
{
Serial.printf("[POST]failed to send to server (URL:%s)", postUrl);
}
// HTTPClinetを終了する
httpClient.end();
espid,temp,humi,pressの4つのデータをJSONに変換し、 https://test.lc/hoge.phpに送信するサンプルとしてみました。
ArduinoJsonを使用し、配列をJSON形式の文字列に変換させ、変換した文字列をサーバーにPOSTしています。
レスポンスも受け取るようにしており、200以外ではシリアルにエラーを出力するようにしてみました。
まとめ
HTTPClientとArduinoJSONの組み合わせて、JSONによるデータのやり取りもかんたんに対応できます。ESP32で収集したデータをサーバーに送信する際など、ぜひ使ってみてください。
コメント