ESPertino e IFTTT: Un maggiordomo tuttofare con il nostro smartphone

Vi piacerebbe accendere lo scaldabagno di casa con la semplice pressione di un'icona dello smartphone? Oppure, ancora, aprire e chiudere il cancello della propria villetta o spegnere le luci da qualsiasi posto vi troviate, sempre con l'ausilio del cellulare? Tutto questo è possibile grazie all'utilizzo di ESPertino, IFTTT e una Widget dello smart, creata ad hoc per lo scopo.

Introduzione

Ai giorni d'oggi, le applicazioni di domotica se ne contano a migliaia, di tutti i generi. Le possibilità di comandare, a distanza, le utenze domestiche sono, ormai, una realtà ben consolidata. Quella che proponiamo qui può considerarsi un'alternativa interessante focalizzata, soprattutto, all'utilizzo congiunto della scheda ESPertino e IFTTT. Il sistema utilizza anche lo smartphone per inoltrare i comandi, attraverso delle icone create appositamente per lo scopo.

Finalità del sistema

Il progetto che stiamo andando a proporre può rivelarsi utile in mille occasioni. Le sue finalità sono generiche e ogni utente può adattarlo alle proprie esigenze. Il sistema è composto da una unità di comando, rappresentata dal proprio smartphone e da una remota ricevente, formata dalla nostra scheda ESPertino. Tra queste due dà il proprio contributo il servizio di IFTTT. Come si evince dalla figura 1, l'utente ha a disposizione due icone sul telefonino che può utilizzare per attivare o disattivare un carico o un'utenza collegata alla centralina di ricezione. E' importante notare che queste due icone non aprono una APP sullo smartphone  (come, ad esempio, un browser o un pannello di controllo) ma eseguono semplicemente un'Applet, in modo trasparente e invisibile. La loro creazione, infatti, si basa sulle Widgets di IFTTT.

Figura 1: lo schema di principio del sistema proposto

Figura 1: lo schema di principio del sistema proposto

Alcuni utilizzi pratici

Dal momento che il nostro maggiordomo elettronico remoto può pilotare qualunque tipologia di carico, i suoi utilizzi sono, praticamente, infiniti. Tuttavia elenchiamo solo alcune possibilità di applicazioni pratiche:

  • accendere o spegnere lo scaldabagno a distanza;
  • aprire il cancello della propria villetta;
  • attivare o disattivare le luci del giardino o di casa quando si sta per rincasare;
  • accendere la televisione, la radio o le luci a distanza per simulare la propria presenza in casa e far desistere i malintenzionati dal furto;
  • attivare la saracinesca;
  • innescare la pompa per il pescaggio dell'acqua, quando si è lontani;
  • e mille altre idee.

Schema elettrico

La figura 2 mostra il semplice schema elettrico. Esso è formato da:

  • la scheda ESPertino;
  • un diodo Led di segnalazione collegato alla porta GPIO 14, che è quella che fa capo anche al relé che si trova sulla stessa scheda;
  • un buzzer di avviso di commutazione, collegato alla porta GPIO 16;
  • un relé esterno, di potenza, per il pilotaggio di carichi molto robusti, funzionanti anche alla tensione alternata di 230V.
Figura 2: lo schema elettrico del maggiordomo remoto

Figura 2: lo schema elettrico del maggiordomo remoto

Il diodo Led è preceduto da una resistenza di limitazione, il cui valore è calcolato con la legge di Ohm. Il carico di potenza può essere costituito da qualunque attuatore: lampada a neon, a incandescenza, motore, lavatrice, forno, cancello, ecc. Il progettista deve solo dimensionare adeguatamente i dispositivi di commutazione.

Il cablaggio

In figura 3 è possibile osservare il cablaggio del sistema. Se si prevede un'installazione definitiva, si consiglia di allestire il circuito all'interno di una scatola di plastica, sotto la completa copertura del segnale WiFi.

Figura 3: il cablaggio del maggiordomo elettronico

Figura 3: il cablaggio del maggiordomo elettronico

