Prezados,
Estou utilizando meu Ethernet Shield W5100 para dar um GET no meu backend e ter o retorno dos dados armazenados em memória.
Estou tendo sucesso, e o código está retornando um JSON no Serial Monitor conforme esperado:
[{"id":1,"cor":"vermelho","estado":true},{"id":2,"cor":"azul","estado":true}]
Isto posto, ao analisar o retorno total do meu metodo GET, na verdade ele retorna todo o body da requisição:
HTTP/1.1 200
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Mon, 25 May 2020 00:56:29 GMT4d
[{"id":1,"cor":"vermelho","estado":true},{"id":2,"cor":"azul","estado":true}]
0
Esse retorno encontra-se dentro do loop do Arduino e é printado dessa forma por um Serial.print(c); básico.
Então, a leitura (GET) está OK, porém eu preciso juntar essas informações, talvez concatena-las, e depois dar um parse para que eu obtenha somente os valores que eu preciso, ID, COR e BOOLEAN.
Irei utilizar o valor do BOOLEAN, para, neste caso, acender ou desligar um LED.
Mas não estou conseguindo cumprir tais objetivos. Gostaria de saber se vocês possuem alguma sugestão para tais "problemas"?
Já tentei usar concat(), porém ao printar, ele vai printando até terminar, vira uma "rampa", porém acho que funciona.
Mas preciso isolar o retorno JSON e seus valores para ativar ou desativar um led com true e false.
Segue o código:
#include <Ethernet.h>
#include <SPI.h>
int Led = 13;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 100, 30 };
byte server[] = { 192, 168, 100, 3 }; // localhost
EthernetClient client;
void setup()
{
pinMode(Led, OUTPUT);
Ethernet.begin(mac, ip);
Serial.begin(9600);
delay(1000);
Serial.println("connecting...");
if (client.connect(server, 8080)) {
Serial.println("connected");
digitalWrite(Led, HIGH);
client.println("GET /perifericos/ HTTP/1.1");
client.println("Host: ");
client.println("Content-Type: application/json");
client.println();
} else {
Serial.println("connection failed");
digitalWrite(Led, LOW);
}
}
void loop()
{
int i = 0;
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
digitalWrite(Led, LOW);
client.stop();
for (;;)
;
}
}
Agradeço e espero obter ajuda.