Raccogliere ed elaborare i dati su Google Drive con Arduino MKR Wi-Fi 1010, ESP8266 e ESP32!

Condividi questo articolo :

Prima di cominciare a leggere ti consigliamo di dare un’occhiata a questo https://www.filoconnesso.it/downloads/fcgf-it/ : abbiamo sviluppato una libreria che ti permette in 5 minuti di fare quello che c’è scritto nella guida e di usare tutti i sensori e valori che preferisci, più velocemente e più semplicemente rispetto al metodo mostrato in questa pagina! Grazie come sempre per il supporto!

Condividi citando sempre la fonte, creato con ❤️️ da Filo Connesso!

CAPITOLO 1 | Introduzione

Oramai abbiamo capito che il mondo sta andando verso la visione dell’only cloud e che i dati trasmessi dalla maggior parte dei dispositivi vengono depositati su server sparsi nel mondo! Fino a qualche tempo fa le schede di memoria erano quelle usate più di frequente per immagazzinare dati dai sensori di Arduino e schede simili, successivamente l’evoluzione dei micro controllori ha permesso addirittura di effettuare salvataggi nella memoria interna e ora è tempo di evolverci e portare le misurazioni dei nostri sensori su uno dei servizi cloud a disposizione in rete. Nel nostro caso abbiamo usato Google Drive e la nostra scelta è ricaduta su questo servizio poiché gli strumenti messi a disposizione dal caro Big G permettono di elaborare i dati trasmessi in modo veloce e semplice.

Abbiamo deciso di strutturare questa guida in modo che possa essere seguita dai possessori della maggior parte dei micro controllori in commercio che permettono la connessione ad internet tramite il Wi-Fi, di conseguenza è compatibile con Arduino, ESP8266 e ESP32 😁

Come detto in precedenza sfrutteremo la connessione Wi-Fi della nostra scheda con la quale faremo una richiesta ogni minuto ad un Form Google (salvato sul nostro drive), il quale a sua volta sarà collegato a un foglio di lavoro che conterrà in ordine cronologico le misurazioni di un sensore BME280. Il foglio di lavoro, salvato anch’esso su Google Drive, permetterà successivamente di elaborare i dati ricevuti per operazioni matematiche (es. media delle misurazioni) e addirittura di creare grafici di andamento, molto utili per impaginare relazioni e studi!

CAPITOLO 2 | Che cos’è Google Drive ?

Sappiamo che per molti di voi questa domanda risulterà al quanto stupida, però ci teniamo particolarmente a illustrare tutte le procedure di questa guida in modo chiaro e semplice, spendendo qualche minuto per capire di cosa stiamo parlando! Google Drive è un servizio di Google (gratuito con la versione base da 15GB) che permette di salvare i propri file online, il servizio è ovviamente protetto da password e per usarlo abbiamo bisogno di un account Google registrabile da qui e successivamente potremmo accedere al nostro drive online da qui. La particolarità di Google Drive è l’integrazione di un pacchetto office in grado di creare e modificare file come .doc e .xls, direttamente online, senza installare nulla sul proprio computer e dando la possibilità di accedervi da qualsiasi dispositivo, quindi anche in mobilità!

Anche noi della redazione utilizziamo Google Drive per condividere diversi materiali con la nostra community!

CAPITOLO 3 | Creare e preparare il modulo di raccolta dati

Uno degli strumenti più utili, integrati con il drive di Google, è senza ombra di dubbio Google Moduli! Questa utility permette di creare una pagina di raccolta informazioni con varie tipologie di campi di immissione, risultando utile per creare sondaggi e quiz, ma nel nostro caso lo utilizzeremo per raccogliere dati dal nostro sensore BME280. Per creare un form possiamo accedere al nostro Google Drive e sulla sinistra della pagina facciamo click su Nuovo e successivamente su Moduli Google :

Si aprirà una nuova pagina che ci permetterà di andare a modificare il nostro nuovo Form :

