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)