Tenho este codigo abaixo onde consigo inserir uma lista de até 20 posições que me da uns 5000 bytes. Tenho livre no esp 31400 bytes ao tentar salvar uma lista com 24 posiç~eos ao deserializar meu json retorna zerado.
void lerJsonBanco( ) {
Serial.println("executarConsulta");
Serial.println("bombaID");
// Simula a criação do URL
String url = String(serverApi) + "?email=" + email + "&senha=" + senha ;
// Inicia a requisição HTTP
http.begin(client, url);
http.setAuthorization("dosadora", "@sarosinc");
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.GET(); // Faz a requisição GET
Serial.print("httpResponseCode: ");
Serial.println(httpResponseCode);
if (httpResponseCode > 0) {
WiFiClient *stream = http.getStreamPtr();
DynamicJsonDocument doc(16384); // 16KB
DeserializationError error = deserializeJson(doc, *stream);
if (error) {
Serial.println("Erro ao desserializar JSON");
enviarLogParaDB("Loop", "Erro ao carregar JSON - Pode ser que estourou a memória. Diminua o campo Doses dia e desligue e ligue a dosadora " + String(error.c_str()), "alto");
return;
}else{
Serial.println("✅ JSON recebido e desserializado com sucesso!");
JsonArray outerArray = doc.as<JsonArray>();
for (JsonArray innerArray : outerArray) {
for (JsonObject item : innerArray) {
String comando = item["comando"];
int codBomba = item["idbomba"];
String json = item["jsonstring"];
Serial.print("Tamanho do JSON: ");
Serial.println(json.length());
String path = "/" + String(codBomba) + ".json";
if (comando == "dosar-manual") {
double dosagem = item["dosagem"];
double calibracao = item["calibracao"];
dosarManual(codBomba, dosagem, calibracao);
apagarComandos(email, senha, "dosar-manual", codBomba);
} else if (comando == "agendamento") {
LittleFS.remove(path);
File file = LittleFS.open(path, "w");
if (!file) {
enviarLogParaDB("Loop", "Erro ao abrir o arquivo para escrita!", "alto");
continue;
}
int length = json.length();
Serial.println("length");
Serial.println(length);
file.print(json);
file.close();
apagarComandos(email, senha, "agendamento", codBomba);
if (debugMode) Serial.println("✅ JSON salvo no LittleFS com sucesso!");
} else if (comando == "calibrar") {
calibrar(codBomba);
apagarComandos(email, senha, "calibrar", codBomba);
}
}
}
}
} else {
Serial.println("Erro HTTP");
}
http.end(); // Finaliza a requisição e libera a memória
client.stop(); // Libera recursos do WiFiClient
delay(10); // Pequeno delay para estabilizar o sistema
printMemoryStatus("Fim da consulta");
}