JSON z Arduino
Obiekty można zapisywać w postaci JSON (słownik). Do jego obsługi można skorzystać z biblioteki ArduinoJason: https://arduinojson.org/
Przykład: Serializacja na obiekt Json
{
"imie": "Mateusz",
"numer": 1234
}
#include <ArduinoJson.h>
struct JData{
const char* imie;
long numer;
};
JData jdata;
void setup() {
Serial.begin(9600);
const char* input = "{ \"imie\":\"Mateusz\", \"numer\":1234 }";
JsonDocument doc;
DeserializationError error = deserializeJson(doc, input);
if(error){
Serial.print("Error: ");
Serial.println(error.c_str());
return;
}
jdata.imie = doc["imie"];
jdata.numer = doc["numer"];
Serial.println(jdata.imie);
Serial.println(jdata.numer);
}
void loop() {}
Przykład: Pobieranie obiektu JSON z pliku na karcie SD
#include <SPI.h>
#include <SD.h>
#include <ArduinoJson.h>
const char* fileName = "test.txt";
File myFile;
struct Config {
char hostname[64];
int port;
};
Config config;
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect.
}
Serial.print("Initializing SD card...");
if (!SD.begin(4)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
myFile = SD.open(fileName, FILE_WRITE); //O_APPEND, O_CREATE
if (myFile) {
myFile.close();
} else {
Serial.println("error opening file");
}
myFile = SD.open(fileName); // re-open the file for reading:
if (myFile) {
JsonDocument doc;
DeserializationError error = deserializeJson(doc, myFile);
if(error){
Serial.print("Error: ");
Serial.println(error.c_str());
return;
}
config.port = doc["port"];
strlcpy(config.hostname, doc["hostname"], sizeof(config.hostname));
Serial.print("Host: ");
Serial.println(config.hostname);
Serial.print("Port: ");
Serial.println(config.port);
myFile.close();
} else {
Serial.println("error opening file");
}
}
void loop() { }
Zobacz: Czytnik kart SD SPI z Arduino