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.
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:
- 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;
- 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;
- utilizzando un servizio di messaggistica istantanea come Telegram (Figura 2), e facendo affidamento su un Bot.
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.
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.
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.
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).
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:
Riferimenti
[1] “Using a Telegram Bot and a Demo Board to experiment with home automation” pubblicato su Open Electronics
Grande articolo che mette in evidenza un fattore estremamente importante, ossia quello di controllare ESPertino da remoto. Una possibilità indispensabile quando il dispositivo si trova lontano da chi lo deve utilizzare.
Complimenti Stefano per questo interessante articolo! Su ESPertino potete trovare varie informazioni qui per come averla http://it.emcelettronica.com/espertino-la-nuova-scheda-per-liot-in-omaggio-ai-nuovi-abbonati e qui le varie informazioni tecniche principali http://it.emcelettronica.com/la-nuova-scheda-espertino-per-liot
Salve! Intanto grazie per questo articolo molto chiaro ed esaustivo. Ho provato l’esempio sul mio Espertino, ma dopo una decina di messaggi scambiati inizia a dare errori di tipo “out of memory”. Leggendo fra le diverse issues aperte in github/espressif/arduino-esp32, sembrerebbe che sia dovuto alla gestione della connessione SSL che in caso di errori non viene correttamente chiusa. Partendo da questo presupposto, ho preso spunto dallo sketch proposto ed ho sviluppato una mia versione di libreria semplificata che sembra funzionare a dovere sia su ESP32 che su ESP8266 (per ora limitata ai soli messaggi di testo). Sperando di fare cosa gradita la potete trovare a questo link: https://github.com/cotestatnt/ESPTelegramBOT
Grazie mille per l’ottimo lavoro svolto e per avere scelto di condividerlo su GitHub (nel pieno rispetto della filosofia open source). Vedo anche che hai realizzato subito che l’sdk per il modulo ESP32 (e quindi per la board ESPertino) è ancora in fase di stabilizzazione e si stanno apportando alcuni fix. Anche il plugin per Arduino non ha terminato il suo sviluppo (è un po’ che non controllo, ma mi sembra che la AnalogWrite non sia stata ancora implementata). Si tratta comunque di un progetto molto valido, con enormi potenzialità (di apprendimento e non solo) a un costo praticamente irrisorio.
Salve, buone Feste a tutti,
ho caricato questo sketch ma all’avvio, dopo la connessione alla rete wireless, sul monitor seriale appare:
====================
GET Update Messages
Free heap before TLS 137424
Seeding the random number generator
Setting up the SSL/TLS structure…
Performing the SSL/TLS handshake…
SSL – No CA Chain is set, but required to operate
MbedTLS message code: -30336
Cleaning SSL connection.
failed to update
====================
Ho cercato in rete ma non ci capisco granchè. Arduino gira su Debian 64 bit (kernel 4.13.0-1-amd64). Grazie per qualsiasi aiuto possiate darmi.
Massimo
Ciao e Buone Feste anche a te. L’errore da te riscontrato si riferisce alla libreria MbedTLS, cioè la libreria open source utilizzata nell’ambiente di sviluppo di ESPertino (e ESP32 in generale) per realizzare una connessione sicura. In rete ho trovato problemi simili (vedi ad esempio il seguente, legato ai certificati: https://github.com/espressif/arduino-esp32/issues/279 e https://github.com/espressif/arduino-esp32/issues/265). A suo tempo non avevo riscontrato problemi di questo tipo, compilando però con l’ambiente ESP-IDF di Espressif Systems. Tu hai forse compilato con l’ambiente per ESPertino? Puoi postare il link dal quale hai scaricato l’ambiente SDK?
Ciao, grazie per la risposta.
Ho installato la librerie per ESPertino da https://github.com/EMCelettronica/ESPertino scaricando il file .zip e importando la libreria in Arduino da Sketch->#include libreria->Aggiungi libreria da file .ZIP selezionando poi la scheda ESPertino.
Chiedo scusa, ho fatto confusione: non ho scaricato il file zip ma ho seguito le istruzione di installazione relative a Debian/Ubuntu e selezionato al termine la scheda ESPertino per poter lavorare con l’applicazione.
Ciao gasmas, il problema risiede non tanto nello sketch, quanto nell’ambiente di sviluppo Arduino per ESPertino. Purtroppo questo SDK non è molto aggiornato e per questa applicazione occorre pertanto utilizzare l’ambiente di sviluppo ufficiale di Espressif per Arduino; trovi il link per il download sia nel testo dell’articolo (“istruzioni di installazione”), che qui: https://github.com/espressif/arduino-esp32. L’installazione è ovviamente analoga all’SDK di ESPertino. Ti consiglio di salvare quest’ultimo, perchè l’SDK di Espressif utilizza lo stesso percorso su disco (../Arduino/hardware/espressif/esp32..). Puoi quindi fare una copia di quello che hai attualmente installato e poi procedere con l’installazione di quello di Espressif (che come ti dicevo è molto aggiornato, con fix quasi giornalieri).A questo punto dovresti avere un’applicazione in grado di colloquiare con l’app Telegram. Per precauzione ho ripetuto lo stesso test qualche minuto fa: con l’SDK ESPertino mi dava il tuo stesso errore, con l’SDK Espressif invece è OK. Qualora dovessi poi sperimentare dei problemi di stabilità (blocchi sporadici) puoi fare riferimento ai post di Tolentino Cotesta (su questo stesso thread), che ha brillantemente risolto anche quel problema.
Dimenticavo: con l’SDK di Espressif, prima di compilare lo sketch devi configurare l’IDE (Tools->Board) selezionando la board “ESP32 Dev Module”, che produce un codice compatibile con ESPertino.
Ora ora funziona benissimo con le tue indicazioni.
Grazie mille ancora e buon anno.
Grazie gasmas, buon anno anche a te.
Salve,
ho seguito la guida, ma espertino non riceve i messaggi da Telegram e non restituisce nessun errore
18:18:44.055 GET Update Messages
18:18:44.974 …. connected to server
18:18:45.052 Sent Update request messages up to : 0
18:18:45.052 no new messages
Come posso fare?
Devi anzitutto verificare che BOTtoken, BOTname, BOTusername e ID_TELEGRAM siano correttamente impostati nello sketch, seguendo le linee guida indicate ell’articolo. Dopo la connessione alla rete WiFi, lo sketch dovrebbe emettere i log che hai indicato, ripetuti ogni secondo circa. A questo punto basta aprire il bot creato in Telegram e dare il comando /start
Questa applicazione è davvero interessante ma ho riprovato più volte e ottengo lo stesso errore, per cortesia potreste aiutarmi?
/Users/takeoff/Downloads/EspertinoTelegramBot/TelegramBot/TelegramBot.ino:3:32: fatal error: ESP8266TelegramBOT.h: No such file or directory
compilation terminated.
Più di una libreria trovata per “WiFi.h”
Usata: /private/var/folders/_w/r60y4z0s4ndcpj5jcc7yjzlc0000gp/T/AppTranslocation/1801C787-5184-426E-B516-8515C5680E00/d/Arduino.app/Contents/Java/libraries/WiFi
Non usata: /Users/takeoff/Documents/Arduino/hardware/espressif/ESPertino/libraries/WiFi
exit status 1
Errore durante la compilazione per la scheda ESPertino.
Come indicato nell’articolo, devi usare l’ambiente di sviluppo arduino-esp32 di Espressif Systems (https://github.com/espressif/arduino-esp32) e non quello di ESPertino. Prima di installarlo, ti conviene fare un backup/copia di quello che stai utilizzando ora e poi rimuoverlo o rinominarlo. Devi fare in questo modo perchè entrambi gli ambienti di sviluppo utilizzano lo stesso percorso (../hardware/espressif/esp32) e ovviamente non puoi usarli contemporaneamente. Dovresti poi rimuovere/rinominare (previo backup se la rimuovi) la libreria WiFi di Arduino posta come nel tuo log (/private/var…). Non hai bisogno di quella libreria, che comunque non va bene in quanto probabilmente fa riferimento a uno shield WiFi di Arduino. Fatte queste operazioni, apri l’IDE Arduino e seleziona la board “ESP32 Dev Module”, compila e scarica sulla board.
Problemi con il certificato.Che fare?
WiFi connected
IP address:
192.168.1.14
Initial temperature is: -1000.00
GET Update Messages
Free heap before TLS 137792
Seeding the random number generator
Setting up the SSL/TLS structure…
Performing the SSL/TLS handshake…
SSL – No CA Chain is set, but required to operate
MbedTLS message code: -30336
Quale board hai selezionato nell’ IDE Arduino per conpilare?
Quale board hai selezionato nell’ IDE Arduino per conpilare?
Grazie Stefano e complimenti ancora per linteressante articolo.
Ho selezionato Espertino con cui ho provato anche le altre applicazioni wifi (,web server etc) e che funzionano perfettamente.
Mi pare di capire che devo reinstallare di nuovo l’ide di Arrduino integrandole con espressif, giusto ?
Uso gia i bot telegram con phython, mi piacerebbe usarli con espertino( si aprirebbe un mondo)
Essendo alle prime armi sono graditi consigli dettagliati(già cortesemente e utilmente ricevuti in fase di installazione della board)
Ciao Dino, ti ho fatto quella domanda precisa proprio per sapere quale ambiente di sviluppo hai utilizzato per compilare lo sketch del Telegram Bot. Il produttore del modulo ESP-Wroom-32 (Espressif Systems) ha sviluppato un SDK per Arduino (il link lo trovi scorrendo i commenti a questo stesso articolo) che viene mantenuto costantemente aggiornato, correggendo i bachi scoperti o segnalati dagli utenti. Questo è l’ambiente che devi utilizzare per compilare lo sketch del Telegram Bot. L’ambiente di sviluppo ESPertino non è altro che un branch (o forse meglio uno spin-off) del precedente, con la differenza che non è costantemente aggiornato (lo vedi dagli ultimi aggiornamenti su GitHub, che risalgono a mesi fa): quest’ultimo sdk va bene per la maggior parte delle applicazioni, ma potrebbe non contenere dei fix che invece l’ambiente Arduino ESP32 di Espressif Systems ha già incorporato. Questo è proprio il nostro caso, relativo a un problema sui certificati, risolto nell’SDK Espressif.
Riassumendo: compila lo sketch con l’ambiente Arduino Espressif Systems (dovrai selezionare, o troverai già selezionata, la board “ESP32 Dev Module”). Poichè sei già esperto di Bot Telegram, saprai già come impostare il token e l’id all’interno del codice. Vedrai che riuscirai a collegarti senza problemi alla board con l’app Telegram.
Nota: l’sdk di Espressif Systems va installato in …\hardware\espressif\esp32 quindi verifica prima che non vi sia possibilità di conflitto con l’sdk di ESPertino che hai già installato (al limite rinonima o sposta quest’ultimo). l’SDK di Espressif va bene per compilare sia questo che gli altri sketch per ESPertino, come il server WiFi.
Confermo Stefano Ora é tutto ok,grazie alla tua risposta e anche a quelle precedenti , che avrei dovuto leggere con più attenzione(forse se organizzassimo un forum..).Ho trovato comunque anche molto utile riferirmi al Github per l’installazione.
Volevo implementare questo progettino, a parte il problema di compilazione che non ho ancora affrontato, una volta creato il BOT ho il token, name e username.. mi manche l’ID_Telegram.. ma a questo punto finchè non collego il tutto e compilo non riesco ad ottenere l’ID_Telegram oppure inviando /start sulla chat dovrei avere risposta lo stesso?
No devi prima compilare lo sketch inserendo tutti i dati tranne Id telegram. Alla prima connessione (comando /start sull’app) estrai dal log della porta seriale della board l”id telegram come indicato nell’articolo. Aggiorna poi lo sketch di conseguenza, compikalo e scaricalo sulla board.
Buongiorno,
caricando lo sketch relativo al Bot per Telegram con ESPertino del giugno 2018, mi viene segnalato, tra l’altro, questo iniziale errore che non capisco. Potete aiutarmi? Grazie
Cristiano Dall’Olio
In file included from C:\EOS\Sketch\Plugin ArduinoCore ESP32_Scheda EspDevModule\TelegramBot\TelegramBot.ino:5:0:
C:\EOS\arduino-1.8.5\hardware\espressif\esp32\libraries\OneWire\src/OneWire.h:130:2: error: #error “Please define I/O register types here”
#error “Please define I/O register types here”
^
Più di una libreria trovata per “WiFi.h”
Usata: C:\EOS\arduino-1.8.5\hardware\espressif\esp32\libraries\WiFi
Non usata: C:\EOS\arduino-1.8.5\libraries\WiFi
Più di una libreria trovata per “ESP8266TelegramBOT.h”
Usata: C:\EOS\arduino-1.8.5\hardware\espressif\esp32\libraries\ESP8266TelegramBOT
Non usata: C:\Users\Papà\Documents\Arduino\libraries\ESP8266-TelegramBot-master
Più di una libreria trovata per “OneWire.h”
Usata: C:\EOS\arduino-1.8.5\hardware\espressif\esp32\libraries\OneWire
Non usata: C:\Users\Papà\Documents\Arduino\libraries\OneWire-master
exit status 1
Errore durante la compilazione per la scheda ESP32 Dev Module.
Buongiorno,
anzitutto immagino che si riferisse allo sketch originale, datato giugno 2017 (e non 2018). Per eseguire correttamente la compilazione occorre (confronti i passi con quanto ha fatto lei):
1. installare (seguendo le istruzioni riportate su github) il plugin “Arduino Core for ESP32”: https://github.com/espressif/arduino-esp32 (utilizzare git per clonare il repository, scaricando lo zip mi sembra di ricordare che non funzioni correttamente)
2. selezionare in Arduino IDE la board “Esp32 Dev Module”
3. se non l’ha già utilizzata in precedenza per qualche altro sketch, deve installare la libreria OneWire, richiesta dallo sketch (http://playground.arduino.cc/Learning/OneWire)
4. Nella riga 3 dello sketch TelegramBot.ino sostituisca la riga originale
#include
con:
#include “ESP8266TelegramBOT.h”
Con le precedenti versioni di plugin Arduino Core non dava errore, probabilmente ora è cambiato il valore di default di qualche opzione di compilazione e non trova l’include
5. lanci ora la compilazione che dovrebbe andare a termine correttamente (ho appena verificato ciò)
Ottimo Lovati grazie mille.
Magari se può spiegarmi la differenza tra un #include con “” ed uno con . Grazie.
La differenza dipende dal compilatore. In generale, utilizzando le “” si predilige la ricerca dei file header nella directory corrente, mentre utilizzando <> si predilige la ricerca dei file header nelle directory di sistema (file header del compilatore e delle librerie). Infatti, per includere gli header delle librerie Arduino si usano <>.
Ancora grazie
Ho provato ad utilizzare questa idea del Bot Telegram ma dopo qualche messaggio mi va in errore:
18:03:42.644 -> GET Update Messages
18:03:42.682 -> failed to update
e non ne esce fino ad un reset
Ho usato l’SDK: https://github.com/espressif/arduino-esp32.
Qualche suggerimento?
Ho provato ad utilizzare questa idea del Bot Telegram ma dopo qualche messaggio mi va in errore:
18:03:42.644 -> GET Update Messages
18:03:42.682 -> failed to update
e non ne esce fino ad un reset
Ho usato l’SDK: https://github.com/espressif/arduino-esp32.
Inoltre ho notato che l’update_id cambia ogni messaggio che invio via telegram.
Se uso quello mi va subito in errore al successivo comando inviato dall’App:
SEND Message
19:06:32.826 -> …. connected to server
19:06:33.869 -> Retry
19:06:34.817 -> …. connected to server
19:06:35.883 -> Retry
19:06:37.026 -> …. connected to server
19:06:38.090 -> Retry
19:06:39.010 -> …. connected to server
se invece metto la chat_id funziona per un po e poi va in “failed to update”
Qualche suggerimento?
Ciao migreco, potresti provare a utilizzare la libreria sviluppata da Tolentino Cotesta, che ha risolto un problema di connessione (lo trovi tra i primi commenti all’articolo). L’SDk che stai utilizzando è quello corretto, per la fase di configurazione dello sketch fai riferimento all’articolo (vedi codice con il commento “// Initialize Telegram BOT” dove trovi le indicazioni del caso).
Grazie… con la nuova libreria funziona tutto
Con la nuova libreria si risolve anche il problema della chat_id che non è più necessaria, di conseguenza anche la parte “//initialize Telegram Bot//“ è ridotta
Ottimo!!! L’aspetto positivo di poter contare su un’ampia comunità di utenti è che spesso qualcuno ha già trovato la soluzione a dei problemi che inevitabilmente si possono incontrare utilizzando diverse tipologie di librerie.
Salve,
come prima cosa vorrei dire che il progetto presentato è molto interessante, per questo ho da poco iniziato l’utilizzo della board Espertino per l’interfacciamento con Telegram.
Ho dovuto lavorare non poco per riusicre a cariare il firmware sulla scheda, ovviamente dopo aver seguito i vari commenti e domande dei vari utenti e le riposte da loro ricevute, sicuramente efficaci per il raggiungimento dello scopo finale.
Ad ogni modo vorrei segnalare che l’ambiente di sviluppo mi segnaa dei warning che riporto di seuito, anche se la compilazione viene eseguita.
C:\Users\PIERLUIGI\Documents\Arduino\SKETCH ESPERTINO\ELETTRONICA OPEN SOURCE\EspertinoTelegramBot\TelegramBot\TelegramBot.ino: In function ‘float getTemp()’:
C:\Users\PIERLUIGI\Documents\Arduino\SKETCH ESPERTINO\ELETTRONICA OPEN SOURCE\EspertinoTelegramBot\TelegramBot\TelegramBot.ino:179:8: warning: unused variable ‘present’ [-Wunused-variable]
byte present = ds.reset();
mentre alla fine dell’upload del firmware sulla scheda compaioni i seguenti messaggi
Trovata libreria non valida in C:\Users\PIERLUIGI\Documents\Arduino\hardware\espressif\esp32\libraries\OneWire-master: Nessun header file (.h) trovato in C:\Users\PIERLUIGI\Documents\Arduino\hardware\espressif\esp32\libraries\OneWire-master
Trovata libreria non valida in C:\Users\PIERLUIGI\Documents\Arduino\hardware\espressif\esp32\libraries\OneWire-master: Nessun header file (.h) trovato in C:\Users\PIERLUIGI\Documents\Arduino\hardware\espressif\esp32\libraries\OneWire-master
Oltre a questo, avrei da porre una semplice domanda, cui saprete dare sicuramente risposta a me che è la prima volta che utilizzo Telegram.
Nell’articolo relativo al progetto, ad un certo punto viene detto di andare su Telegram dopo aver scaricato il firmware ed aver aperto il monitor seriale settato a 115.200 di baud-rate, e di scrivere il comando /start.
Domanda che forse vi suonerà banale…..dove devo scrivere ? nella chata relativa al Bot Father ?
Ad ogni modo, quello che mi compare sul monitor seriale è quello che riporto di seguito:
“GET Update Messages
…. connected to server
Sent Update request messages up to : 0
no new messages”
Dove sbaglio ?
Ringrazio per la disponibilità, buona giornata,
Pierluigi
Salve Pierluigi,
i warning in questo caso non sono significativi e li può ignorare. Il primo si riferisce a una variabile non utilizzata e gli altri a librerie che l’IDE Arduino segnala come non valide anche se in realtà non creano problemi. Ciò può avvenire quando si installano nuove board nell’IDE tramite il board manager integrato. I comandi Telegram, come lo /start, devono essere inviati dal client Telegram che si utilizza: può essere la versione desktop se si utilizza un PC, oppure l’app se si usa lo smartphone o il tablet. Provi ad ingrandire la Figura 7 di questo articolo: al centro vedrà proprio una screenshot della versione desktop del client Telegram. Sulla destra sono presenti i comandi (come lo /start), mentre a sinistra sono visualizzate le risposte che arrivano dalla scheda ESPertino.
Salve,
stavo cercando proprio un progetto simile a questo. Per il mio scopo non è perfetto, ma è davvero un buon punto di partenza da dove cominciare.
Solamente non capisco perchè mi da problemi la libreria ESP8266TelegramBOT.h
Se sapete come aiutarmi ve ne sarei eternamente grato
Salve,
da qualche mese utilizzando la libreria UniversalTelegramBot.con (Sotto Ubuntu 24.04) per uno sketch espertino quando lancio la compilazione ottengo questo errore:
…/libraries/UniversalTelegramBot/src/UniversalTelegramBot.h:41:9: error: ISO C++ forbids declaration of ‘byte’ with no type [-fpermissive]
41 | typedef byte (*GetNextByte)();
| ^~~~
Ho provato ad aprire una segnalazione su github (https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot/issues/360) ma da mesi non ottengo risposta.
Esiste qualche altra libreria compilabile?
Grazie in anticipo.
Buongiorno,
Certamente.
L’errore che stai riscontrando è causato dall’uso della parola chiave byte, che non è definita nello standard ISO C++ senza includere un’appropriata libreria. Questo errore è comune quando si lavora su piattaforme come Arduino, dove byte è un tipo definito in alcune librerie specifiche di Arduino, ma potrebbe non essere riconosciuto in contesti C++ più generici o su piattaforme diverse come Ubuntu.
Per risolvere l’errore, puoi fare una delle seguenti cose:
Aggiungere #include (o un file equivalente che definisce byte) all’inizio del tuo file sorgente. Questo include la definizione di byte utilizzata in ambiente Arduino:
#include
Questo dovrebbe funzionare se la libreria che stai usando è pensata per essere utilizzata con codice Arduino e la piattaforma di sviluppo che stai usando supporta Arduino.
Ridefinire byte: Se non puoi usare Arduino.h (ad esempio su un ambiente desktop), puoi definire tu stesso il tipo byte nel tuo codice. In molti casi, byte è semplicemente un alias per unsigned char. Puoi definire byte come segue:
typedef unsigned char byte;
Questo dovrebbe risolvere l’errore di compilazione.
Cercare una libreria alternativa: Se preferisci usare un’altra libreria, puoi cercare un’alternativa più compatibile con la tua configurazione. Alcune alternative alla libreria UniversalTelegramBot potrebbero includere:
CTBot: Un’altra libreria per interfacciarsi con Telegram su Arduino.
AsyncTelegram: Se preferisci lavorare in modo asincrono.
Per l’ambiente che stai utilizzando (Ubuntu), potresti anche considerare l’utilizzo delle API di Telegram tramite un wrapper Python come python-telegram-bot, che potrebbe risultare più semplice da configurare su sistemi desktop.
Fammi sapere se una di queste soluzioni risolve il problema o se hai bisogno di altre informazioni!