Salve, sto cercando da giorni insieme a dei colleghi universitari il modo per caricare dei dati online usando il modulo ESP8266-01 su server o foglio di calcolo (ad esempio Google Spreadsheet).
Ho trovato numerose soluzioni online ma nessuna garantisce una sufficiente velocità di upload, poichè ho necessità di un'acquisizione di circa 100 campioni al secondo.
Pensate ci siano modi per risolvere questa problematica?
Avevo alternativamente pensato di acquisire i dati su una scheda SD e successivamente effettuare l'upload del file salvato. Tuttavia riguardo quest'ultima opzione non sono stato in grado di capire come caricare un File su un server (Dominio gratuito o Google drive).
Può essere una soluzione più fattibile?
Si certo che c'è modo.
A tempo perso sto sviluppando una libreria che consente di farlo sfruttando le API messe a disposizione da Google. È ancora da completare e debuggare, ma funzionante.
La trovi qui, ma non ricordo se ho fatto il commit delle ultime modifiche. Più tardi verifico.
Edit:
Ho letto dopo che cerchi per esp-01. Se intendi il modulo in aggiunta ad un altro micro, la libreria non credo vada bene o comunque è da testare.
100 al secondo per circa 30 secondo ad acquisizione. L'invio dei dati live non è strettamente necessario, può bastarmi anche l'invio post acquisizione...però con il semplice invio con l'ESP ho notato che il tempo per ogni campione è molto alto in quanto si attende la conferma della ricezione del dato rendendo eccessivamente lungo l'invio di un numero cosi elevato di dati.
Utilizzare il protocollo FTP come funziona? mi genera un server sull'ESP o posso inviare comunque dati ad una pagina web accessibile poi da remoto? Mi scuso se faccio osservazioni banali ma non ho una grande esperienza riguardo comunicazioni WiFi e protocolli vari.
Edit:
Ho letto dopo che cerchi per esp-01. Se intendi il modulo in aggiunta ad un altro micro, la libreria non credo vada bene o comunque è da testare.
Riguardo il discorso sull'ESP-01, nel caso scegliessi di utilizzare l'ESP nodeMCU con micro integrato pensi ci sia la possibilità di utilizzarlo come slave solo per inviare i dati e continuare ad utilizzare il mega come controllore principale? o c'è la necessità di utilizzarlo in autonomia?
FTP è un protocollo che permette di inviare file, ma questo implica che ti devi fare da client ed inviare i file su un server remoto.
Se hai uno spazio web di tua proprietà potrebbe essere la strada più semplice.
Per quanto riguarda l'invio a Google Drive è teoricamente possibile anche con ESP-01 nel momento in cui la libreria che lo gestisce lo rende disponibile come una classe Client generica, ma come detto mai provato.
Non ho simpatia per quei moduli.. non vedo il senso di aggiungere un ulteriore microcontrollore solo per la connettività (tra l'altro di solito molto più potente di quello a cui lo si abbina).
Molto meglio partire fin da subito solo con ESP8266 con una delle tante board di sviluppo (NodeMCU, Wemos etcetc)
Ma se hai bisogno di prestazioni e soprattutto la possibilità di eseguire più task in parallelo, la scelta più saggia sarebbe un ESP32
@stefanops ho aggiornato il repository con le ultime modifiche e qualche esempio funzionante e testato anche su ESP8266.
Se vuoi provare questo approccio usando le API di Google fammi sapere che ti do due dritte per configurare correttamente le credenziali necessarie per "abilitare" l'ESP.
Ciao, si stavo vedendo in questi giorni proprio la libreria che mi hai linkato e la proverò allora con l'esp8266, in alternativa dovrei entrare in possesso di una ESP32 nodeMCU, credi possa essere meglio per questo lavoro?
@stefanops l'ESP32 è un gran pezzo di "silicio" ma non è tanto una questione di "specifiche" o prestazioni.
100 acquisizioni al secondo le fai tranquillamente anche con il Mega (di che tipo? analogiche? sensore digitale?), ma l'Arduino core for the ESP32 è basato sul kernel FreeRTOS che ti consente di eseguire più task in parallelo eventualmente assegnandoli al primo core o al secondo (il NodeMCU dovrebbe montare un modulo ESP32 dual-core). In realtà è meglio evitare di interferire con il core 0 dove gira tutto lo stack WiFi, e lasciare tutti i task "utente" sul core 1 come è di default (la funzione loop() di Arduino infatti non è altro che un task come un altro).
Tieni conto che l'upload comunque non è velocissimo anche con l'ESP32, tra tempo di connessione con il server sicuro, lettura del file dalla memoria e upload vero e proprio per completare un file da 1 Megabyte ci voglio 6/7 secondi e anche più. In teoria dovrebbe essere possibile ottenere risultati migliori, ma non ci sono ancora riuscito (ci sono anche diverse issues aperte nel repository github Espressif a tal proposito, credo sia un limite dell'implementazione del client Arduino).
Sto provando un esempio dove faccio uso di un task distinto come dicevo, più tardi metto tutto online.
Ho dato un'occhiata alla prima pagina del repository, mi sembra un buon inizio.
Il link a pipedream è errato.
Purtroppo si dipende da un servizio esterno che oggi è gratuito ma domani potrebbe cambiare idea. Ma non c'è niente di meglio, credo.
Il NodeMCU è un ESP8266 con tutti i piedini esposti, non un ESP32.
Probabilmente mi sono dimenticato di condividere il workflow pipedream come pubblico.
Il link di redirect ad autorizzazione avvenuta purtroppo deve essere un dominio di primo livello. Ho fatto delle prove anche con una semplice paginetta php su un sito web non mio ma di cui ho accesso però non mi sembrava il caso di metterlo su GitHub
Da li la soluzione pipedream che è vero ti espone al rischio che un domani non sia più disponibile.
E' tutto ancora molto "beta", come sempre ogni segnalazione di bug e/o suggerimento è sempre il benvenuto.
Grazie, @zoomx , ho corretto il readme. Per quanto riguarda il NodeMCU esiste anche la versione con ESP32, la trovi con NodeMCU-32S, ma alla fine è solo un nome come un altro
So che c'è anche la NodeMCU con ESP32 ma siccome quella con ESP8266 c'è da anni ed era l'unica penso che ci si riferisca sempre alla versione con ESP8266.
Buongiorno, volevo aggiornarti sull'utilizzo che siamo riusciti a fare della libreria e ringraziarti per averla condivisa con tutti noi. Siamo riusciti ad inviare file di piccole dimensioni su un google drive...con un po' di difficoltà ma siamo comunque riusciti.
Adesso ci sorge un problema, pensi sia possibile mandare file di 300/400 righe di testo (righe molto brevi con tag e risultati)? Finora siamo riusciti ad inviare solamente file di circa 20 righe mentre se aumentiamo le dimensioni si blocca tutta la trasmissione. Sapresti aiutarci a tal proposito?
Con quale dispositivo? Purtroppo in upload le velocità sono piuttosto basse... anche l'ESP32, che in teoria può raggiungere buone velocità, nell'implementazione per il framework Arduino è un po' carente.
Una possibile soluzione con ESP32 è delegare l'invio ad un task parallelo in modo da non interrompere l'esecuzione del resto. Con ESP8266 invece si può solo attendere che finisca.
Puoi farmi un esempio del tipo di dati che devi inviare?
Anche solo una decina di righe, poi faccio un copia e incolla.