ArduinoJson でJsonデータとして送信でいなかった
ESP32 や M5stack などで通信するときセンサーの複数のデータをわかりやすく送信するのに Json 形式で送信出ればいいと考えました。
ArduinoJson というライブラリがあり、これを使用することで簡単に Json 形式で送信できるようです。
使用してみよう
testJson.ino
#include <ArduinoJson.h>
char pubMessage[512];
void setup(){
Serial.begin(115200);
}
void loop(){
String data = buildJson();
data.toCharArray(pubMessage, data.length());
Serial.println(pubMessage);
delay(1000);
}
String buildJson()
{
String json = "";
const int capacity = JSON_OBJECT_SIZE(20);
StaticJsonDocument<capacity> doc;
DynamicJsonDocument logs(64);
int val1, val2;
val1 = 0;
doc["Sensing_A"] = val1;
val2 = 0;
doc["Sensing_B"] = val2;
serializeJson(doc, json);
return json;
}
結果確認
{"Sensing_A":0,"Sensing_B":0
{"Sensing_A":0,"Sensing_B":0
{"Sensing_A":0,"Sensing_B":0
{"Sensing_A":0,"Sensing_B":0
このデータを送信しても送信先では、Json と認識できないし変換もできません。
コード修正
原因と考えられるのがこのコードです
data.toCharArray(pubMessage, data.length());
この部分のデータの長さを示すのが 1 文字足りないと考えられます。なので、このコードを修正します。
data.toCharArray(pubMessage, data.length() + 1);
修正結果
{"Sensing_A":0,"Sensing_B":0}
{"Sensing_A":0,"Sensing_B":0}
{"Sensing_A":0,"Sensing_B":0}
{"Sensing_A":0,"Sensing_B":0}
これで送信して変換、Json と認識できるようになりました。