Telecontrollo via WiFi con Telegram e Espresso Lite: scopri come controllare dispositivi da remoto con il tuo smartphone

Scopriamo le potenzialità dell’applicazione di instant messaging Telegram realizzando un telecontrollo basato su uno smartphone e una demoboard dotata di modulo WiFi.

Quando teniamo in mano il nostro smartphone, ormai possiamo dire di avere una porta aperta sul mondo: non solo per la connettività globale (telefono, Internet, Social, Instant Messaging) che ci fornisce, ma anche per le potenzialità offerte dai link di rete wireless implementati, ossia il Bluetooth e il WiFi. Grazie ad essi e a specifiche app che spuntano come i funghi, da tempo lo smartphone può essere utilizzato come comando a distanza per unità collocate sotto copertura, ma anche interconnesse via Internet.

Questo articolo nasce dall’idea di utilizzare uno smartphone per realizzare un sistema di controllo da WiFi, che si avvale di una scheda di sviluppo ospitante un modulo wireless ESP8266.

Non è la prima volta che proponiamo un sistema per inviare comandi a distanza; questa volta -però- proponiamo un comando wireless diretto via WiFi, sfruttando un software di instant messaging che possiamo considerare l’antagonista di Whatsapp: Telegram.

La scheda di sviluppo che utilizzeremo è la Espresso Lite V2.0, acquistabile direttamente da questo sito; può funzionare da sola (stand-alone) o insieme a una scheda Arduino, dato che è Arduino-compatibile.

Espresso Lite V2.0

La demoboard espresso Lite v 2.0

La scheda monta un modulo ESP8266 WROOM-02 (certificato FCC, CE e TELEC) con 4 Mb di Flash ed è stata progettata per le applicazioni IoT; le caratteristiche principali sono:
• supporto per IDE Arduino e le sue librerie;
• supporto bootloader per IDE Arduino;
• tensione di alimentazione da 5 a 12 Vcc;
• regolatore on-board a 3,3V (800 mA);
• pulsante di reset e due pulsanti programmabili dall’utente.

Una delle particolarità della scheda è che la sua piedinatura ha un passo di 2,54 mm; ciò rende facile inserirla se occorre testarla con componenti che si possono disporre su basette millefori. Per agevolare l’inserzione la Espresso Lite può essere dotata di pin-strip maschio e femmina.

Definito l’hardware che useremo, vediamo ora che cosa possiamo fare e come sfruttare al meglio la nostra demoboard e lo facciamo con un progetto in grado di interfacciarsi con Telegram.

Telegram è un’applicazione di messaggistica focalizzata su velocità e sicurezza (è stata la prima a implementare la crittografia dei messaggi) è molto rapida, semplice da usare e gratuita. Basa il proprio funzionamento su un protocollo di comunicazione open source sviluppato appositamente per ridurre al minimo la quantità di byte inviati per messaggio.

Il vantaggio di questo sistema consiste nello sfruttare la rete WiFi senza l’uso di moduli telefonici o SIM (invece con Whatsapp si dovrebbe registrare un numero di telefono e quindi bisognerebbe vincolare una SIM).

Espresso Lite V2.0

Telegram e i bot

L’arma vincente di Telegram è che permette di creare, oltre ai classici account associati ai numeri di telefono, anche dei Bot. Un Bot è un sistema di risposta automatica che offre agli utenti la possibilità di reperire informazioni o contenuti attraverso la scrittura di comandi indicati dal Bot stesso all’avvio della ricerca. Più precisamente, un Bot è un utente virtuale, ovvero un client automatico che si collega al servizio al nostro posto; per questo viene considerato un robot, non a caso Bot è l’abbreviazione di robot.

L’utente può interagire con i Bot come fossero utenti, inviando loro messaggi, comandi e richieste utilizzando richieste HTTPS.

