QUando faço meu json uma lista até 9 posiçoes ele me mostra certinho
o json com 9 posições. A partir que coloco 10 ou mais da WDT reset.
Antes usava server.arg("plain") e funcionava bem com lista json grande mas agora alterei para Asyncrono
O codigo é assim
server.on("/gravarAgendamento", HTTP_POST,[](AsyncWebServerRequest *request){}, NULL,
[](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) {
jsonBuffer.reserve(8192); // Ajuste para o tamanho máximo esperado
if (index == 0) {
jsonBuffer.clear(); // Limpa buffer ao começar novo JSON
jsonBuffer.reserve(total); // Reserva memória
Serial.printf("🔄 Iniciando recebimento de JSON (%d bytes)\n", total);
}
if (jsonBuffer.capacity() < jsonBuffer.size() + len) {
Serial.println("⚠️ JSON grande demais! Abortando...");
request->send(413, "application/json", "{\"erro\": \"JSON muito grande\"}");
return;
}
jsonBuffer.reserve(jsonBuffer.size() + len); // Reserva espaço antecipadamente
Serial.println(ESP.getFreeHeap()); // Exibe a memória livre
size_t chunkSize = 100; // Tamanho do chunk
//ESP.wdtDisable();
for (size_t i = 0; i < len; i += chunkSize) {
size_t remaining = len - i;
size_t size = (remaining < chunkSize) ? remaining : chunkSize;
jsonBuffer.insert(jsonBuffer.end(), data + i, data + i + size);
delay(0); // Permite que o sistema processe outras tarefas
}
Serial.printf("Recebido (%d/%d bytes)\n", index + len, total);
// Se terminou de receber todo o JSON, processa os dados
if (index + len == total) {
Serial.println("📩 JSON Completo Recebido:");
jsonBuffer.push_back('\0'); // Garante finalização da string
// Criar um documento JSON dinâmico
DynamicJsonDocument doc(8192); // Aumente se necessário
DeserializationError error = deserializeJson(doc,jsonBuffer.data());
if (error) {
Serial.print("❌ Erro ao parsear JSON: ");
Serial.println(error.c_str());
request->send(400, "application/json", "{\"erro\": \"JSON inválido\"}");
return;
}
// Verifica se o JSON recebido é um array
if (doc.is<JsonArray>()) {
Serial.println("📌 JSON recebido é um ARRAY!");
JsonArray array = doc.as<JsonArray>();
// Percorrer e exibir cada item da lista JSON
Serial.println("🔽 Lista JSON recebida:");
for (JsonVariant item : array) {
serializeJson(item, Serial);
Serial.println();
}
}
// Se for um objeto normal, imprime diretamente
else if (doc.is<JsonObject>()) {
Serial.println("📌 JSON recebido é um OBJETO!");
serializeJson(doc, Serial);
Serial.println();
}
Serial.println("📌 JSON Processado com Sucesso!");
// Retornasucesso para o cliente
request->send(200, "application/json", "{\"status\": \"ok\"}");
}
});
A lista que funciona até 9 posições se você verem é uma lista grande
18:03:03.055 -> {"key":1,"id":"12930","codUser":12,"codbomba":1,"dosagem":55.55555556,"hora":"13:00","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50"}
18:03:03.255 -> {"key":2,"id":"12931","codUser":12,"codbomba":1,"dosagem":55.55555556,"hora":"13:06","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50"}
18:03:03.489 -> {"key":3,"id":"12932","codUser":12,"codbomba":1,"dosagem":55.55555556,"hora":"13:09","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50"}
18:03:03.689 -> {"key":4,"id":"12933","codUser":12,"codbomba":1,"dosagem":55.55555556,"hora":"13:12","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50"}
18:03:03.889 -> {"key":5,"id":"12934","codUser":12,"codbomba":1,"dosagem":55.55555556,"hora":"13:15","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50"}
18:03:04.122 -> {"key":6,"id":"12935","codUser":12,"codbomba":1,"dosagem":55.55555556,"hora":"13:18","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50"}
18:03:04.322 -> {"key":7,"id":"12936","codUser":12,"codbomba":1,"dosagem":55.55555556,"hora":"13:21","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50"}
18:03:04.553 -> {"key":8,"id":"12937","codUser":12,"codbomba":1,"dosagem":55.55555556,"hora":"13:24","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50"}
18:03:04.789 -> {"key":9,"id":"12938","codUser":12,"codbomba":1,"dosagem":55.55555556,"hora":"13:27","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":"50"}