Questo progetto, sicuramente migliorabile e quindi in continua evoluzione, consente di controllare un Led, o un servomotore o un qualunque dispositivo di output collegato ad un Nodemcu, attraverso uno smartphone posto anche a migliaia di km di distanza.
Questo tutorial è ispirato a quello di Engr Fahad:
con il rispettivo video: https://www.youtube.com/watch?v=7rCZB7tN4P8
ed il tutorial di Thatiotguy:
https://www.hackster.io/thatiotguy/send-data-from-nodemcu-to-google-sheets-10b48f
ed il rispettivo video: https://youtu.be/GOiLbs5Sidc?si=jW-Zrh0pTZ_-wWIT
Nello specifico l'applicazione che sarà creata con App Inventor consente di inviare un valore nella cella D2 di un foglio di Google Drive ed il Nodemcu interroga lo stesso foglio prelevando il valore della cella D2 per pilotare i dispositivi ad esso collegati. Il foglio di Google funge da tramite tra lo smartphone ed il Nodemcu.
Iniziamo con il creare il foglio di Google Drive
Aprire Drive e selezionare Nuovo
quindi Fogli i Google e Foglio di lavoro vuoto
Rinominare il foglio e compilare le celle in questo modo (comunque a proprio piacere)
Selezionare l'identificativo del foglio ed incollarlo in una qualsiasi cella libera sulla parte destra del foglio.
Occorre adesso rendere il foglio condivisibile con chiunque abbia il link
Adesso creiamo un url che legga il contenuto della cella D2 e produca un file del formato csv (leggibile anche dall'applicazione windows Blocco Note. In questo file risulterà il contenuto della cella racchiuso tra "..". Nel caso specifico "0".
Partiamo dal seguente url, da copiare, incollare in una cella del foglio di google e nel quale inseriamo, al posto degli **************** l'identificativo del nostro foglio
Nell'url si fa riferimetno al Foglio1 ed alla cella D2, che possono essere variati in base alle necessità.
Creato l'url possiamo inserirlo, con le credenziali del WiFi nel seguente codice, da caricare nel NODEMCU attraverso l'IDE di Arduino
Caricato il codice, si può tornare nel foglio di Google e variare manualmente il numero della cella D2 modificando il contenuto da 0 ad 1 per osservare il led integrato della scheda, accendersi e spegnersi. La logica del led integrato (corrispondente al 2) è invertita quindi inserendo nella cella D2 il numero 0 il led si accende mentre con 1 si spegne.
Controllare anche il monitor seriale dell'IDE per verificare che riporti correttamente i valori della cella D2.
Il codice però non legge solo i valori 0 ed 1, ma qualsiasi numero inserito nella cella D2, che eventualmente può essere utilizzato per muovere un servomotore o variare il PWM di un pin digitale.
La seconda parte del tutorial intende invece creare un nuovo url che piuttosto che leggere il contenuto della cella D2, come quello creato in precedenza, può inserire dei valori nella cella D2.
Occorre aprire il foglio di Google su cui stiamo già lavorando, andare in estensioni ed eseguire Apps Script, incollando il seguente codice al posto delle righe da 1 a 4, per poi fare il Deployment.
Selezionando Applicazione web dalla ruota dentata
Compilare quindi i campi mostrati ed eseguire il Deployment
Autorizzare l'accesso e nel successivo box selezionare il proprio profilo google.
Selezionare Advanced
e quindi Allow
Copiare l'url appena ottenuto ed incollarlo in una delle celle del foglio di google, per averlo a portata di mouse.
All'url appena ottenuto https://script.google.com/macros/s/*******************************************/exec
occorre aggiungere ?valore=Ciao
ottenendo complessivamente un link del tipo:
da incollare al solito in una cella del foglio di Google per aver sempre a portata di mouse.
Adesso si può verificare il funzionamento dell'url incollandolo in una pagina del browser. Se tutto va bene nella cella D2 del foglio dovrebbe comparire la parola Ciao.
Nello stesso url, al posto di Ciao inserire il valore 0 per accendere il led; 1 per spegnerlo.
Tale url avrà determinerà loi stesso risultato se inserito sullo smartphone o altro dispositovo collegato ad internet.
L'ultima parte del progetto prevede la realizzazione con App Inventor di un'applicazione per lo smartphone Android per inviare il valore 0 o 1 alla cella D2 e quindi pilotare l'accensione del led.
Accedere al link: https://appinventor.mit.edu/
e quindi su Create Apps
ed accedere con il proprio profilo Gmail.
Selezionare Nuovo progetto ed assegrare il nome "PilotaLedRemoto"
Trascinare etichetta sulllo smartphone
Selezionare quindi Etichetta 1 e compilare i campi come indicato nella foto.
Trascinare quindi Pulsante sullo smartphone
e quindi selezionare Pulsante 1 compilando i rispettivi campi.
Trascinare VisualizzatoreWEB sullo smartphone e modificare i relativi campi.
Inserendo come Url il solito link con terminandolo con ?valore=0
Con le stesse modalità inserire un secondo pulsante ed un altro visualizzatore web con lo stesso link che deve terminare con ?valore=0
e trascinare un'Etichetta infondo allo smartphone
personalizzandola come segue:
Passare quindi alla modalità Blocchi
Incastrare quindi i blocchi in questo modo prelevandoli dai rispettivi menù.
Terminata la progettazione dell'app possiamo avviare un simulatore per verificare il suo corretto funzionamento.
Andare dunque in Connetti e quindi AI Companion
Ottenendo un QR-Code da inquadrare con l'app MIT AI2 Companion precedentemente installata nello smartphone. Dopo qualche secondo comparirà l'applicazione da noi progettata, che si aggiornerà ad ogni modifica del progetto. Premendo il primo pulsante il Led del Nodemcu dovrebbe accendersi, con l'altro pulsante dovrebbe spegnersi. Una volta verificata la funzionalità dell'app. si può procedere con la definitiva installazione selezionando Android App (.apk) dal menù Compila ed attendere che copaia il Qr-Code ed inquadrarlo dall'applicazione MIT AI2 Companion precedentemente installata sullo smartphone.
Durante l'installazione della nostra app appariranno numerosi avvisi di sicurezza, da superare seguendo i seguenti passaggi.
Terminata l'installazione, aprire l'app e premere su Accendi il Led o Spegni il Led per vedere, sul Nodemcu, accendersi i spegere il led integrato.
Il progetto appena realizzato ha un grave difetto. Non si ha la certezza che il comando inviato dallo smartphone al foglio di Google sortisca sul Nodemcu l'effetto desiderato. Per evitare questa incertezza possiamo fare in modo che quando il Nodemcu esegue il comando contenuto nella cella D2, può scrivere nello stesso foglio "Led acceso" o "Led spento" nella cella D3 così che lo smartphone possa leggere il contenuto di quella cella e confermare l'effettiva esecuzione del comando.
Andiamo quindi a generare, come abbiamo già fatto in precedenza con Apps Script, un url capace di inserire un dato (una stringa nel nostro caso) nella cella D3.
Andiamo nuovamente nel foglio di Google ed Estensioni ed Apps Script e sostituiamo nel seguente codice D3 al posto di D2. l'url generato, con la solita aggiunta di ?valore=
lo andiamo nuovamente ad incollare nel foglio di Google per un successivo utilizzo.
Procediamo col generare l'url per leggere il contenuto della cella D3.
Sostituire l'identificativo del foglio al posto degli **************
anche questo da incollare in una cella del foglio di Google.
Sostituiamo il codice da caricare nel Nodemcu tramite Arduino IDE, inserendo le credenziali del wifi ed i link per leggere la cella D2 ed inserire un valore nella cella D3.
Modifichiamo l'App tornando ad App Inventor.
A questo punto approfittiamo per apportare alcune modifiche che renderanno più efficiente l'app. in particolare sarà il caso di rinominare tutti gli strumenti ed inserendo, sempre nel lato progettazione dell'app, altri due strumenti (invisibili) l'orologio, da prelevare dal menù Sensori e che dovrà essere rinominato OrologioLettura e Web da prelevare dal menù Connettività, che prenderà automaticamente il nome Web1.
Per quanto riguarda il componente Web1 occorre inserire l'url generato che consente di leggere la cella D3.
Invece per quanto riguardo l'orologio, occorre inserire un IntervalloTimeri di 5 secondi (5000 ms) che sono necessari per inviare il dato al foglio, attendere la lettura del dato dall'ESP32 e l'invio di quest'ultimo del riscontro al foglio.
Passiamo adesso al lato blocchi eliminando quelli precedenti e sostituendoli con i seguenti:
Nello specifico occorre creare due variabili denominandole stringa e led, per salvare il valore 0 o 1 proveniente dalla pressione dei pulsanti.
poi occorre creare una procedura di nominandola creazStringa inserendo l'URL per inserire il dato in D2,
https://script.google.com/macros/s/*****************/exec?valore=
assicurandosi che termini con ?exec?valore=
a cui sarà unito il contenuto della variabile stringa.
Adesso si possono attivare le funzionalità dei pulsanti, che inseriscono i valori 0 ed 1 nella variabile led e poi attivano la procedura creazStringa.
Al termine si può avviare la simulazione per verificare che l'app piloti correttamente il led e che visualizzi il riscontro inviato dal Nodemcu.
Volendo eliminare le " e gli _ dal testo "Led_acceso" si può integrare l'ultimo blocco con il seguente, che ritaglia la stringa che elimina il primo e l'ultimo carattere e poi sostituisce "_" con un semplice spazio " ".
Avendo verificato che tutto funziona, si può integrare il progetto con il controllo, oltre che di un led, anche di un servomotore 180° collegato al pin 12, da pilotare attraverso uno slider da inserire nell'app insieme ad una casella di testo, che visualizza il valore dello slider ma può anche contenere un numero inserito da tastiera, e di un pulsante che invii il dato contenuto.
Piuttosto che inviare separatamente due valori, uno per il led (0 o 1) ed un secondo valore per il servo (da 0 a 180), tenuto conto che ogni invio impiega circa 3 secondi per essere attuato ed altrettanto per ottenere il riscontro, si può riunire in un unica stringa da inviare il valore 0 o 1 affinché occupi la posizione 1 della stringa e l'angolo del servo affinché occupi le posizioni da 2 a 5. Ci sono però due ostacoli, il valore 0 all'inizio della stringa, quando occupa la cella D2 del foglio, non appare e quindi la sequenza di 4 numeri diventa di 3. Anche il valore dell'angolo, ad esempio 50 gradi occupa solo 2 delle 3 posizioni a lui assegnate. Per aggirare i due ostacoli si può usare i valori 1 e 2 al posto di 0 e 1 ed i valori da 100 a 280 per impostare i servo da 0 a 180. In pratica di somma al valore del led il numero 1 ed al valore dell'angolo 100, prima che la stringa venda inviata al foglio. E' inteso che il Nodemcu, quando andrà a prelevare la stringa dal foglio dovrà ridurre di 1 il primo numero, per pilotare il led e di 100 i successivi numero, per pilotare il servo.
Questo il codice per il Nodemcu:
Questi invece gli elementi per l'app:
Di questi occorre impostare lo slider per valori compresi tra 0 e 180 ed il Web1 con l'url per leggere la cella D3.
Con le stesse modalità utilizzate per il led e per il servo1, si possono aggiungere ulteriori servomotori o dispositivi, mettendo in coda alla stringa i valori necessari per pilotarli.