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 ESP32, attraverso uno smartphone posto anche a migliaia di km di distanza.
Questo tutorial, che si è avvalso anche dell'intelligenza artificiale per generare parti di codice, è 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 l'ESP32 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 l'ESP32.
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 riferimentno 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 l'ESP32 attraverso l'IDE di Arduino. Nel seguente codice viene pilotato il led collegato alla porta 2, che nel Wemos D1 R32 è quello integrato nella scheda. Ovviamente si può cambiare la porta a proprio piacimento.
Qualora non fossero già presenti le librerie WiFi.h e HTTPVlient.h nell'IDE occorre ricercarli tra le librerie disponibili ed installarle.
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.
Controllare anche il monitor seriale dell'IDE per verificare che riporti correttamente i valori letti 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 link generato per inserire il valore 0 nella cella D2. Quindi dovrà terminare 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=1
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'ESP32 l'effetto desiderato. Per evitare questa incertezza possiamo fare in modo che quando l'ESP32 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 nell'ESP32 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.
Quando si è eseguito l'invio dei dati, si attiva l'attesa dei 5 secondi, attraverso lo strumento Orologio1 ed al termine dell'attesa si esegue lo strumento Web1 per leggere il riscontro contenuto nella cella D3 visualizzandolo nell'etichetta Riscontro.
Al termine si può avviare la simulazione per verificare che l'app piloti correttamente il led e che visualizzi il riscontro inviato dall'ESP32.
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 l'ESP32, 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 l'ESP32:
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.