Per prima cosa annotiamo l’ID del nostro modulo che troviamo nella barra degli indirizzi, ci servirà più tardi :

Diamo un nome al nostro modulo, cliccando su “Modulo senza titolo”. Per comodità l’abbiamo chiamato “Raccolta dati BME280” :

Creiamo due campi con il pulsante “+” e chiamiamoli Valore Umidità e Valore Temperatura. Il bello di Google Moduli è che ci suggerisce in automatico la tipologia di campo in base al titolo che digiteremo 😍 :

A questo punto dobbiamo prelevare gli ID dei due campi appena creati e per farlo dovremo fare qualche operazione che può sembrare elaborata ma in realtà è molto semplice. Facciamo click su Anteprima (pulsante con l’occhio) per visualizzare il nostro form completo :

Avremo due campi di testo con il suggerimento “La tua risposta” e ognuno di loro ha un ID (codice di identificazione) il quale dobbiamo conoscere per riempire questi campi in modo automatico, tramite una richiesta web (HTTP POST). Facciamo click con il tasto destro e successivamente scegliamo l’opzione Ispeziona se si usa Chrome, o Analizza elemento se si usa FireFox :

Si aprirà una sezione che mostra il codice dell’elemento analizzato, stiamo attenti a identificare l’id dell’elemento che dovrà avere una struttura simile a entry.5830682694 :

Facciamo doppio click sull’id che troviamo nel codice e copiamolo (con il tasto destro) :

Eseguiamo la stessa operazione anche per il secondo campo, nel nostro caso abbiamo questi due ID :

entry.1167534573  //per il campo Umidità
entry.1404134045  //per il campo Temperatura

I vostri ID saranno sicuramente diversi, annotateli da qualche parte, ci serviranno tra poco!

CAPITOLO 4 | Il codice

Ora passiamo a programmare la scheda e per facilitarvi le cose abbiamo preparato un esempio molto semplice da configurare che vi permetterà di fare richieste HTTP sin da subito al vostro modulo di Google, indifferentemente dalla scheda che state utilizzando. Potete scaricare il pacchetto qui.

Prima di iniziare con la personalizzazione del codice installate le librerie necessarie per far funzionare il sensore BME280 dal Gestore librerie dell’ide di Arduino :

Facendo una prima compilazione del codice andate a verificare che tutte le librerie di supporto per il Wi-Fi siano installate per la vostra scheda. In questa guida stiamo usando una ESP32 DevKit v1, se non ci sono errori saremo pronti a personalizzare il codice :

In caso contrario verificate le librerie mancanti e installatele.

Passiamo a collegare il sensore alla scheda e nella prima parte del codice trovate una guida per i collegamenti :

Successivamente andate a inserire i dati della vostra connessione Wi-Fi utilizzando le variabili nome_wifi e password_wifi :

Possiamo personalizzare l’intervallo di tempo da un invio di dati e l’altro con la variabile pausa_minuti (1 minuto di default):

Infine, andate a personalizzare le variabili stringa con i dati annotati prima, attinenti al vostro modulo Google :

Di conseguenza, nel nostro codice avremo questi dati, che come specifichiamo sempre, saranno diversi dai vostri :

1DXxpLdmH1tR7K896bStYPSBy0ZVNvzQsT8JbuhFnZC4
entry.1167534573
entry.1404134045

Se hai un ESP01 nel setup() dovrai commentare le righe giuste per l’inizializzazione dell’I2C :

Modificare in questo modo :

Fatte le modifiche opportune possiamo caricare il programma per fare un primo test del codice e controllare che i dati vengano spediti al nostro modulo in modo corretto, quindi apri il monitor seriale e attendi il caricamento dello sketch :

Dopo 5 minuti sono state inviate 6 letture al nostro Modulo e per verificare che tutto sia stato trasmesso correttamente possiamo controllare le risposte :

Come si può notare ad un certo punto il modulo comincerà a trattare i dati ricevuti racchiudendoli in percentuali, questo accade poiché Google Moduli è uno strumento per creare sondaggi, ma nel prossimo capitolo vediamo come elaborare questi dati in maniera sensata!

