Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Домашняя страница - https://arduinojson.org/
Библиотека позволяет работать с файлами JSON.
ArduinoJson доступна через менеджер библиотек в Arduino IDE. Для работы с библиотекой нужно включить заголовочный файл.
#include <ArduinoJson.h>
Пример десериализации файла и вывод только необходимых данных показан в статье Узнаём погоду через OpenWeatherMap.
Рассмотрим пример создания JSON-файла с необходимыми данными.
#include <ArduinoJson.h>
void setup() {
Serial.begin(115200);
StaticJsonDocument<100> jsonDocument;
jsonDocument["sensorType"] = "Temperature";
jsonDocument["value"] = 16;
char buffer[100];
serializeJsonPretty(jsonDocument, buffer);
Serial.println(buffer);
}
void loop() {}
В мониторе порта смотрим, как выглядит запись в JSON-формате.
{
"sensorType": "Temperature",
"value": 16
}
Кроме текстового формата JSON существует бинарный формат MessagePack. Честно признаюсь, никогда о нём не слышал до чтения примеров для библиотеки. MessagePack имеет преимущество - он эффективен для передачи данных, занимая меньше места. Это может оказаться решающим фактором при больших объёмах данных.
Пример с сериализацией не сильно отличается от аналогичного примера для JSON.
#include <ArduinoJson.h>
void setup() {
Serial.begin(115200);
StaticJsonDocument<100> jsonDocument;
jsonDocument["sensorType"] = "Temperature";
jsonDocument["value"] = 10;
// требуемый
int expectedBytesToWrite = measureMsgPack(jsonDocument);
Serial.print("Expected Bytes: ");
Serial.println(expectedBytesToWrite);
//
char buffer[100];
int bytesWritten = serializeMsgPack(jsonDocument, buffer);
Serial.print("Bytes written: ");
Serial.println(bytesWritten);
for (int i = 0; i < bytesWritten; i++) {
Serial.printf("%02X ", buffer[i]);
}
}
void loop() {}
// Результат
// Expected Bytes: 31
// Bytes written: 31
// 82 AA 73 65 6E 73 6F 72 54 79 70 65 AB 54 65 6D 70 65 72 61 74 75 72 65 A5 76 61 6C 75 65 0A
Проверить корректность данных можно на сайте msgpack-lite, декодируя набор байт.
В коде есть код, обрамлённый комментариями. Он позволяет узнать требуемый размер сообщения до отправки, не пересылая сами данные. Это пригодится, чтобы оценить объём данных и принять решение об отправке. Во время отправки сообщения этот код избыточен, так как при отправке сообщения мы можем уже сами посчитать количество отсылаемых байтов.
Узнаём погоду через OpenWeatherMap
Youtube: число подписчиков, просмотров и лайков