Le soluzioni per il carico sono molteplici. Se si prevede di comandare degli utilizzatori "leggeri" si può utilizzare solo il relé in dotazione con la scheda di ESPertino. Al limite è possibile implementare un sistema a transistor o a Mosfet. Viceversa occorre scegliere un relé molto robusto. La funzione del buzzer è quella di avvertire l'utente dell'avvenuta commutazione di stato del carico. Come vedremo più avanti, le durate dei suoi suoni prodotti sono differenti, a seconda che l'attuatore si attivi o meno. Anche il diodo Led ha esclusiva funzionalità di controllo. Non è indispensabile.

Lo script in PHP

E' necessario disporre di un server Web nel quale "depositare" un file di testo con lo stato logico dell'attuatore. Esso sarà modificato da uno script, in linguaggio PHP, da richiamarsi all'occorrenza attraverso una richiesta HTTP. Si deve creare uno script in PHP, a cui diamo il nome di "maggiordomo.php" che, quando invocato attraverso la chiamata di una URL, memorizzi in un file un particolare contenuto. L'indirizzo chiamato deve anche contenere un parametro GET che lo script stesso controlla e sceglie le informazioni da memorizzare nell'archivio testuale. Con un esempio chiariamo meglio il concetto. Se la URL chiamata è la seguente:

http://www.elektrosoft.it/public/maggiordomo.php?stato=1

lo script in PHP provvederà a memorizzare nel file "maggiordomo.txt", contenuto nella stessa cartella remota, la stringa "CARICO ATTIVATO".

Se, invece, la URL chiamata è la seguente:

http://www.elektrosoft.it/public/maggiordomo.php?stato=0

lo script in PHP provvederà a memorizzare nel file "maggiordomo.txt" la stringa "CARICO DISATTIVATO". Sarà poi lo sketch di ESPertino che, tramite una semplice operazione di parsing, prenderà le decisioni del caso. Di seguito lo script, molto semplice.

<?php
   //------------ maggiordomo.php --------
   echo "Esecuzione dello script PHP <br>";
   $stato=$_GET["stato"];
   if($stato=="1") {
      $myfile = fopen("maggiordomo.txt", "w");
      fwrite($myfile,"CARICO ATTIVATO");
      fclose($myfile);
      echo "ON <br>";
      echo $stato;
   }
   if($stato=="0") {
      $myfile = fopen("maggiordomo.txt", "w");
      fwrite($myfile,"CARICO DISATTIVATO");
      fclose($myfile);
      echo "OFF <br>";
      echo $stato;
   }
?>

Come si vede, dopo aver visualizzato la parola "Esecuzione dello script PHP", il programma preleva il parametro dalla URL memorizzandolo nella variabile "stato". Se tale parametro è uguale a 1, la stringa "CARICO ATTIVATO" sarà memorizzata nel file "maggiordomo.txt", aperto in modalità di scrittura. Viceversa la frase memorizzata sarà "CARICO DISATTIVATO". Il contenuto di tale file di testo sarà, poi, esaminato da ESPertino, come stringa di risposta dal server.

E' possibile provare subito lo script, inviando le due URL viste in precedenza. Si può anche controllare il contenuto del file di testo "maggiordomo.txt", inoltrando, su un browser, l'indirizzo:

http://www.elektrosoft.it/public/maggiordomo.txt

Si ricorda che l'utente deve utilizzare l'host di cui ha il permesso in scrittura.

Andiamo a creare lo sketch di ESPertino

Possiamo adesso dedicarci alla scrittura del programma per la scheda ESPertino. E' abbastanza semplice ma occorre focalizzare alcuni punti critici.