NOTA BENE : Con Arduino MKR Wi-Fi 1010 potresti avere la necessità di aggiornare il firmware e aggiungere i certificati per “google.com” e “docs.google.com”, per fare questo puoi seguire questa guida.

CAPITOLO 5 | Elaborare i dati raccolti

Dopo un’intera giornata a raccogliere dati, il nostro sensore ha eseguito più di 1000 letture, ma cosi come ci vengono mostrati nella dashboard del modulo sono pressoché inutilizzabile e poco chiare, quindi è ora di passare il tutto su un Foglio di lavoro :

In alto a destra del nostro form troviamo il pulsante “Creazione foglio di lavoro” :

Clicchiamo sul pulsante e creiamo un nuovo foglio di lavoro :

Da notare che il foglio di lavoro contiene già i dati cronologici (data e ora) dell’inserimento dei vari valori e in più continuerà a raccogliere le misurazioni automaticamente dal nostro sensore, senza la necessità di tenere aperto il modulo!

Ovviamente il modulo precedentemente creato, non deve essere eliminato da Google Drive poiché è indispensabile per il corretto funzionamento dell’intero progetto, quindi tenete entrambi i file anche se continueremo a lavorare sul foglio di lavoro da adesso in poi!

a. Media dei delle misurazioni

Un calcolo molto utile potrebbe essere quello di racchiudere tutte le misurazioni per ogni valore (umidità e temperatura) in due singole medie e quindi di conseguenza avere a disposizione due valori puliti e indicativi della temperatura e dell’umidità misurati nel corso del tempo.

Per fare una media spostiamoci nella cella D1 e diamo il titolo “Media Umidità” :

E successivamente facciamo la stessa cosa nella cella E1 per la media temperatura :

Ora si pone un problema legato al segno di separazione decimale che in Italia è la virgola “,” e in altri paesi, invece, è espresso con il punto “.”. Dal nostro sensore come possiamo ben notare ci arriva un valore in decimale che viene separato dal punto, ma per le impostazioni correnti del nostro foglio di lavoro, localizzato in Italia, questo separatore è inutilizzabile. Se vogliamo effettuare operazioni matematiche dovremmo cambiare le impostazioni internazionali dal menu File :

Scegliendo Regno Unito possiamo ovviare al problema degli errori di calcolo :

A questo punto per fare la media di tutti i valori raccolti per quanto riguarda l’umidità, selezioniamo la cella D2 e scriviamo la formula =MEDIA.SE(B2:B;”<>0″), considerando così tutti i valori della colonna B escludendo le celle vuote e il titolo della colonna che risulteranno matematicamente parlando pari a 0 :

Premiamo invio per confermare e andiamo a fare la stessa cosa nella cella E2, in questo caso andando a prendere l’intervallo di valori, contenuti nella colonna C, con la formula =MEDIA.SE(C2:C;”<>0″). Possiamo sfruttare anche il suggerimento automatico, sempre utile per risparmiare tempo 😁 :

Successivamente possiamo aggiustare i valori delle colonne attinenti alle misurazioni in modo tale che vengano riconosciute correttamente come valori numerici, selezionando una colonna per volta (B e C) e impostando il tipo di valore su Numero :

Ottenendo un risultato del genere :

Nel caso in cui i risultati delle media risultino troppo lungi e vogliamo diminuire l’accuratezza del valore decimale di qualche cifra, possiamo avvalerci della funzione apposita :

Avremo cosi, in tempo reale, la media dei valori che verranno raccolti nel corso del tempo dal nostro sensore!

b. Ultima misurazione sempre a portata d’occhio!

Come abbiamo ben notato che nel corso del tempo le misurazioni saranno a migliaia e sarà difficile scorrere tutte le misurazioni fino ad arrivare alla fine per consultare l’ultima misurazione, quindi possiamo creare due celle che ci mostrano l’ultimo valore misurato dal nostro sensore!

