Gestire un modulo relè con ESP-01 tramite l’assistente vocale Google Home, adoperando il servizio MQTT e IFTTT
In qualche articolo fa abbiamo visto come programmare una ESP-01 e creato un interruttore WiFi con IFTTT; oggi adopereremo le nostre conoscenze per utilizzare un modulo relè pensato per la ESP-01 e gestirlo tramite web browser o utilizzando Google Home. In poche parole, impareremo ad utilizzare questo modulo relè con ESP-01 sia in rete locale che da remoto.
Progetto
Come anticipato, ci serviremo di un modulo relè già pronto e predisposto per la ESP-01, configurandolo per sfruttare la rete WiFi di casa e gestirlo tramite il web browser da un’appositiva pagina web oppure utilizzando l’assistente vocale Google Home. Creeremo due progetti, uno sfruttando il codice che avevamo realizzato per l’Interruttore WiFi, l’altro adoperando la libreria Adafruit_MQTT_Library-master per chiedere, tramite IFTTT, l’intervento dell’assistente di Google. In entrambi i casi, sfrutteremo la connessione WiFi di cui è dotata la scheda programmabile basata su ESP8266, con la sola differenza che nel secondo programma lo faremo inviando una richiesta creando due applet differenti, una per l’attivazione ed una per la disattivazione del relè.
Componenti & Collegamenti
Per questi due progetti avremo bisogno solo del modulo relè e della ESP-01, preventivando che dobbiamo adoperare l’adattatore USB per caricare il codice sulla dev-board; per capire come fare, vi invitiamo a dare un’occhiata a questo articolo. Il modulo di cui parliamo è molto piccolo, infatti misura complessivamente 35 x 25 x 17 mm. Questo modulo lavora con una tensione di 5V, erogabile tramite i due pin posti appena accanto all’alloggio per la ESP-01. Il relè posto nel modulo opera anche esso con i 5V e possiede una capacità di carico di 250V in CA e 10A. Possiamo scegliere se adoperare l’interruttore con il NO (normalmente aperto) o il NC (normalmente chiuso), utilizzando l’apposita morsettiera costituita da 3 viti, ricordandoci che quella centrale è il comune (COM).
Sul modulo è saldato un led di colore blu che si accende e si spegne secondo la posizione dell’elettromagnete, mentre di fianco ad esso troviamo il pulsante di Reset. A tenere separato il circuito di carico da quello di potenza, troviamo nel modello in esame, un fotoaccoppiatore Sharp PC817. Esistono comunque diverse versioni, anche dotate di 4 relè, ma la programmazione di base resta comunque la medesima.
Modulo relè con ESP-01 su Amazon: https://amzn.to/35xuOjq
Modulo relè con ESP-01 su Aliexpress: https://s.click.aliexpress.com/e/_ATeT1Z
1. Codice tramite Web Browser
Il primo codice l’ conosciamo molto bene. Ci collegheremo tramite protocollo HTTP ad una pagina web a cui abbiamo deciso di dare il nome http://relay.local/ che abbiamo creato grazie alla libreria mDNS. Rispetto al progetto adoperato per il Wemos non cambia molto: solo il pin digitale D2 diventa 0. Questo perché dobbiamo caricare il codice scegliendo dal menu Strumenti la Scheda: Generic ESP8266 Module.
pinMode(0,OUTPUT); // Direzione del pin 0 digitalWrite(0,LOW); // Disponiamo come spento il relè
Anche quando andiamo a variare lo stato del relè, ricordiamoci di cambiare il pin digitale D2 in 0.
int stato = LOW; if (quero.indexOf("/RELAY=ON") != -1) { digitalWrite(0, HIGH); stato = HIGH; } if (quero.indexOf("/RELAY=OFF") != -1) { digitalWrite(0, LOW); stato = LOW; }
Ad ogni modo, vi lasciamo lo sketch già modificato a questo LINK. Una volta caricato lo sketch, se tutto è stato eseguito correttamente, vi apparirà all’URL sopra indicato una pagina con cui attivare o disattivare il modulo.
2. Codice tramite Google Home
Il secondo codice è quello che richiede un maggiore approfondimento; partiamo col dire che gran parte di esso proviene da uno degli esempi contenuti nella libreria Adafruit_MQTT_Library-master (LINK). Lo sketch di esempio è il mqtt_2sub_esp8266.ino a cui apporteremo solo qualche modifica per permettere al modulo relè di comunicare con il servizio IFTTT. Prima però di spiegare il codice, andiamo sul sito https://io.adafruit.com/ e logghiamoci.
Una volta effettuato il LogIn, andiamo su Feeds, poi sul pulsante Action e dal menu a tenda selezioniamo la voce Create a New Feed, diamo un nome al nostro Feed (nel nostro caso è Scheda) e poi clicchiamo su Create.
Ora muoviamoci sul sito IFTTT per creare due applet, che ci serviranno per attivare e disattivare il relè. Ricordiamo, inoltre, che il servizio IFTTT è gratuito fino alla terza applet. Una volta digitato l’URL https://ifttt.com/ effettuiamo il LogIn e clicchiamo sul pulsante Create per creare una nuova applet.
Clicchiamo su If This e cerchiamo dalla apposita barra “Google Assistant” poi selezioniamo la voce che apparirà.
Verranno mostrate quattro opzioni, ma quella che serve a noi è “Say a simple phrase“.
Compila il form inserendo la frase che pronunceremo, la frase di risposta di Google e la lingua. Poi facciamo click su Create trigger.
Torniamo sulla pagina dell’applet e scegliamo Then That, poi cerchiamo e selezioniamo la voce Adafruit.
La pagina che si apre mostrerà una sola scelta, denominata Send data to Adafruit IO.
Il passo successivo sarà compilare il form selezionando il feed che abbiamo creato prima e in Data to save scrivete ON.
Ripetiamo la procedura per creare l’applet per la disattivazione del modulo relè, cambiando la frase chiave nel form di Google Assistant da Attiva relè a Disattiva relè e scrivere OFF in Data to save del form di Adafruit. Otterremo due applet come in foto.
Passiamo ora al codice, scaricabile a questo LINK. Iniziamo includendo le librerie necessarie alla connessione WiFi e alla connessione ai servizi Adafruit che ci permetteranno di usare IFTTT. Definiamo poi il pin digitale che useremo (il pin 0 nel nostro caso), poi scriviamo il nome della nostra rete WiFi e la relativa password.
#include <ESP8266WiFi.h> #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" #define LED 0 #define WLAN_SSID "nome_wifi" #define WLAN_PASS "password"
Definiamo poi i parametri per connetterci al sevizio MQTT di Adafruit specificando il server, la porta 1883, username e la API-Key, ricavabili dalla dashboard del profilo utente del sito https://io.adafruit.com/ cliccando sulla voce in alto a destra Adafruit IO Key.
#define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_USERNAME "nome-utente" #define AIO_KEY "aiokey-ioadafruit"
Passiamo poi alla connessione al servizio di Adafruit e creiamo un evento che andrà ad interagire con il nostro feed Scheda che abbiamo creato precedentemente. URL del feed è ottenibile dalla pagina Feeds del sito IO Adafruit, cliccando sul nome del feed creato.
WiFiClient client; Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_USERNAME, AIO_KEY); Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/scheda");
Saltiamo ora alla parte che ci interessa maggiormente. Nel VOID LOOP, una volta che la connessione MQTT andrà a buon fine, il client connesso richiederà la variazione dello stato del pin 0, attivando o disattivando il relè e registrando la variazione di stato sul feed Scheda. Ogni variazione viene registrata e riportata su una lista eventi, consultabile dall’apposita pagina dei Feeds.
Adafruit_MQTT_Subscribe *subscription; while ((subscription = mqtt.readSubscription(5000))) { if (subscription == &onoffbutton) { Serial.print(F("On-Off button: ")); Serial.println((char *)onoffbutton.lastread); digitalWrite(LED, (int)onoffbutton.lastread); if (strcmp((char *)onoffbutton.lastread, "ON")) { digitalWrite(LED, HIGH); } if (strcmp((char *)onoffbutton.lastread, "OFF")) { digitalWrite(LED, LOW); }
Ricordatevi di scegliere dal menu Strumenti della IDE di Arduino la scheda Generic ESP8266 Module e caricate lo sketch. Fissate poi la ESP-01 sul modulo e date corrente per attivarla. Non resta che pronunciare una delle frasi scelte all’assistente di Google e vedrete il vostro modulo relè attivarsi o disattivarsi.