Estou ciente de algumas bibliotecas de análise JSON para Arduino.
Eu nunca usei nenhum desses, mas fiz uma análise JSON simples em um projeto em que estou trabalhando, por isso vou mostrar como fiz isso.
NOTA: Estou lendo dados seriais usando a biblioteca serial do software. Você precisará alterar esse código para trabalhar para você. Isso funcionará apenas em cadeias JSON muito simples. É muito limitado, mas se é tudo o que você está analisando, funcionará.
Exemplo de resposta JSON do servidor:
{"id":"TEST1","lat":"38.56050207","lng":"-121.42158374","total":"3","available":"2"}
Primeiro, leia apenas os dados entre chaves.
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);
}
Esse código lê os dados um byte de cada vez e, quando recebe uma chave aberta, começa a salvá-la response. Quando recebe uma chave de fechamento, ela termina. Portanto, aqui está uma limitação clara: você pode ter apenas um conjunto de chaves de abertura / fechamento em sua string.
Depois de obter a string, uso indexOfe substringpara extrair informações relevantes:
start = response.indexOf("id\":\"") + 5;
end = start + 5;
nodeId = response.substring(start, end);
Esse código define starto início de id":"+ 5 caracteres na string. É +5 porque é quanto tempo id":"é. Então, startaponta para TEST1na cadeia JSON. No meu sistema, o ID sempre terá 5 caracteres, assim como o fim start + 5. Eu então uso substringpara extrair isso.
Novamente, antes que alguém comece a votar em mim para esta solução horrível: se você sabe exatamente com o que está trabalhando e entende as limitações deste código, essa não é uma solução ruim. É uma solução que faz o trabalho.