#include <WiFi.h>
//------------------WiFi---------------------
char* ssid            = "NETGEAR-gio22";
const char* password  = "miapassword";
WiFiClient client;        // Crea oggetto client
const char* host     = "www.elektrosoft.it";
String url;
char c;
String pacchetto;
//--------------Variabili-----------------------
int Rele         = 14;           // Porta del Rele 1 di bordo
int Buzzer       = 16;           // Porta del buzzer
int flag_stato   = 0;
void setup() {
    Serial.begin(9600);          // Comunicazione seriale a 9600 baud
    pinMode(Rele,OUTPUT);
    pinMode(Buzzer,OUTPUT);    
    digitalWrite(Rele,LOW);       // Spegne il Rele
    digitalWrite(Buzzer,LOW);     // Spegne il Buzzer
    //----------Aspetta alcuni secondi per sincronizzare il WiFi----------
    Serial.println();
    Serial.println("Attesa per il WiFi...");
    WiFi.begin(ssid, password); 
    delay(10000);
    Serial.println(WiFi.localIP());    // Visualizza l'indirizzo IP di ESPertino
    Serial.println("OK... pronto");    
    //---------------------Fine WiFi-----------------
}
void loop() {
    //-------Prende il contenuto del file remoto maggiordomo.txt----------
    url = "/public/maggiordomo.txt";
    if(client.connect(host, 80)) {
        Serial.println("CONNESSO.....");
        client.print((String)"GET " + url + " HTTP/1.1\r\n" + "Host: " + String(host) + "\r\n" + "Connection: close\r\n\r\n");
        //---------Aspetta fino a quando arrivano caratteri dalla pagina web---------
        while (!client.available());
        //----Costruisce una stringa con tutto il contenuto di cio' che arriva dal Web-------
        pacchetto="";
        while (client.available()) {
            c = client.read();
            pacchetto+=c;
        }    
        client.stop();
        Serial.println(pacchetto);
        Serial.println(pacchetto.length()); 
        Serial.println("============================================");       
    }
    //-----------Se dentro la risposta del Server c'e' la frase 'CARICO ATTIVATO'...-------
    if(pacchetto.indexOf("CARICO ATTIVATO") >= 0 && flag_stato==0) {
        digitalWrite(Rele,HIGH);
        digitalWrite(Buzzer,HIGH);
        delay(500);
        digitalWrite(Buzzer,LOW);
        flag_stato=1;       
    }
    //-----------Se dentro la risposta del Server c'e' la frase 'CARICO DISATTIVATO'...-------
    if(pacchetto.indexOf("CARICO DISATTIVATO") >= 0 && flag_stato==1) {
        digitalWrite(Rele,LOW);
        digitalWrite(Buzzer,HIGH);
        delay(200);
        digitalWrite(Buzzer,LOW);
        flag_stato=0;
    }
    delay(10000);
}

Il listato inizia con l'inclusione del file header WiFi.h, necessario per il collegamento di ESPertino al WiFi e la configurazione delle credenziali per l'accesso al router. Si passa, quindi, alla inizializzazione delle due variabili contenenti, rispettivamente, il numero della porta a cui è collegato il relé e quella dove è connesso il  buzzer. Segue la funzione setup(), che esegue, una volta soltanto, la configurazione della linea seriale per i messaggi di controllo per il debug. Inoltre imposta la funzionalità della porta di I/O e, infine, effettua il collegamento effettivo al WiFi, con una pausa di attesa di almeno dieci secondi. Una volta che il programmatore ha testato il sistema, tutte le funzione "Serial.println()" potranno essere eliminate. Quindi, ha luogo la funzione loop(), che si ripete ogni dieci secondi. In essa il programma ricostruisce, a ogni "giro", una stringa contenente l'intera risposta inviata dal server a ogni richiesta HTTP, dopo che il software interroga il file di testo "maggiordomo.txt".

Se all'interno del pacchetto anzi, più precisamente, in coda è presente la stringa "CARICO ATTIVATO", si attiva il relé (assieme al relativo diodo Led sulla porta 14) e il buzzer emette un suono per mezzo secondo.

Se, nell'altro caso, all'interno del pacchetto è presente la stringa "CARICO DISATTIVATO", il relé e il diodo Led si spengono e il buzzer emette un breve suono di 200 millisecondi.
[...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2417 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici e potrai fare il download in formato PDF eBook e Mobi per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

5 Commenti

  1. giulioelettronica giulioelettronica 26 Gennaio 2020
  2. tattolilm tattolilm 15 Febbraio 2020
  3. giulioelettronica giulioelettronica 16 Febbraio 2020
  4. Alfredo.Centinaro Alfredo.Centinaro 19 Febbraio 2020
  5. giulioelettronica giulioelettronica 19 Febbraio 2020

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend