Telegram Bot ESP8266

Telegram Bot ESP8266 è il primo articolo che dedico all’interazione tra il micro controllore esp8266 e l’App telegram.

Telegram Bot ESP8266 arduino

L’argomento non è nuovo, in tanti anno trattato questo argomento prima e mi hanno incuriosito al punto da provare alcune delle librerie disponibili.

Troverai, cercando tra le librerie disponibili, la UniversalTelegramBot:

Telegram Bot ESP8266 arduino library

che puoi installare cliccando sul pulsante “Install”.

Telegram Bot ESP8266

Come primo esempio di sketch della Telegram Bot ESP8266 puoi usare uno degli esempi che la libreria ti mette a disposizione: “FlashLED”:

Telegram Bot ESP8266 arduino example FlashLed

che puoi selezionare cliccando nei menu come in figura.

A questo punto ti servono i seguenti dati per utilizzare lo sketch:Telegram Bot ESP8266 credenzialiI primi due campi WIFI_SSID e WIFI_PASSWORD riguardano le credenziali della rete WiFi in cui vorrai collegare il dispositivo ESP8266.

In merito al BOT_TOKEN ti servirà una informazione che puoi avere direttamente da Telegram.

Crea un bot Telegram

Ci sono moltissimi tutorial on line su come creare un nuovo Bot Telegram, ma ho voluto probvare personalmente e documentare i passaggi per lasciarne una traccia.

Iniziamo dall’App Telegram, dopo averla scaricata e installata puoi cercare nei canali disponibili il padre dei bot: BotFather

Telegram Bot ESP8266 bot father research

una volta iscritto al canale dovrai solo seguire le istruzioni che leggerai, partendo dal comando /start:

Telegram Bot ESP8266 bot father instruction

e cliccando su /newbot:

Telegram Bot ESP8266 bot father step 1

ti sarà chiesto di scegliere il nome del tuo bot.

Scegline uno che non sia già presente, l’operazione non è delle più semplici, il mio consiglio è scegliere un nome composto.

Il passaggio successivo è creare un username che termini con la parola “_bot”:

Telegram Bot ESP8266 bot father

dopo l’invio ti verranno restituite le credenziali per accedere al tuo nuovo bot e, sopratutto, il Token che ti servirà per far comunicare lo sketch su telegram Bot ESP8266 ed il bot stesso.

Per i comandi e le APi messe a disposizione da Telegram puoi far riferimento a questa pagina.

Per accedere al tuo nuovo bot puoi cliccare direttamente sul link rapido nella descrizione: “t.me/[username del bot]

Vedrai questa schermata:

Telegram Bot ESP8266 first bot created

e cliccando su “START” accederai al bot.

Passa ora a riportare nello sketch i dati che hai raccolto.

Sketch Telegram Bot ESP8266

Lo sketch telegram Bot ESP8266 usato in questo test è l’esempio che hai selezionato su:

/*******************************************************************
    A telegram bot for your ESP8266 that controls the 
    onboard LED. The LED in this example is active low.

    Parts:
    D1 Mini ESP8266 * - http://s.click.aliexpress.com/e/uzFUnIe
    (or any ESP8266 board)

      = Affilate

    If you find what I do useful and would like to support me,
    please consider becoming a sponsor on Github
    https://github.com/sponsors/witnessmenow/


    Written by Brian Lough
    YouTube: https://www.youtube.com/brianlough
    Tindie: https://www.tindie.com/stores/brianlough/
    Twitter: https://twitter.com/witnessmenow
 *******************************************************************/

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

// Wifi network station credentials
#define WIFI_SSID "[Your WiFi SSID]"
#define WIFI_PASSWORD "[Your WiFi password]"
// Telegram BOT Token (Get from Botfather)
#define BOT_TOKEN "[Telegram Bot token]"

const unsigned long BOT_MTBS = 1000; // mean time between scan messages

X509List cert(TELEGRAM_CERTIFICATE_ROOT);
WiFiClientSecure secured_client;
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
unsigned long bot_lasttime; // last time messages' scan has been done

const int ledPin = LED_BUILTIN;
int ledStatus = 0;

void handleNewMessages(int numNewMessages)
{
  Serial.print("handleNewMessages ");
  Serial.println(numNewMessages);

  for (int i = 0; i < numNewMessages; i++)
  {
    String chat_id = bot.messages[i].chat_id;
    String text = bot.messages[i].text;

    String from_name = bot.messages[i].from_name;
    if (from_name == "")
      from_name = "Guest";

    if (text == "/ledon")
    {
      digitalWrite(ledPin, LOW); // turn the LED on (HIGH is the voltage level)
      ledStatus = 1;
      bot.sendMessage(chat_id, "Led is ON", "");
    }

    if (text == "/ledoff")
    {
      ledStatus = 0;
      digitalWrite(ledPin, HIGH); // turn the LED off (LOW is the voltage level)
      bot.sendMessage(chat_id, "Led is OFF", "");
    }

    if (text == "/status")
    {
      if (ledStatus)
      {
        bot.sendMessage(chat_id, "Led is ON", "");
      }
      else
      {
        bot.sendMessage(chat_id, "Led is OFF", "");
      }
    }

    if (text == "/start")
    {
      String welcome = "Welcome to Universal Arduino Telegram Bot library, " + from_name + ".\n";
      welcome += "This is Flash Led Bot example.\n\n";
      welcome += "/ledon : to switch the Led ON\n";
      welcome += "/ledoff : to switch the Led OFF\n";
      welcome += "/status : Returns current status of LED\n";
      bot.sendMessage(chat_id, welcome, "Markdown");
    }
  }
}


void setup()
{
  Serial.begin(115200);
  Serial.println();

  pinMode(ledPin, OUTPUT); // initialize digital ledPin as an output.
  delay(10);
  digitalWrite(ledPin, HIGH); // initialize pin as off (active LOW)

  // attempt to connect to Wifi network:
  configTime(0, 0, "pool.ntp.org");      // get UTC time via NTP
  secured_client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
  Serial.print("Connecting to Wifi SSID ");
  Serial.print(WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.print(".");
    delay(500);
  }
  Serial.print("\nWiFi connected. IP address: ");
  Serial.println(WiFi.localIP());

  // Check NTP/Time, usually it is instantaneous and you can delete the code below.
  Serial.print("Retrieving time: ");
  time_t now = time(nullptr);
  while (now < 24 * 3600)
  {
    Serial.print(".");
    delay(100);
    now = time(nullptr);
  }
  Serial.println(now);
}

void loop()
{
  if (millis() - bot_lasttime > BOT_MTBS)
  {
    int numNewMessages = bot.getUpdates(bot.last_message_received + 1);

    while (numNewMessages)
    {
      Serial.println("got response");
      handleNewMessages(numNewMessages);
      numNewMessages = bot.getUpdates(bot.last_message_received + 1);
    }

    bot_lasttime = millis();
    Serial.println(bot_lasttime);
  }
}

nei prossimi esperimenti analizzeremo linea per linea lo sketch di esempio, in questo primo passaggio le uniche righe che dovrai modificare sono:

linee 28-29: in cui sostituire tra le virgolette le credenziali della tua rete WiFi;

linea 31: in cui inserire il token del bot appena creato.

Una volta caricato lo sketch sul tuo ESP8266 non devi far altro che aprire il monitor seriale ed osservare quello che accade:

Telegram Bot ESP8266 start response

l’esp8266 si collegherà alla tua rete WiFi e riceverà un indirizzo IP valido,  che leggi nel monitor seriale.

Poi contatterà il bot e verificherà che tu abbia inviato il comando “/start” rispondendo con le istruzioni che trovi definite nello sketch alle linee 85-90.

A questo punto non devi far altro che inviare un comando di quelli accettati dal Bot, ad esempio “/ledon” ed al ricevimento del comando il led della WeMos si accenderà:

Telegram Bot ESP8266 arduino FlashLed test

inviando il comando “/ledoff” potrai spegnare tale led.

Nota che ad ogni comando inviato lo sketch risponde inviando un messaggio che il telegram bot ESP8266 visualizza sull’app Telegram.

Nei prossimi esperimenti proveremo a modificare lo sketch in modo da inviare e ricevere altre informazioni attraverso il Bot.

L’esperimento telegram bot ESP8266 è uno degli esempi che puoi collocare in quello che viene comunemente definito IoT ( Internet of Things ) e che imparerai a gestire e modificare seguendo i miei tutorial.

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/telegram-bot-esp8266.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.