Пакет Arduino JSON - форматирование значения датчика - PullRequest
2 голосов
/ 22 марта 2019
#include <ArduinoJson.h>
#include <SimpleDHT.h>

String input = "{\"temperature\":\"26\"};
SimpleDHT11 dht11;
byte temperature = 0;
int err = SimpleDHTErrSuccess;

void loop {

   StaticJsonBuffer<512> dataBuffer;

   if (err = dht11.read(2, &temperature, NULL)) == simpleDHTErrSuccess) {
       Serial.print((int) temperature);
       JsonObject& dataRoot = dataBuffer.parseObject(input);

       *long Temperature = dataRoot[String("temperature")];
       *Temperature = (long)temperature;
       *dataRoot[String("temperature")] = Temperature;

       String output;
       dataRoot.printTo(output);
}

У меня есть фрагмент кода Arduino, используемый для форматирования показаний датчика температуры DHT11 в JSON, чтобы обеспечить потоковую передачу данных в веб-клиенте.Это было получено из этого проекта, который я использую для вдохновения https://www.twilio.com/blog/2018/07/watch-iot-sensors-esp32-javascript-nodejs-twilio-sync.html.

Я вместо этого пытаюсь получить данные от датчика мышц Myoware.Требуемое значение амплитуды можно просто запросить следующим образом:

int sensorValue = analogRead(A0);

Мне нужна помощь в понимании того, как работает функция parseObject и какова цель строки 'input'.Все, что я хочу, это чтобы значение моего датчика передавалось на сторону клиента, которая отображает его в виде графика.Три строки, которые я отмечал звездочкой, особенно запутаны.

Спасибо!

1 Ответ

2 голосов
/ 22 марта 2019

Метод parseObject() выделяет и заполняет JsonObject (с которым вы можете работать) из строки JSON.

"JsonObject" в вашем примере кода называется dataRoot и определяется с помощью

JsonObject& dataRoot = dataBuffer.parseObject(input);

, где dataBuffer происходит от StaticJsonBuffer<512> dataBuffer;, которая является точкой входа для использования библиотеки ArduinoJson, и

, где input имеет значение строки JSON "{\"temperature\":\"26\"}", которая соответствует стандартному формату пары атрибут-значение JSON (вам нужна строка JSON для работы, а затем отправить ее на клиентскую сторону ).

После выполнения JsonObject& dataRoot = dataBuffer.parseObject(input); вы получаете dataRoot как объект со свойством с именем temperature, и вы можете получить доступ к этому свойству с помощью dataRoot[String("temperature")]

Итак, три строки:

   long Temperature = dataRoot[String("temperature")];
   Temperature = (long)temperature;
   dataRoot[String("temperature")] = Temperature;

используются для обновления значения атрибута temperature тем, что считывается с датчика.

Немного запутывает в примере кода тот факт, что имя атрибута JSON равно temperature, а также имя переменной для хранения температуры, считываемой с датчика, также temperature. Это разные вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...