I Bot possono essere utilizzati per ottenere notifiche personalizzate e notizie; un Bot può agire come un giornale intelligente, inviando solo contenuti pertinenti non appena vengono pubblicati. In breve, gli potete dire quali messaggi o argomenti interessano e tra tutti vi invierà solo quelli.

Un Bot può arricchire le chat telegram con contenuti provenienti da servizi esterni, quindi offre integrazione con altri servizi. Di ciò si occupano gli Image Bot, GIF Bot, IMDB Bot, Wiki Bot, Music Bot, Youtube Bot, GitHub Bot.

Un Bot permette di creare strumenti personalizzati: ad esempio può fornire avvisi, previsioni meteo, traduzioni, formattazione o altri servizi. Con i Bot è anche possibile creare dei giochi: un Bot può giocare a scacchi e dama contro di voi, agire come ospite in giochi a quiz, o anche prendere parte a un gioco di ruolo (Trivia Bot).

Un Bot potrebbe anche connettere le persone in cerca di interlocutori sulla base di interessi comuni o della vicinanza (HotOrBot).
Lo stesso canale Futuranet News è basato su un bot.

Gli utenti possono interagire con i Bot in due modi:
– inviando loro messaggi e comandi aprendo una chat con essi (come fossero altri utenti) o aggiungendoli ai gruppi; ciò è utile per i chat Bot o news Bot come TechCrunch e Forbes bot;
– inviando richieste direttamente dal campo di input digitando lo @username del bot e la richiesta; ciò permette di inviare contenuti dai bot in linea.

Per utilizzare i Bot è necessario aggiungerli nelle chat: nella schermata in cui c’è l’elenco delle chat si trova la sezione Cerca; qui bisogna scrivere il nome del Bot preceduto dal simbolo @. All’avvio, il Bot darà le istruzioni da seguire per poterlo utilizzare. Nel nostro caso andremo a creare un bot personalizzato da noi creato, che ci permetterà di interfacciarci alla nostra scheda ed in particolare al modulo WROOM-02.

L’applicazione per ESP

Facciamo un passo avanti e cerchiamo di capire nella realtà che cosa possiamo fare con il progetto: immaginiamo che sia inverno e faccia molto freddo, siamo al lavoro e ci ricordiamo di non aver acceso la caldaia del riscaldamento; la prima idea che ci viene in mente è chiamare il vicino o un amico per chiedergli di accenderla.

Ma essendo appassionati di elettronica vorremmo essere noi a dare il comando…a distanza. Quindi potremmo utilizzare uno dei nostri telecontrolli TDG o installare un termostato GSM con modulo SIM800 che riceva comandi da SMS per attivare e disattivare la caldaia; ma in tal caso servirebbe anche una SIM telefonica e il relativo abbonamento.

L’alternativa è creare un sistema di accensione/spegnimento dal nostro cellulare che faccia a meno della rete telefonica ma utilizzi il WiFi o Internet. Ciò può essere fatto optando per tre soluzioni:
1. creare un’applicazione sul nostro smartphone (anche se non tutti sarebbero in grado di elaborarla) e un firmware sulla scheda, ma il sistema risulterebbe molto complesso e necessiterebbe una discreta competenza, un tempo di sviluppo molto elevato, quindi le ore impiegate non appagherebbero lo sforzo;
2. aprire una pagina web sul nostro smartphone e creare un firmware sulla Demoboard Espresso lite v2.0 per collegarsi alla pagina allo scopo di scambiare informazioni, ma sarebbe scomodo perché volendo delle notifiche dovremmo aprire e aggiornare la pagina web, dovendoci autenticare, ecc.;
3. utilizzare un servizio di messaggistica quale è Telegram, appoggiandoci ad un Bot.

Avrete capito che quest’ultima è la soluzione da noi adottata, perché consente di ricevere notifiche (il modulo WiFi può inviare notifiche spontanee al nostro smartphone e quest’ultimo ci avviserà come se fosse un messaggio) garantisce sicurezza (solo tramite un’autenticazione -che si fa solo la prima volta- è possibile dialogare con il modulo) ed è comoda (non dobbiamo aprire una pagina web ma un’applicazione con tutte le sue funzioni).

