Riempire un array con stringhe di testo salvate nella memoria SPIFFS

Salve a tutti, premetto che è il primo dei miei esperimenti con arduino e la programmazione C/C++. Data la lunghezza del codice posterò degli snippet per esplicare il mio problema e allegherò l'intero file .ino
Nella memoria SPIFFS della mia wemos ho creato un file di testo "file.txt" dove ogni tre secondi salvo un dato (per un totale di cinque righe) proveniente da un sensore, in questo formato:

{"AcX": 1625, "AcY": -225, "AcZ": 1235, "time": 3000}
{"AcX": 1625, "AcY": -25, "AcZ": 1556, "time": 6000}
{"AcX": 1625, "AcY": -132, "AcZ": 1789, "time": 9000}
{"AcX": 1625, "AcY": -67, "AcZ": 345, "time": 12000}
{"AcX": 1625, "AcY": -67, "AcZ": 345, "time": 12000}

Dopo aver creato queste cinque righe nel mio file, chiamo una funzione che legge riga per riga e riempie un array con i valori di ogni stringa, tramite un ciclo for. Dopodichè serializzo l'array e lo invio al mio topic mqtt

void mqtt_publish(){
  //Open and read the file
  File file = LittleFS.open("/file.txt", "r");
  if(!file){
    Serial.println("file open failed");
  } //Serial.println("------ Reading ------");
  //Create an empty array
  JsonArray arr = doc.to<JsonArray>();
  for (int i=0; i<=5; i++){
    String s = file.readStringUntil('\n');
    JsonObject obj = doc.createNestedObject();
    doc[i].add(serialized(s));
  }
  char sendread[MQTT_BUFFER];
  serializeJsonPretty(doc, sendread);
  int ret = client.publish("esp8266/JSON", sendread);

  file.close();
}

Tuttavia l'output del monitor seriale è questo. L'array è creato e viene riempito con 5 oggetti, però vuoti.

12:47:54.208 -> Message arrived in topic: esp8266/JSON
12:47:54.208 -> Message:[
12:47:54.208 ->   {},
12:47:54.208 ->   {},
12:47:54.208 ->   {},
12:47:54.208 ->   {},
12:47:54.208 ->   {},
12:47:54.208 ->   {}
12:47:54.208 -> ]

Non so cosa sto sbagliando nella funzione mqtt_publish().
Grazie mille a tutti per l'aiuto.

final2.ino (1.57 KB)

functions.h (5.13 KB)

library.h (295 Bytes)

Così ad occhio direi che non stai serializzando correttamente il tuo json. Non mi convince il for.
Prova ad aggiungere un

serializeJsonPretty(doc, Serial);

così vedi sul monitor seriale il risultato.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.