Conozco algunas bibliotecas de análisis JSON para Arduino.
Nunca he usado ninguno de estos, pero hice un análisis JSON simple en un proyecto en el que estoy trabajando, así que te mostraré cómo lo hice.
NOTA: Estoy leyendo datos en serie usando la biblioteca en serie del software. Tendrá que cambiar este código para que funcione para usted. Esto solo funcionará en cadenas JSON muy simples. Es muy limitado, pero si eso es todo lo que está analizando, funcionará.
Ejemplo de respuesta JSON del servidor:
{"id":"TEST1","lat":"38.56050207","lng":"-121.42158374","total":"3","available":"2"}
Primero, solo lea los datos entre llaves.
String response = "";
bool begin = false;
while (SIM900.available() || !begin) {
char in = SIM900.read();
if (in == '{') {
begin = true;
}
if (begin) response += (in);
if (in == '}') {
break;
}
delay(1);
}
Este código lee los datos un byte a la vez y una vez que obtiene una llave abierta, comienza a guardarlos response. Cuando obtiene una llave de cierre, la termina. Así que aquí hay una clara limitación, solo puede tener un conjunto de llaves de apertura / cierre en su cadena.
Una vez que tengo la cadena, uso indexOfy substringpara extraer información relevante:
start = response.indexOf("id\":\"") + 5;
end = start + 5;
nodeId = response.substring(start, end);
Este código se establece startal comienzo de id":"+ 5 caracteres en la cadena. Es +5 porque así de largo id":"es. Entonces startapunta a TEST1la cadena JSON. En mi sistema, la identificación siempre tendrá 5 caracteres, así que el final es start + 5. Luego uso substringpara extraer eso.
Nuevamente, antes de que alguien empiece a votar por esta horrible solución: si sabe exactamente con qué está trabajando y comprende las limitaciones de este código, entonces esta no es una mala solución. Es una solución que hace el trabajo.