Vediamo dunque nel dettaglio di cosa si tratta: potete sfruttare TelegramBot lato telefono (si può utilizzare sia su Android che su smartphone basati su iOS, quindi Apple), perché non necessita di programmazione, invia notifiche di ricezione dei nuovi messaggi ed è un’applicazione; mentre lato Demoboard potete usare il firmware da noi proposto.

La prima cosa da fare è cercare di capirlo (molte persone fanno copia/incolla) e nel caso migliorarlo. Come detto in precedenza, l’obiettivo di questo articolo è farvi capire come funziona il sistema che stiamo proponendo, provando a inviare e ricevere messaggi da remoto.

Procediamo a piccoli step: se non l’avete ancora fatto, installate Telegram sul vostro smartphone (Fig. 2). Ora, dall’opzione Contatti, digitiamo @BotFather e selezioniamolo; la Fig. 3 illustra l’insieme dei comandi del Bot.

Espresso Lite V2.0

 

Fig. 2 Installazione di Telegram.

 

Fig. 3 Insieme dei comandi del Bot.

 

Adesso stiamo dialogando con un Bot (in questo caso il Botfather) ossia un account virtuale in grado di creare e modificare i Bot; come prima cosa scriviamo nella chat il comando proposto dal Botfather: /newbot. Il BotFather ci risponderà chiedendo un nome per il nostro Bot e poi lo username con cui potremo farlo aggiungere a chi vogliamo (il nome dopo la @, per intenderci).
Quest’ultimo dovrà necessariamente terminare con “Bot”.

Nomi validi quindi sono Ardubot, superbot, ecc…, sempre che non siano già stati scelti da altri utenti (in questo caso scegliete un nome differente). Una volta finita la creazione del Bot, @BotFather ci risponderà con una schermata come quella in Fig. 4.

Se avete seguito la procedura di creazione alla lettera, noterete una stringa lunga 45 caratteri che è il “token” e permetterà di autenticarci al server e di comunicare. Bene, dal lato applicazione per il momento abbiamo tutti gli ingredienti per preparare la nostra ricetta.

Ricordate quando abbiamo parlato della compatibilità con Arduino? Ebbene, la nostra scheda può essere programmata direttamente dall’IDE di Arduino e quindi utilizzata da tutti gli appassionati del settore senza doversi cimentare nell’utilizzo di altri linguaggi (ad esempio LUA, utilizzato per la programmazione dell’ESP8266 tramite il derivato NodeLua).

Detto ciò possiamo cominciare a realizzare la nostra applicazione.

Come prima cosa dobbiamo aggiornare l’IDE di Arduino per far riconoscere la nostra board:
• assicuratevi di aver scaricato l’ultima versione dell’IDE Arduino;
• dal menu “File” selezionare “Impostazioni”;
• nel campo “Additional Boards Manager URLs” inserire l’indirizzo http://arduino.esp8266.com/package_esp8266com_index.json

 

Fig. 4 I messaggi indicanti che il Bot è stato creato; il token è la stringa evidenziata dalla freccia rossa.

 

Impostate quindi i parametri come nella Fig. 5. Aprite ora il file termostato_wifi.ino scaricabile qui sotto nella sezione download. Il firmware permette di connettersi a una rete WiFi e una volta raggiunta la temperatura desiderata, attiva un’uscita della demoboard che ci servirà poi per azionare il relé che accenderà la caldaia. Come vedremo in dettaglio, sono state inserite le righe di codice:

#define MAX_TEMP_OFF_CALDAIA 23
#define MIN_TEMP_ON_CALDAIA 22

Queste due define permettono di gestire la temperatura di accensione e quella di spegnimento della caldaia. Ricordiamo inoltre che maggiore sarà l’offset di temperatura, maggiore sarà l’isteresi applicata (stabilità del relé ON/OFF). I comandi disponibili sono:
• caldaia on (attiva caldaia);
• caldaia off (disattiva caldaia);
• temp (invia la temperatura della stanza);
• tutti gli altri messaggi inviati saranno gestiti da un echo.

