I have it recorded in a database and the only way I found was to use the code in (reference 1) below to read the list that is inside the loop.
After reading, I pass this json list to record with LittleFS (“reference 2”) and I believe it is not recording.
If I add smaller json it doesn't overflow memory and everything works. I'm still new to ESP, it's my first project so I'm used to other languages that have plenty of memory.
When I read the large recorded file I use the code from (reference 3) it gives the error Error loading JSON read file: EmptyInput I believe it did not record the large file
Reference 1
Code: Select all
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();
Code: Select all
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!");Code: Select all
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)
{
}Code: Select all
[
{"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}]