Estou tendo problemas com memoria de uma grande lista json.
Tenho ela gravada em um banco de dados e a única maneira que achei foi usar o código está na (referencia 1) a baixo para ler a lista que está dentro do loop.
Após ler eu passo esta lista json para gravar com o LittleFS (“referencia 2”) e acredito que não está gravando.
Se coloco json menor não estoura a memória e tudo funciona. Sou novo ainda no ESP é o meu primeiro projeto então estou acostumado em outras linguagens que sobra memória.
Quando vou ler o arquivo gravado grande uso o código da (referencia 3) da o erro Erro ao carregar JSON ler arquivo: EmptyInput acredito que não gravou o arquivo grande,
referencia 1
WiFiClientSecure client; // Secure client for SSL/TLS
HTTPClient http;
String url = String(serverApi) + "?email=" + email + "&senha=" + senha;
client.setInsecure(); // This disables SSL verification (unsafe for production)
http.begin(client, url);
http.addHeader("Content-Type", "application/json");
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
WiFiClient* stream = http.getStreamPtr();
String jsonString = "";
while (stream->available()) {
char c = stream->read();
jsonString += c; // Concatena os caracteres do JSON
}
// Se o JSON for muito grande, você pode processá-lo em partes aqui
// Deserializando o JSON
const size_t capacity = JSON_OBJECT_SIZE(50) + JSON_ARRAY_SIZE(50) + 500;
DynamicJsonDocument doc(capacity);
DeserializationError error = deserializeJson(doc, jsonString);
if (error) {
Serial.println("Erro ao desserializar JSON");
return;
}
String comando = doc["comando"];
String json= doc["json"];
/*Serial.println("Tamanho string json");
Serial.println(jsonString.length());*/
Serial.println("comando ..." + comando);
//Serial.println("Json agendamento: " + jsonString);*
//Serial.println(ESP.getFreeHeap());
if (comando.length() > 0) {
if (comando == "dosar-manual") {
Serial.println("Json dosar-manual recebido: " + json);
dosarManual(jsonString);
}else if(comando == "agendamento"){
Serial.println("Json agendamento: " +json);
gravarAgendamento(json);
}else if(comando == "calibrar"){
Serial.println("Json calibrar: " + json);
calibrar(jsonString);
}
}
// Limpa os dados do documento
}
http.end();
referencia 2
if (LittleFS.remove(path))
{
Serial.println("Arquivo deletado com sucesso!");
}
else
{
Serial.println("Erro ao deletar o arquivo!");
}
Serial.print("Escrevendo em: ");
Serial.println(path);
File file = LittleFS.open(path, "w"); // "w" -> cria ou sobrescreve o arquivo
if (!file)
{
Serial.println("Falha ao abrir o arquivo para escrita!");
return;
}
file.print(json);
file.close();
Serial.println("Arquivo gravado com sucesso!");
referencia 3
Serial.print("Lendo JSON do arquivo: ");
Serial.println(path);
File file = LittleFS.open(path, "r");
if (!file)
{
Serial.println("Erro ao abrir o arquivo para leitura!");
return;
}
// Lê todo o conteúdo do arquivo
//String jsonString;
String jsonString;
while (file.available())
{
jsonString += (char)file.read();
}
file.close();
Serial.print("ler arquivo: jsonString ");
const size_t capacity = JSON_OBJECT_SIZE(100) + JSON_ARRAY_SIZE(100) + 1000;
DynamicJsonDocument doc(capacity);
DeserializationError error = deserializeJson(doc,jsonString);
if (error)
{
Serial.print("Erro ao carregar JSON ler arquivo: ");
//enviarErro(email, "Erro ao carregar JSON:", "Função lerArquivo: Erro ao carregar JSON:");
Serial.println(error.c_str());
return;
}
// Obter o array JSON
JsonArray array = doc.as<JsonArray>();
for (JsonObject obj : array)
{
}
Lista json que da problema
[
{"key":1,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:00","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":2,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:12","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":3,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:18","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":4,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:24","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":5,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:30","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":6,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:36","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":7,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:42","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":8,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:48","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":9,"codUser":12,"codbomba":1,"dosagem":15,"hora":"08:54","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":10,"codUser":12,"codbomba":1,"dosagem":15,"hora":"09:00","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":11,"codUser":12,"codbomba":1,"dosagem":15,"hora":"09:06","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":12,"codUser":12,"codbomba":1,"dosagem":15,"hora":"09:12","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":13,"codUser":12,"codbomba":1,"dosagem":15,"hora":"09:18","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5},
{"key":14,"codUser":12,"codbomba":1,"dosagem":15,"hora":"09:24","diasemana":"Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","flag":0,"bombaativa":"on","calibracao":44.5}]`