LoginSignup
0
0

More than 3 years have passed since last update.

ArduinoJson でJsonデータとして送信でいなかった

Last updated at Posted at 2020-09-14

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 と認識できるようになりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0