Bot per Telegram con ESPertino

La scheda ESPertino ha tra i suoi punti di forza la connettività, resa possibile dalla presenza sia di un’interfaccia WiFi che di una Bluetooth a bassa energia (BLE). Scopriamo in questo articolo come sfruttare questa funzionalità per creare e configurare un Bot Telegram, utilizzabile per controllare da remoto la board e ricevere notifiche sullo stato dei suoi I/O e dei sensori ad essa collegati

Introduzione

Telegram è sicuramente una delle applicazioni maggiormente utilizzate per la chat e la messaggistica istantanea, nata da un progetto open source e oggi disponibile su numerose piattaforme hardware. Telegram rende inoltre disponibili agli utenti e agli sviluppatori un set di API con cui, seguendo pochi passaggi, è possibile realizzare un Bot, cioè un programma in grado di eseguire automaticamente molte delle operazioni normalmente compiute da un utente reale. Attraverso questo articolo avremo la possibilità di scoprire e sfruttare le potenzialità messe a disposizione sia da Telegram che da ESPertino, creando un’applicazione per il controllo remoto basata sull’utilizzo della connessione WiFi e di un comune smartphone. Sappiamo che lo smartphone rappresenta una sorta di porta aperta verso il mondo, non solo per le proprietà di connettività globale (funzioni di telefonia mobile, internet, social network, chat, messaggistica istantanea) che mette a disposizione, ma anche per le funzionalità offerte dalle interfacce wireless, quali Bluetooth e WiFi. Utilizzando queste caratteristiche, abbinate a una delle numerose app disponibili su internet, lo smartphone può essere efficacemente utilizzato per controllare remotamente dei dispositivi elettronici.

La board ESPertino

Per quanto riguarda la piattaforma hardware, utilizzeremo la scheda ESPertino (Figura 1), basata su un modulo ESP32 Wroom (certificato FCC, CE, e TELEC), equipaggiata con 4 Mb di memoria flash, e particolarmente indicata per le applicazioni IoT. Da non sottovalutare, inoltre, la possibilità di programmare la scheda direttamente dall’IDE Arduino.

Figura 1: la board di sviluppo ESPertino

Figura 1: la board di sviluppo ESPertino

Le principali caratteristiche tecniche di questa board possono essere così sintetizzate:

  • supporto per l’IDE e per le librerie di Arduino;
  • bootloader in grado di supportare l’IDE di Arduino;
  • tensione di alimentazione compresa tra 5 e 12 Vcc;
  • regolatore di tensione a 3,3 V (800 mA) integrato sulla board;
  • pulsante di reset;
  • LED a disposizione dell’applicativo utente;
  • due relè integrati sulla board;
  • segnali relativi al modulo e segnali di alimentazione riportati su due connettori header femmina con passo 2,54 mm. Tali segnali sono immediatamente disponibili all’utente, oppure utilizzabili per realizzare shield o daughter board;
  • bridge USB-UART integrato sulla board;
  • connettore microUSB per l’alimentazione e la programmazione del dispositivo;
  • 1 morsettiera 6x per il collegamento dei carichi ai relè;
  • 1 morsettiera 2x per collegare l’alimentazione esterna (alternativa all’alimentazione preveniente dalla porta microUSB).

Il progetto

Dopo aver passato in rassegna le principali caratteristiche legate all’hardware, vediamo ora come sia possibile realizzare l'applicazione Telegram Bot con questa versatile scheda, nata per supportare egregiamente le applicazioni IoT. Il progetto che abbiamo scelto permette di integrare la board con Telegram, la nota applicazione di messaggistica istantanea basata su un elevato grado di sicurezza (è stata la prima nel suo genere ad aver implementato la codifica dei messaggi), elevata velocità, e, non da ultimo, liberamente utilizzabile. Il suo funzionamento è basato su un protocollo di comunicazione open source, espressamente sviluppato per ridurre al minimo il numero di byte per messaggio trasmesso. Per la comunicazione tra Telegram e la board ESPertino verrà utilizzata l’interfaccia WiFi, evitando così la necessità di ricorrere alla rete mobile e all’impiego di una SIM dedicata. Se si fosse invece utilizzato Whatsapp, avremmo dovuto registrare un numero di telefono, legandolo così a una scheda SIM.

