aJson è una libreria Arduino che consente l’uso di Json su Arduino. Permette facilmente di decodificare, creare, manipolare e codificare Json direttamente dalle strutture di dati. In questo modo, lo scambio di dati tra computer diventa più semplice. Vediamo quali sono le basi per utilizzare aJson e anche quali sono i suoi limiti più importanti, dato che si trova ancora in versione beta.

A cosa serve ajson, json su Arduino

aJson è una libreria Arduino che consente il trattamento di Json con Arduino. Esso permette facilmente di decodificare, creare, manipolare e codificare Json direttamente per strutture di dati. Con questo programma non ci si deve preoccupare di codificare e decodificare i dati, perché Json lo fa automaticamente. Esso si basa sull'attuazione di cJSON, ridotta nelle dimensioni e con la rimozione di una o due caratteristiche.

Lo scambio di dati con altri computer può essere un compito scoraggiante con Arduino. Non importa se si desidera passare alcune informazioni di elaborazione, un servizio Web o qualcos’altro. Bisogna sempre codificare e decodificare i dati per la risposta.

Ci sono sempre state soluzioni come XML per i dati strutturati. Ma XML è difficile da decodificare, è abbastanza complicata e prende un sacco di spazio. E poi c'è Json. Json è un modo semplice ed efficace per il trasferimento di dati. Una struttura dati complessa può per esempio essere rappresentata come

{ "Name": "Jack (\"Bee\") Nimble", "Format": { "Type": "rect", "Width": 1920, "Height": 1080, "Interlace": false, "Frame rate": 24 } }

Come usare aJson

Per utilizzare aJson bisogna ottenerlo innanzitutto dal repository git o scaricare la versione più recente. Si deve poi estrarre il file zip o il file git in 'aJson', una cartella nella directory di libreria Arduino 'biblioteche \'. Su github troverete anche un semplice schizzo Arduino per testare la biblioteca, da usare se volete anche come punto di partenza.

Per analizzare la struttura con aJson basta semplicemente convertirlo in questo modo:

aJsonObject* jsonObject = aJson.parse (json_string);

Questo funziona assumendo che abbiate la stringa Json in json_string variabile, come un char*). Si tratta di un oggetto e siamo in C. Non ci sono oggetti, ma abbiamo le strutture. Pertanto gli oggetti vengono tradotti in strutture, con tutti gli inconvenienti che ne derivano. Ora possiamo ad esempio recuperare il valore per il nome:

aJsonObject * name = aJson.getObjectItem (root, "nome");

Il valore del nome può essere recuperato tramite:

Serial.println (value.valuestring-> name);

Notate che il aJsonObject ha un valore che detiene tutti i tipi di valori possibili sovrapposti: si possono ottenere solo i dati utili per il tipo che avete a portata di mano. È possibile ottenere il tipo di

digitare il nome->

che può essere sia aJson_False, aJson_True, aJson_NULL, aJson_Number, aJson_String, aJson_Array o aJson_Object. Per aJson_Number è possibile utilizzare value.number.valueint o value.number.valuedouble, per aJson_String è possibile utilizzare value.valuestring, per True or False, è possibile utilizzare value.valuebool.

Se si desidera cambiare il nome, è possibile farlo

aJson.getObjectItem (jsonObject, "nome") -> value.valuestring = "a newname";

Per rendere l'oggetto in una stringa è possibile scrivere semplicemente

* Json_String char = aJson.print (jsonObject);

Se avete finito, potete eliminare la root in questo modo:

aJson.delete (root);

Questo elimina gli oggetti e tutti i valori riferiti ad essi. Se volete vedere com’è costruita questa struttura nel codice, scrivete invece:

aJsonObject radice *, * fmt; root = aJson.createObject (); aJson.addItemToObject (root, "name", aJson.createString ("Jack (\"Bee\") Nimble")); aJson.addItemToObject (root, "format", fmt = aJson.createObject ()); aJson.addStringToObject (fmt, "type", Â Â Â Â Â Â "rect"); aJson.addNumberToObject (fmt, "width", Â Â Â Â Â Â 1920); aJson.addNumberToObject (fmt, "height", Â Â Â Â Â Â 1080); aJson.addFalseToObject (fmt, "interlace"); aJson.addNumberToObject (fmt, "frame rate", Â Â Â 24);

Limiti di aJson su Arduino

Purtroppo tutto ciò che riguarda le complesse strutture di dati e l'elaborazione del testo non è il dominio primario per Arduino. Così devono essere fatte alcune semplificazioni: aJson non è adatto per ATmega168 basato su Arduino perché non c'è abbastanza RAM e la stessa biblioteca usa fino all'80% della memoria flash. In più, aJson non è in grado di gestire Unicode e le liste possono gestire solo fino a 256 voci. Tutte le stringhe sono case sensitive, quindi bisogna stare attenti alle maiuscole e minuscole.

Arduino disponibile da Farnell