blogy logo
login PRIHLÁS SA
BLOG deadawp
ČLÁNKY
DISKUSIE
2
SLEDOVAŤ BLOG
Programátor
deadawp



ArduinoJson - knižnica pre parsovanie JSON dát
pridal deadawp 15.11. 2020 o 0:16 (naposledy upravené 28.6. 2021 o 17:53)



JSON je univerzálny formát dát využívaný v rôznych systémoch pre výmenu dát, stavov. Formát je nezávislý na použitej platforme a je veľmi populárny aj v mikrokontrolérovej technike. JSON dáta sú reprezentované poľom dát, kedy má každá položka priradený kľúč, ktorý danú položku reprezentuje a jej hodnotu.

Hodnota môže nadobúdať číselnú hodnotu, textovú hodnotu, ale aj bool hodnoty - true / false / NULL. Formát dát má svoje špecifiká, napríklad čiarky medzi dvojicami kľúčov a hodnôt. Obsah JSON reťazca je čitateľný aj pre človeka a tak vie určiť aj o aké dáta sa jedná, nakoľko kľúč je v podstate jednoznačným identifikátorom dát.

Osobne JSON používam ja vo svojich projektoch pre formát vstupných dát pre Google Charts - grafické vizualizácie čiarovými / koláčovými grafmi. Dáta sú získané z databázy a následne sú enkódované do JSON formátu, ktorý Google Charts spracuje a na os x - čas doplní časovú značku záznamov z databázy a na os y grafu vloží konkrétne dáta namerané v danej časovej značke.

Pri spracovaní JSON dát na strane mikrokontroléru sa využíva proces deserializácie, ktorá umožňuje ľahšie spracovanie dát z reťazca, ktorý je deserializáciou pretvorený na JSON objekt. Práve toto umožňuje knižnica ArduinoJson, ktorá je kompatibilná pre rôzne architektúry procesorov, napríklad AVR - Arduino, Xtensa - ESP8266, ESP32. Umožňuje z deserializovaného JSON objektu vytiahnuť hodnotu na základe kľúča.

Používam to predovšetkým v prípade, že potrebujem načítať rôzne stavy, hodnoty z webservera, ktorý riadi automatizáciu. S týmito dátami môžem ďalej pracovať napríklad v prípade, že vypadne konektivita do internetu, alebo je webserver, ktorý logikou riadi celý projekt nedostupný. Za normálnych okolností s úspešným pripojením na webserver si klient preberie hodnotu kľúča output a tú nastaví na výstup, ostatné parametre síce uloží, ale nepracuje s nimi. Dáta ale môžu byť využité aj do rôznych iných systémov, ktoré podporujú spracovanie JSON dát.

Napríklad Hassio, Domoticz umožňujú vo svojich dashboardoch spracovať JSON zo zdroja a tieto dáta vizualizovať. Tak je možné nezávisle na konfigurácii projektu reportovať jeho stavy do centrálnej aplikácie používateľovi, ktorý má prehľad v dashboard rozhraní o všetkých dostupných projektoch inteligentnej domácnosti a dátach z nich. ArduinoJson podporuje aj vytváranie JSON reťazca, upravovanie existujúcich hodnôt ku kľúčom, ale aj serializáciu, čím je možné JSON objekt previesť opäť na reťazec, ktorý je možné preniesť do ďalšieho zdroja.

Príbuzný, však dátovo náročnejší univerzálny formát reprezentácie dát je XML, čo je rozšírený značkovací jazyk. Štruktúrou veľmi podobnou HTML kódu umožňuje zasielať rôzne stavy, hodnoty druhému systému. V mojich projektoch som to využil napríklad pri internej komunikácii v LAN sieti medzi x zariadeniami v klientskom režime a jedným serverom bežiacim na Arduine. Dáta boli preposielané HTTP POST metódou s takýmto XML payloadom.

Takto bolo možné prenášať napríklad identifikátor tvorený fyzikou MAC adresou mikrokontrolérov a hodnotami zo senzora Bosch BME280. Dáta tak bolo možné webserver spracovať od mnohých klientov siete - Publisherov, ktorí informáciu so svojim indentifikátorom zasielali.

Webserver udržiaval dané dáta v RAM pamäti a dokázal ich klientom, ktorí si informáciu vyžiadali distribuovať prostredníctvom odpovede - response webservera. Výhoda XML je oproti JSON-u aj to, že umožňuje nastaviť znakovú sadu podľa potreby aplikácie / lokalizácie.

Príklad deserializácie a práca s reťazcom v ArduinoJson 6.1: https://arduinojson.org/v6/example/string/



Prístupov 8028
Kvalita článku
hlasov 0

PRÍSPEVKY
SLEDOVAŤ
Prosím prihláste sa pre možnosť pridania komentáru.
Prihláste sa, alebo použite facebook login facebook login
ĎALŠIE ČLÁNKY V BLOGU
Update grafov, ukážkových kódov - Hladin...
[ 16.11.2024] (príspevkov 0)
XIAO ESP32-C6 od Seeed Studio
[ 10.11.2024] (príspevkov 0)
ESP-IDF v4.4.2 prechod na v5.2
[ 5.11.2024] (príspevkov 0)
Krabička pre RFID DOMINATOR 2.0
[ 18.10.2024] (príspevkov 0)
Známe neduhy - Ecotec 1.6E Opel/GM Chevr...
[ 8.10.2024] (príspevkov 0)
Cold-start BQ25570 vs BQ25504 od Texas I...
[ 2.8.2024] (príspevkov 0)
EG21-G - MQTT pripojenie na Thingsboard
[ 5.6.2024] (príspevkov 0)
Quectel EG21-G - HTTP request
[ 17.5.2024] (príspevkov 0)
Tip na darček k jubileu 60
[ 29.4.2024] (príspevkov 0)