Intanto impostiamo dei titoli alle colonne che ospiteranno i valori desiderati :

Andiamo a inserire rispettivamente per l’umidità la formula =INDICE(B2:B;CONTA.VALORI(B2:B)) e per la temperatura la formula =INDICE(C2:C;CONTA.VALORI(C2:C)) avendo un risultato del genere :

In questo caso avremo a disposizione gli utili due valori misurati sempre a portata d’occhio, senza la necessità di scorrere tutta la lista delle misurazioni.

c. Creare grafici di andamento e indicatori a lancetta

Per avere una visione grafica dell’andamento delle misurazioni possiamo creare due grafici che mostrano visivamente la variazione dei dati nel tempo. Per fare questo possiamo selezionare la colonna dei valori che ci interessa elaborare in grafico e facciamo click su inserisci grafico :

Eseguiamo la stessa operazione per i valori della temperatura :

Possiamo aggiungere ai nostri grafici le indicazioni cronologiche in modo da avere un resoconto più dettagliato del tempo trascorso :

Inserendo l’intervallo A2:A :

Avendo per ogni grafico un qualcosa del genere :

Altra cosa molto interessante è trattare i valori singoli, come l’ultima misurazione, in modo tale da creare un vero e proprio “strumento a lancentta”. Selezioniamo per esempio la colonna F, contenente l’ultimo riferito all’umidità :

Creiamo il grafico come abbiamo già fatto precedentemente, tramite il pulsante aggiungi grafico e selezionare il tipo di grafico desiderato, cioè il Grafico a contatore :

Avendo un risultato del genere :

Che dire, le funzioni a disposizione per creare una vera e propria dashboard IOT sono veramente tante e la personalizzazione di tutto il meccanismo è a dir poco infinita, quindi solo la vostra fantasia può aiutarvi a realizzare qualcosa di veramente figo e utile! 🙂 Noi vi abbiamo dato gli strumenti, a voi toccherà fare il resto!

CAPITOLO 6 | Schede testate

Abbiamo testato il corretto funzionamento del codice su varie schede, quelle più comunemente usante, per l’esattezza, qui trovate l’elenco :

  1. Wroom32
  2. ESP32 DevKit V1
  3. NodeMCU (0.9)
  4. Wemos D1 Mini
  5. ESP01
  6. Arduino MKR Wi-Fi 1010

CAPITOLO 7 | Versatilità del codice

Per ora l’esempio è stato strutturato in modo tale che sia utilizzabile per lo scopo mostrato nella guida, tuttavia è modificabile e potrebbero essere aggiunte nuove funzionalità per elaborare più dati e da sensori diversi, ci saranno aggiornamenti a breve!

CAPITOLO 8 | Conclusioni

Il mondo dei servizi connessi è fantastico, come avete visto potete creare un foglio di calcolo che contiene informazioni aggiornate in tempo reale da un sensore collegato in rete. Il firmware che abbiamo realizzato è di dominio pubblico (open source) , le librerie (BME280 e Wi-Fi) non sono di nostra proprietà ma l’implementazione del codice è stata realizzata interamente da noi, quindi chiediamo massimo rispetto per il lavoro che abbiamo svolto! Per “inscatolare” per bene questa guida e il codice che fa girare l’esempio, abbiamo impiegato del tempo e delle risorse! Condividi e modifica questo materiale rispettando il nostro lavoro, quindi ti chiediamo di mantenere i riferimenti del creatore, aggiungendo ovviamente il tuo nome agli update e magari usa i commenti per condividerli con la nostra community. Condividi citando sempre la fonte! 😁

CAPITPOLO 9 | Vuoi supportare il nostro lavoro ?

  1. Puoi iscriverti al nostro canale YouTube e inviare amici interessati a iscriversi, la crescita del nostro progetto ci aiuta molto e ci incoraggia a portare contenuti interessanti e sempre nuovi! https://www.youtube.com/channel/UCMpOBM7teXlUs51r_rmVeoA
  2. Se acquisti su Amazon puoi acquistare ciò che desideri tramite il nostro banner di affiliazione che trovi in fondo a questa pagina a sinistra! L’acquisto per te non comporta alzamenti di prezzo ma Amazon riconosce a noi una piccola percentuale del tuo acquisto 🙂