I Bot Telegram

Oltre all’account di tipo classico associato a un numero di telefono, Telegram offre la possibilità di creare un Bot. Per Bot si intende un sistema automatico che permette all’utente di reperire informazioni, fornire risposte, oppure condividere diversi tipi di contenuti, per mezzo di comandi indicati al Bot stesso in fase di configurazione del Bot. Più precisamente, un Bot è una sorta di utente virtuale, un client automatizzato che si collega al servizio al nostro posto; proprio per questo motivo viene considerato alla stregua di un robot, e non è un caso che Bot sia proprio un’abbreviazione del termine robot. Ogni utente può dunque interagire con i Bot come se fossero degli utenti in carne e ossa, inviando loro messaggi, comandi, e richieste, tutto attraverso il protocollo HTTPS. I Bot sono ad esempio utilizzati per ottenere dei particolari tipi di notifica, oppure per conoscere le ultime notizie e novità compatibili con i propri interessi. In sostanza, è sufficiente istruire il Bot a quali argomenti o informazioni siamo interessati, e lui provvederà a eseguire le ricerche e a inviare le notifiche solo se compatibili con questi argomenti. Un Bot è anche in grado di arricchire la chat con contenuti provenienti da servizi esterni, integrandosi con essi; avremo quindi Bot per le immagini, Bot GIF, Bot Imdb, Bot Wiki, Bot musicali, Bot YouTube, Bot GitHub, e così via. I Bot facilitano la creazione di strumenti personalizzati: un Bot, ad esempio, può generare degli avvisi, delle previsioni meteorologiche, eseguire traduzioni in modo automatico, o altri servizi ancora. Attraverso i Bot è anche possibile creare dei giochi: un Bot può essere in grado di giocare a scacchi oppure a dama, o persino prendere parte a un gioco di ruolo (si parla, in questo caso, di Trivia Bot). Un Bot è anche in grado di connettere persone in cerca di qualcun altro con cui parlare, basandosi sui criteri della comunanza di interessi, oppure sulla vicinanza geografica (HotOrBot). Riassumendo, possiamo individuare le seguenti categorie di Bot:

  • @ImageBot, rivolti alla ricerca di immagini;
  • @TriviaBot, specializzati nei giochi di quiz;
  • @PollBot, utilizzati per la creazione di interviste all’interno di determinati gruppi di utenti;
  • @Rate StickerBot, rivolti alla ricerca di sticker;
  • @AlertBot, utilizzabile per schedulare l’invio di messaggi alla chat o a sè stessi.

Gli utenti possono interagire con un Bot in due modi distinti:

  • inviando al Bot comandi e messaggi aprendo una chat con il Bot (come se fosse un normale utente), oppure aggiungendolo a qualche gruppo; esempi di Bot di questo tipo sono TechCrunch e Forbes;
  • inserendo le richieste direttamente nell’apposito campo di ingresso dell'applicazione Telegram, e digitando la @username del Bot e la richiesta.


Per poter utilizzare i Bot è necessario aggiungerli alla chat nel modo seguente. Nella finestra in cui compare la lista di chat, individuare il campo Search: qui occorre digitare il nome del Bot, preceduto dal carattere “@”. Nel nostro caso creeremo un Bot personalizzato che ci permetterà di interfacciare la board ESPertino, e in particolare il modulo WROOM-02.

L’applicazione

Vediamo ora di esaminare in dettaglio l’applicazione, proponendo qualche pratico e utile caso di utilizzo per la stessa. Supponiamo di trovarci in inverno, con temperature esterne particolarmente rigide: siamo al lavoro, e realizziamo di esserci scordati di accendere il riscaldamento. La prima cosa che ci viene in mente è quella di chiamare un amico oppure un vicino, chiedendogli se gentilmente può eseguire lui l’operazione. Poichè però siamo degli appassionati di elettronica, vorremmo poter essere in grado di accendere noi il riscaldamento da remoto. Potremmo certamente installare un termostato GSM con un modulo SIM900 che riceve dei messaggi SMS per l’attivazione e disattivazione del bruciatore; così facendo, tuttavia, avremmo bisogno di utilizzare una scheda SIM abbinata a un corrispondente piano tariffario. L’alternativa è quello di creare un sistema di accensione/spegnimento azionabile tramite smartphone, basato sull’impiego della rete WiFi oppure Internet (qundi senza obbligo di SIM). Questa soluzione può essere realizzata in tre modi differenti:

  1. creando un’applicazione per lo smartphone (anche se non tutti potrebbero essere in grado di farlo) e un apposito firmware per la scheda. Qesto approccio, tuttavia, si rivelerebbe subito troppo complesso, richiedendo degli skill particolari e un lungo tempo di sviluppo;
  2. utilizzando una pagina web dedicata e creando un apposito firmware per la board ESPertino, tramite cui collegarsi alla pagina web e scambiare informazioni. Anche questa soluzione, tuttavia, non è molto conveniente. Se infatti fossimo interessati a ricevere qualche forma di notifica, saremmo costretti ogni volta ad aprire la pagina web, eseguire il login, e così via;
  3. utilizzando un servizio di messaggistica istantanea come Telegram (Figura 2), e facendo affidamento su un Bot.

Figura 2: l’applicazione Telegram liberamente scaricabile dallo store per iOS, Android e per altre piattaforme ancora

La scelta è ricaduta sulla terza ed ultima opzione, in quanto permette di ricevere le notifiche, inviate spontaneamente dal modulo WiFi allo smartphone, che avviserà l’utente in corrispondenza di ogni nuovo messaggio ricevuto. Viene inoltre garantita la sicurezza delle informazioni, assicurata dall’autenticazione (e dal meccanismo dei token ad essa associato) che deve essere eseguita all’atto della prima connessione con il modulo.

Installazione

Il primo passo da eseguire consiste nell’installare Telegram sul proprio dispositivo mobile (qualora non fosse già presente). Successivamente occorre installare BotFather (Figura 3), un Bot particolare che presenta la caratteristica peculiare di essere in grado di creare altri Bot. A questo scopo, nell’opzione Contacts digitare e selezionare @BotFather.

Figura 3: il logo di BotFather

Stiamo ora dialogando con un Bot (il Botfather, in questo caso) cioè un account virtuale con cui è possibile creare e modificare altri Bot. Come prima operazione, scriviamo il commando proposto da Botfather nella chat: /newbot. BotFather risponderà chiedendoci che nome vogliamo assegnare al nuovo Bot, e il suo username (il nome che segue il carattere @), che consentirà agli utenti da noi scelti di aggiungerlo alla propria chat. Lo username deve necessariamente terminare con “Bot”. In Figura 4 possiamo osservare una lista dei comandi disponibili operando con il Botfather.

Figura 4: elenco dei comandi di Botfather

Nomi validi sono perciò Ardubot, ESPertinobot, e così via, a meno che siano già stati utilizzati da un altro utente (in tal caso, basta semplicemente sceglierne un altro differente). Una volta completata la creazione del Bot, @BotFather proporrà una finestra simile a quella visualizzata in Figura 5.

Figura 5: creazione del Bot completata con successo

Come indicato in Figura 5, la creazione del Bot genera una stringa lunga 45 caratteri (indicata con il termine “token”) che permetterà di autenticarsi sul server. Prendete nota di questo token e memorizzatelo in un file, perchè andrà inserito nell'applicazione (sketch) da scaricare sulla board ESPertino.

L’applicazione

Siamo a questo punto pronti per creare l’applicazione, un’operazione agevolata dalla possibilità di utilizzare il noto e “user friendly” ambiente di sviluppo per Arduino. La prima operazione da compiere è quella di aggiornare l’IDE all’ultima versione disponibile. Successivamente, occorre aggiungere il profilo hardware relativo alla board ESPertino e aggiornare il compilatore in modo tale che possa generare il codice per il microcontrollore presente sul modulo Wroom32; a questo proposito, seguire le istruzioni di installazione. Impostare poi i parametri (temperatura) relativi alle condizioni di accensione e spegnimento del bruciatore della caldaia, modificando i valori delle #define presenti nello sketch (l'applicazione software è scaricabile al link in fondo all'articolo). Un esempio di valori è il seguente:


#define MAX_TEMP_OFF_CALDAIA    23
#define MIN_TEMP_ON_CALDAIA     22

L’applicazione si connette quindi alla rete WiFi e, quando la temperatura desiderata è stata raggiunta, la board invierà un messaggio Telegram, per notificare l'utente della condizione creatasi. Quest'ultimo (come vedremo tra breve) potrà poi attivare/disattivare il relè che pilota il bruciatore tramite un apposito comando Telegram inviato alla board ESPertino.

I comandi disponibili nell’applicazione sono i seguenti:

  • boiler on (chiede alla board di attivare il bruciatore);
  • boiler  off (chiede alla board di disattivare il buciatore);
  • temp (richiede alla board di inviare la temperatura del locale);
  • tutti gli altri messaggi trasmessi verranno considerati come echo.

E’ inoltre possibile aggiungere altri comandi confrontando il contenuto di bot.message[i][5] con il testo da riconoscere. Se ad esempio volessimo attivare basso il GPIO 11, inviando il comando Exit ON, basterà inserire le seguenti istruzioni nella routine Bot_EchoMessages():


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

Avvio del programma

Come prima cosa dovremo collegarci a una rete WiFi, inserendo il nome della rete (ssid) e la relativa password, come indicato di seguito:


char ssid[] = “XXXXXXXXXX”;
char password[] = ”XXXXXXXXXX”;

Quindi nello sketch dovrete inserire, al posto delle"X", l'ssid e la password per la connessione relativi alla vostra rete WiFi. Possiamo quindi inserire le informazioni relative al bot da noi creato con BotFather, come indicato dalle seguenti istruzioni:


// Initialize Telegram BOT
#define BOTtoken "Inserire qui la stringa di 45 caratteri (token) generata da BotFather"
#define BOTname "Insrire qui il nome del Bot"
#define BOTusername "Inserire qui lo username del Bot (ricordatevi che deve terminare con bot)"
#define ID_TELEGRAM Qui va inserito l'id ottenuto in corrispondenza del primo invio di un messaggio.
                    Permette di rispondere solo al Bot che desideriamo.
                    Quando viene dato il comando start, il Bot risponde comunicando il proprio id.

Caricamento e lancio del firmware

Il software dell'applicazione, contenuto nell'allegato scaricabile al link in fondo all'articolo, è composto da un classico file sketch per Arduino e da una libreria apposita per la gestione dei Telegram Bot con le board che utilizzano i moduli ESP.

Dopo aver compilato lo sketch, possiamo procedure con l’upload del codice sulla board ESPertino. Per testare l’applicazione, procedere nel modo seguente:

  • aprire la porta seriale e impostare il baudrate a 115200;
  • spostiamoci poi sull’app Telegram e digitiamo il comando “/start” (senza virgolette);
  • possiamo notare che il messaggio è stato ricevuto dalla console seriale:

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”}}]}

Copiare il codice numerico posto dopo “update_id” e inserirlo nella #define ID_TELEGRAM al posto delle "X". Se tutto è andato bene, il nostro smartphone riceverà una notifica dalla board ESPertino, contenente la sequenza di comandi implementati, e quindi utilizzabili dall'app Telegram per comunicare con la board. Vediamo ora come acquisire il dato di temperatura, necessario per inviare le notifiche Telegram e ricevere i comandi per l'accensione e spegnimento della caldaia.

Affinchè la board possa conoscere la temperatura ambientale, è necessario dotarla di un opportuno sensore, quale ad esempio il Dallas/Maxim DS18B20. Per il suo collegamento, avremo anche bisogno di una resistenza da 4,7 kohm. Colleghiamo quindi il sensore One-Wire DS18B20 alla board, seguendo lo schema evidenziato in Figura 6. Il sensore dispone di tre soli pin, che andranno collegati nel modo seguente:

  • pin di alimentazione: va collegato al pin 3,3 V di ESPertino;
  • pin di ground: val collegato all'omonimo pin di ESPertino;
  • pin segnale: va collegato al Pin 13 di ESPertino.

Verifichiamo quindi che il sensore fornisca la temperatura corretta digitando il comando temp sullo smartphone. La funzione getTemp() restituisce un valore di tipo float, dal momento che siamo interessati a conoscere anche la parte decimale del valore di temperatura. Questa funzione è invocata ogni N secondi (con N modificabile cambiando il valore di Bot_mtbs) nel loop, ed il valore resituito viene confrontato con le due soglie specificate in precedenza:


#define MAX_TEMP_OFF_CALDAIA    23
#define MIN_TEMP_ON_CALDAIA     22

Siamo a questo punto in grado di controllare la temperatura in ogni momento della giornata. Tutto ciò che rimane da fare è collegare i terminali del relè al bruciatore. ESPertino dispone di due relè integrati sulla board, in questa applicazione utilizzeremo il relè collegato al pin 12, al quale andrà collegata l'accensione del bruciatore. Quando da Telegram inviamo il comando “caldaia on”, il relè viene attivato e il bruciatore si accende. Nel caso in cui la temperatura sia maggiore di MAX_TEMP_OFF_CALDAIA, Telegram invierà un messaggio “Starting boiler turning off”, ma il relè rimarrà attivo, e deve essere l’utente a inviare un messaggio “caldaia off”. La decisione finale sull'effettivo comando dei relè spetta quindi all’utente. In Figura 7 un esempio di conversazione instaurata tra l'app Telegram (in questo caso è la versione per PC, abbiamo infatti detto in precedenza che Telegram è un sistema multi-piattaforma) e la board ESPertino (o meglio con il Bot Telegram in azione su ESPertino).

Figura 7: esempio di conversazione tra l'app Telegram e il Telegram Bot in esecuzione su ESPertino

Conclusioni

Abbiamo visto con questo progetto come sia semplice e immediato realizzare un’applicazione di “tele-controllo”, in grado di informarci tramite Telegram sullo stato di accensione o spegnimento di una caldaia e di monitorare il valore di temperatura in un locale. Ovviamente, la stessa applicazione può essere utilizzata per comandare lo stato di un condizionatore anzichè di una caldaia (in questo caso occorrerà però invertire il comportamento del relè). Inoltre, il lettore può adattare il programma alle proprie esigenze specifiche (cambiando ad esempio le soglie di intervento in accensione e spegnimento, determinate dalle due #define viste in precedenza), come pure estenderlo o modificarlo per altre interessanti applicazioni.

Link per il download

Il software relativo all'applicazione può essere liberamente scaricato cliccando sul seguente link:

EspertinoTelegramBot

Riferimenti

[1] “Using a Telegram Bot and a Demo Board to experiment with home automation” pubblicato su Open Electronics

 

 

30 Commenti

  1. Giovanni Di Maria Giovanni Di Maria 1 giugno 2017
  2. Maurizio Di Paolo Emilio Maurizio Di Paolo Emilio 1 giugno 2017
  3. Tolentino Cotesta 5 novembre 2017
    • Stefano Lovati Stefano Lovati 5 novembre 2017
  4. gasmas 23 dicembre 2017
  5. Stefano Lovati Stefano Lovati 24 dicembre 2017
    • gasmas 25 dicembre 2017
      • gasmas 25 dicembre 2017
        • Stefano Lovati Stefano Lovati 27 dicembre 2017
          • Stefano Lovati Stefano Lovati 27 dicembre 2017
          • gasmas 27 dicembre 2017
  6. Stefano Lovati Stefano Lovati 27 dicembre 2017
  7. economo@agnelli.it 13 gennaio 2018
  8. Stefano Lovati Stefano Lovati 21 gennaio 2018
  9. Rossanobertocco 26 gennaio 2018
  10. Stefano Lovati Stefano Lovati 29 gennaio 2018
  11. dino salustri 14 febbraio 2018
  12. Stefano Lovati Stefano Lovati 14 febbraio 2018
  13. dino salustri 17 febbraio 2018
  14. Stefano Lovati Stefano Lovati 18 febbraio 2018
  15. dino salustri 18 febbraio 2018
  16. spips77 spips77 20 giugno 2018
  17. Stefano Lovati Stefano Lovati 20 giugno 2018
  18. nivaste 26 ottobre 2018
    • Stefano Lovati Stefano Lovati 29 ottobre 2018
  19. nivaste 31 ottobre 2018
  20. nivaste 31 ottobre 2018
  21. Stefano Lovati Stefano Lovati 1 novembre 2018
  22. nivaste 1 novembre 2018

Scrivi un commento

EOS-Academy
Abbonati ora!