È possibile aggiungere altri comandi confrontando il bot.message[i][5] con il testo da riconoscere. Ad esempio se vogliamo attivare l’uscita 13 inviando il comando Uscita ON, è necessario inserire nella routine chiamata Bot_EchoMessages() le seguenti linee di codice

if (bot.message[i][5] == “Uscita ON”) {
digitalWrite(13, LOW);
}

Fig. 5 Impostazioni nell’IDE.

Avvio del programma

Come prima cosa dobbiamo connetterci alla rete WiFi esistente, quindi inseriamo il nome (ssid) e la password della nostra rete, come mostrato nella porzione di codice seguente:

La prima riga contiene il nome della rete, ossia l’SSID WiFi, mentre nella seconda va scritta la password di accesso alla rete stessa. Infine inseriamo i dati che riguardano il nostro bot: le righe di codice che riguardano questa operazione sono visibili nel Listato 1.

Listato 1

// Initialize Telegram BOT
#define BOTtoken “Incollare il codice generato dal botfather”

#define BOTname “nome del bot”

#define BOTusername “username del bot (per capirci quello che finisce in bot)”

#define ID_TELEGRAM Questo id lo si ricava la prima volta che inviamo 
il messaggio di start e permette di rispondere solo bot che vogliamo noi. 
Dando il comando start, il bot risponde comunicandoci il suo id.

Carichiamo il firmware

Se non ci sono errori di compilazione, procediamo con l’upload sulla scheda espresso lite v2.0; a riguardo ricordiamo che bisogna tenere premuto il pulsante “prog” e premere per un secondo il pulsante di “reset”.

Fatto ciò eseguite l’upload e nel momento in cui si visualizzano i puntini (upload in corso) è possibile rilasciare il pulsante “prog”.

Finalmente siamo giunti alla parte più bella e soddisfacente del lavoro! Abbiamo creato la nostra amata comunicazione tra il modulo ESP e il nostro smartphone.

Vediamo nel dettaglio:
• apriamo ora la seriale e impostiamo il baud-rate a 115.200;
• spostiamoci su Telegram e scriviamo il comando “start” (senza apici);
• possiamo notare sulla console seriale la ricezione del messaggio e quindi l’echo in risposta:

GET Update Messages
…. connected to server
Sent Update request messages up to : 94650296
{“update_id”:XXXXXXXX,
“message”:{“message_id”:669,”from”:{“id”:XXXXXXXX,”first_name”:”Gianluca”,”last_name”:”XXXXXXXX”,”username”:”XXXXXXXX”},”chat”:{“id”:XXXXXXXX,”first_name”:”Gianluca”,”last_name”:”XXXXXXXX”,”username”:”XXXXXXXX”,”type”:”private”},”date”:1466755441,”text”:”start”}}]}

Copiamo il codice numerico dopo “update_id” e impostiamo la #define ID_TELEGRAM con quel valore. Se tutto è andato a buon fine, dovrebbe arrivarci la notifica sullo smartphone da parte del nostro modulo, con una sequenza di messaggi, ovvero i comandi disponibili che sono attualmente implementati nel nostro programma e un codice ID_TELEGRAM che dovremmo scrivere nella define del programma.

Ora Telegram accetta i comandi (tranne lo start) solo dal nostro smartphone: pensate a quanti progetti si possono sviluppare avendo a disposizione un “terminale remoto” che può comandare il modulo basato su ESP2866 da qualunque postazione; si può parlare a pieno titolo di domotica e pensare al più vasto ventaglio di applicazioni!

Vi ricordate che il nostro obiettivo finale è poter azionare il termostato da remoto per attivare e disattivare il riscaldamento in casa senza nessuna fatica; ebbene, procuriamoci ora l’hardware necessario, che è:
• sonda termica DS18B20;
• 1 resistenza da 4,7 kohm;
• 1 scheda relé comandabile da segnali TTL (3,3V/5V);
• modulo basato su ESP2866.

Colleghiamo adesso il sensore di temperatura One-Wire DS18B20 al nostro modulo seguendo lo schema di cablaggio mostrato nella Fig. 6. Ora dobbiamo collegare il pin GND (è il filo nero, se utilizzate la sonda in versione One-Wire waterproof) al contatto GND; connettiamo poi il pin +5/3,3v (rosso in caso di One-Wire waterproof) al pin 3V3.

Fig. 6 Collegamento del sensore di temperatura alla Espresso Lite.

 

Collegate quindi il pin Data centrale (bianco in caso di one-wire waterproof) al pin digitale (14); verifichiamo ora che il sensore rilevi la temperatura esatta, dando il comando temp dal nostro smartphone (Fig. 7).

La funzione getTemp() restituisce un valore di tipo float dato che abbiamo bisogno di sapere anche il valore dopo la virgola.
Tale funzione è chiamata ogni x secondi (dove x è possibile impostarlo cambiando il valore di Bot_mtbs) nel loop ed è sempre confrontata con le due define:

#define MAX_TEMP_OFF_CALDAIA 23
#define MIN_TEMP_ON_CALDAIA 22

Ora possiamo monitorare la temperatura in qualsiasi momento della giornata.

Non ci rimane che collegare la scheda a relé all’uscita di un altro pin digitale e settarlo nella riga #define PIN_GESTIONE_CALDAIA (abbiamo scelto il pin 13); la scheda è la RELAY2CH visibile in Fig. 8 e dispone a bordo di due relé con scambio a 10A/250Vca (10A/30Vcc) attivabili con livello logici TTL o 0/3V (integra la logica del caso); si alimenta a 5 volt in continua, quindi possiamo connetterla in parallelo all’alimentazione della Espresso Lite.

Per i collegamenti fate riferimento alla Fig. 8, ricordando che il Vcc della scheda relé va al Vin della Espresso Lite e le GND delle due vanno unite; siccome utilizziamo un solo relé, colleghiamo il pin 13 della Espresso Lite, che abbiamo designato come uscita, all’IN1 della scheda relé.

Quando la Espresso Lite attiverà l’uscita e con essa il relé, vedrete il LED della scheda relé accendersi; ciò accadrà se la temperatura rilevata scende sotto quella impostata e la disattivazione se supera il valore massimo impostato.

Se si invia il comando “caldaia on” il relè si attiva e la caldaia si accende. Nel caso caso la temperatura sia maggiore di MAX_TEMP_OFF_CALDAIA Telegram invia un messaggio dicendo “Avvio spegnimento caldaia” ma il relé rimane attivo e dev’essere l’utente a mandare un messaggio “caldaia off”.

Tale gestione rimane all’utente perché se lo spegnimento della caldaia fosse stato legato alla MAX_TEMP_OFF_CALDAIA e si fosse poi inviato il messaggio “caldaia on” la caldaia sarebbe tornata in off. La gestione si potrebbe risolvere in vari modi: reimpostare le varie temperature, dividere le modalità termostato ecc.

Conclusioni e Download

Finalmente abbiamo creato un termostato WiFi che ci informa dello stato della caldaia (o del condizionatore d’aria: in tal caso va invertito lo scambio del relé, ossia si usano C ed NC), nonché della temperatura del locale monitorato.

Il sistema che vi abbiamo proposto in queste pagine già funziona, ma se volete potete cimentarvi nella modifica delle due define riguardanti la temperatura: potete ridefinirle a int e creare due comandi sulla falsa-riga di quelli esistenti, che vi permetteranno di settare le due temperature da remoto; oppure potete creare comandi dedicati a eventuali gestioni di luce/tapparelle o altro ancora. In questo articolo vi abbiamo fornito le nozioni di base; non vi resta che metterle in pratica.

 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Menu