Che te ne pare di questa guida ? Accettiamo suggerimenti, richieste di aiuto e consigli, quindi usa i commenti! ❤️️

Condividi questo articolo :

Redazione Filo Connesso

Redazione Filo Connesso

Siamo un gruppo di ragazzi appassionati di Informatica, elettronica e robotica. Abbiamo creato Filo Connesso per offrire materiale educativo e informativo dedicato ai nostri settori di interesse.

Potrebbero interessarti anche...

12 risposte

  1. Massimo ha detto:

    Ciao, molto interessante e ben spiegato, sto cercando di inserire anche la lettura della pressione ma non mi riesce… suggerimenti?

  2. Massimo ha detto:

    Grazie tutto ok fino all invio di testo (Mirko…) ma non riesco ad inviare i dati da un sensore…non riesco nemmeno a fare funzionare l esempio con dht11.
    non avresti cortesemente un esempio con BME280 compresa misura pressione?

    • Ciao Massimo! intanto vorrei capire se stai usando lo sketch di questa guida o stai utilizzando il toolkit della libreria. Esempi con il bme280 li dobbiamo preparare, però se hai la libreria del bme280 ti basterà solamente inserire nell’array “_values[]” i dati del tuo sensore. Altra domanda riesci comunque ad arrivare al modulo ? i dati arrivano ? se arrivano è solo un problema di inserimento dei dati. Su Telegram cerca “Bar Filo Connesso”, ti aiutiamo li visto che abbiamo la possibilità di scabiare anche foto e capire a che punto sei 🙂

  3. Massimo ha detto:

    Sto esplorando i moduli di google drive, ma non capisco come ridurre la scala (asse y) e andare sotto il valore zero (temperatura invernale) mi potete aiutare?
    vi ringrazio in anticipo

  4. daniele ha detto:

    ciao!!
    volevo chiedere se ci fosse la possibilità di mandare anche dei dati al contrario.
    mi spiego meglio se volessi comandare l’accessione o lo spegnimento di led/relè tramite il modulo google senza dover creare un database o appoggiarmi su qualche altra piattaforma online , è possibile??
    quindi far si che se in una determinata cella ci sia il valore 1 o 0 o on o off il led/relè si accenda o si spenga

  5. Antonio ha detto:

    Salve, complimenti per il progetto e per il sito. Vorrei provare a realizzare questo progetto ma non riesco a trovare l’ID elemento in Google moduli, dopo aver ispezionato. Non trovo nessuna voce che abbia un formato entry.xxxxxx. Come posso risolvere?

    • Ciao Come indicato a inizio articolo abbiamo realizzato una libreria per automatizzare tutto il processo che è indicato nella guida, anzi con gli ultimi aggiornamenti che ha apportato Google al suo servizio moduli il metodo mostrato nella guida è praticamente deprecato. Ti consigliamo di usare la nostra libreria presente su questa pagina https://www.filoconnesso.it/fcgf-it/, come detto il processo è del tutto cambiato e tramite gli strumenti che abbiamo sviluppato il tutto si configura in meno di 5 minuti :-). Un saluto dalla redazione e buona sperimentazione!

  6. Mauro ha detto:

    Holaa.. complimenti, super progetto! Avrei una domanda.. rifacendomi all’esempio da voi proposto, quindi con una colonna dedicata alla data (colonna A), una alla temperatura (colonna B) e una all’umidità (colonna C). Sarebbe possibile impostare lo sketch in modo che all’inizio di ogni giorno (quando scattano le 00:00:00), l’inserimento dei valori riparta dalla riga 2 su tre nuove colonne a destra di quelle del precedente giorno (quindi sulle colonne D, E, F) e così via?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *