Chat Bot Telegram con ESP8266 programado con Arduino

Este es un verdadero tutorial para construir un chat bot Telegram con el ESP8266-01 que le permite conectar a internet y poder controlar un Relé o punto de luz según necesidades. Comandado desde un celular y en cualquier parte del mundo.

Chat Bot Telegram con ESP8266 programado con Arduino-WIFI---Tutorial

Sencillo chat bot telegram con ESP8266 pero potente.

Más que tutorial le podemos llamar proyecto de control de un Relé controlado con el ESP8266 mediante comandos desde la APP Telegram. Muy fácil de realizar y manejar.

Si desean pueden comenzar con el vídeo para tener mejor idea de como funciona.

En este tutorial usamos una biblioteca Arduino de código abierto, que le permite construir un «Telegram Bot». Le mostraré cómo instalar la biblioteca en Arduino IDE y hacer un proyecto de ejemplo con la biblioteca totalmente funcional mientras le doy información sobre qué son los bots y cómo funcionan.

¿Que voy a aprender con este tutorial?

En este tutorial aprenderás:

  • Conocimientos generales sobre bots.
  • Cómo instalar la biblioteca TelegramBot en Arduino IDE.
  • Cómo usar la biblioteca TelegramBot y cómo usar sus funciones.
  • Cómo aplicar el proyecto Telegram Bot usando las funciones de la biblioteca.
  • Cómo crear un bot desde Telegram.
  • Activar y desactivar un Relé o LED con los mensajes desde la App Telegram.
  • Cómo adicionar un botón pulsador al proyecto y recibir información del estado del Relé.

Requisitos para el bot chat telegram esp8266

Los requisitos para este proyecto son:

  • Módulo FTDI (convertidor USB a TTL), Arduino o equivalente para programar el ESP
  • Arduino IDE ( Descargar aquí )
  • Biblioteca UniversalTelegramBot Arduino ( Descargar aquí )
  • Módulo ESP8266 Wifi, placa de pruebas (opcional), 4 cables de puente, pulsador, etc.
  • Aplicación de mensajería Telegram (de Google, iOS o Escritorio)
  • Cuenta de Telegram.
  • Telegram bot token (Consulte la guía para obtener el token).

Dificultad del proyecto

Esta dificultad de tutoriales es:

  • Baja (solo conocimientos básicos de Arduino y ESP)

Contenido del tutorial chat bot telegram esp8266

¿Qué son los bots y cómo funcionan?

Los bots son programas informáticos que realizan una tarea automatizada. Hay tipos de bots como bots de internet, bots de juegos, bots de chat, rastreadores web, bots sociales. Todos los bots tienen diferentes propósitos, algunos buenos y otros maliciosos. Los bots buenos generalmente se implementan para fines de conveniencia, como los bots de búsqueda, los bots de chat o los bots sociales que ayudan al usuario. Los bots maliciosos suelen ser virus, bots de spam o bots que lanzan ataques DDoS.

Un ejemplo prático de un bot de chat es el que muchas empresas utilizan a través de WhatsApp o Telegram para brindar ayuda o información a los clientes.

Como vamos a implementar un bot de chat, explicaré cómo funciona un bot de chat. Un chat bot es un software que se comunica con un usuario, ya sea con aprendizaje automático o mediante reglas inteligentes.

El primer tipo de bot utiliza principios de aprendizaje automático para recopilar datos y aprender a comunicarse desde cero. No tiene un comando planificado previamente, solo se enseña a sí mismo.

El segundo tipo de bot de chat es el que necesita cierto conjunto de disparadores para responder comandos planificados previamente. Nosotros estraríamos en este segundo apartado.

Cómo instalar la biblioteca universalTelegramBot

Algunos le aconsejarán de que instale la bliblioteca en el IDE Arduino y así poder compilar fácilmente el Sketch (boceto, programa, como mejor le guste) que usaremos. Yo les voy a proponer otra cosa y será mucho más fácil e intentamos no generar basura en las biliotecas del IDE.

Si usted va a usar esta biblioteca con frecuencia, es mejor que la instale en la carpeta de librerias del IDE, pero, si es solo casual, es mejor instalarla en la misma carpeta que guardamos el sketch.

Recurede siempre si en nuevo en Arduino que el sketch a de estar dentro de una carpeta y tanto la carpeta como el sketch han de tener el mismo nombre. Por ejemplo:

A nuestro proyecto le llamaremos Telegram, así de simple (siempre es mejor lo simple a las complicaciones).

Entonces vamos a crear en nuestro computador una carpeta llamada Telegram y dentro de esta carpeta guardaremos los archivos del proyecto.

Carpeta-Telegram-Bot-ESP8266

A continuación, descargue la biblioteca GitHub, directamente desde su autor Brian Lough.

UniversalTelegramBot

Y las guarda en la carpeta que hemos creado para el proyecto.

Librerias-UnivarsalTelegramBot

Puede guardar solo los archivos necesarios o todo el ZIP descargado desde la página del autor.

Hasta aquí ya tendríamos lista la biblioteca, pero si usted es de aquellos que prefieren guardar la biblioteca en el apartado de librerías del IDE, siga estos pasos.

Abra Arduino IDE. Luego vaya y seleccione Programa (Sketch) –> Incluir libreria –> Añadir biblioteca .ZIP. Ver imagen siguiente:

Incluir-biblioteca-en-IDE-Arduino

  1. Elija el archivo Universal-Arduino-Telegram-Bot-master.zip que ha descargado desde la página del autor y haga clic para Abrir.

Después de esto ya tendrá la librería incluida en el IDE de Arduino.

Comenzamos el hardware del proyecto

Para realizar las pruebas del proyecto vamos a utilizar un ESP8266-01, sí, este super diminuto PCB con un corazón súper-grande y que se puede encontrar en el mercado por apenas 2,3 dólares y que funciona muy bien.

Ya sé que hay muchos expertos que prefieren otros hermanos de esta familia mucho más potente y con conexiones por doquier, pero si vamos a utilizar solo un Led y un pulsador, ¿para qué complicarnos si este funciona?

También hay que decir que si usted desea más prestaciones, puede optar por un ESP8266-12E que más adelante les presentaré para otros proyectos, pero de momento este está bien.

Para grabar el firmware al ESP de este proyecto yo he usado un FTDI (Chino y económico) que tengo para situaciones sencillas en las que grabo y leo datos por el puerto serie. Yo uso este:

FTDI CH340 USb to TTL

Este convertidor me permite programar fácilmente el ESP8266 porque tiene posibilidad de entregar 3.3V al ESP y el puerto serie también trabaja a 3.3V. No digo que sea el mejor, tan sólo que de momento a mi me funciona bien para los módulos ESP y otros que requieren 3.3V.

El corazón del proyecto es un ESP8266-01, el más básico de todos pero me funciona muy bien.

ESP8266-01 Modulo WIFI

Y además una resistencia de 10K, un pulsador y diodo LED, bueno son dos resistencias, una de 10K y otra para el Led que yo uso de 1K para no cargar mucho el ESP8266. Lo importante es ver que funciona y cuando le des una aplicación ya será con otro circuito.

resistencia-electrica-10k-ohm-14-w

El esquema del proyecto Chat Bot Telegram con ESP8266 (Alimentado a 3,3V) para probarlo, sería aproximadamente este:

diagrama-del-bot-chat-telegram-esp8266

Al usar poca carga en los componentes pude alimentar con el mismo conversor USB todo el circuito y efectuar las pruebas.

Para que entiendan un poco el ESP8266-01 les dejo un diagrama de los pines

ESP8266-Pins-conexion

Y una breve descripción de los pines y funciones:

Los pines están dispuestos en dos filas, teniendo 4 en cada fila. Algunos modelos tienen una descripción de pin en la PCB, lo que lo hace simple. En la fila superior puedes encontrar los siguientes pines de izquierda a derecha:

  1. GND (tierra de la fuente de alimentación)
  2. GPIO2 (E / S digital programable)
  3. GPIO0 (E / S digital programable, también se usa para los modos BOOT)
  4. RX – Canal de recepción UART

En la parte inferior (segunda fila) puede encontrar:

  1. TX – Canal de transmisión UART
  2. CH_EN (Para conectar el WIFI conectarlo a 3.3V directamente o través de una resistencia)
  3. REST – restablecer, debe ser llevado a 3.3v)
  4. Fuente de alimentación VCC -3.3v

Fuente de alimentación y consumo de corriente.

Todos los módulos compatibles con esp8266 arduino deben alimentarse con corriente continua de cualquier tipo de fuente que pueda suministrar 3.3V estables y al menos 250mA . Además , la señal lógica tiene una clasificación de 3.3v y el canal RX debe estar protegido por un divisor reductor de 3.3v.

Debe tener cuidado al usar este módulo con Arduino u otras placas que suministren 5v, porque este módulo generalmente no viene con protección contra sobrecarga y puede destruirse fácilmente.

Sketch del Bot para chat con Telegram y ESP8266

Bien, llegado a este punto es el momento de comentar el Sketch del proyecto.

Comenzamos por las librerías que incluye el proyecto. Preste atención al comentario de la librería UniversalTelegramBot.h, es importante que escriba bien según el lugar donde guarde esta librería.

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include «UniversalTelegramBot.h» // Las comillas indica que la libraria está en la misma carpeta del sketck

A continuación tenemos que configurar los datos del router al cual se conectará el ESP para viajar por Internet.

// Introduzca los datos de configuración del router WIFI
char ssid[] = «Su_Nombre»;     // Aquí el SSID (nombre)
char password[] = «Su_Password»; // La clave PASSWORD

Y en este punto a de introducir el token que le proporcionará Telegram para tener acceso al chat y poder comunicarnos con el proyecto. Más adelante le digo como obtener el token, de momento le explico que aquí lo ha de poner. Este número que hay no es válido.

// Los datos del Token del Telegram BOT proporcionado por Telegram.
#define BOTtoken «1159968159:AAdesDERFsdeFriryyChBadcDERfIo_uRjoGPc» 
// Su Bot Token (Proporcionado desde Botfather)
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

Le damos valor a las diferentes variables que usamos en el proyecto, por ejemplo int Bot_mtbs = 1000 que le decimos que cada segundo compruebe si hay mensajes nuevos, esto se puede modificar según sus necesidades. De momento lo dejo así.

También definimos el número de pines para la salida del LED y entrada del Pulsador. En el ESP8266-01 son estos los usuales, si usted usa otro modelo de ESP con más pines libres, pues aquí los cambia.

int Bot_mtbs = 1000; //tiempo medio entre escaneo de mensajes – 1 segundo).
long Bot_lasttime;   //la última vez que se realizó la exploración de mensajes.
bool Start = false;
// Pines del ESP
const int ledPin = 2; // Pin de configuración del Relé o LED usado
int ledStatus = 0;    // Iniciamos el estado a 0 – apagado.

Como les decia al principio, este proyecto cuenta con un pulsador de entrada y poder encender o apagar el Led, si usa un relé sería lo mismo. Al inicio del funcionamiento, el Led permanece apagado.

// Boton1
int Boton1 = 0; // Boton1 PIN0
int flag1=0;    // flag Boton1 1 = 0 // Para saber cuando se pulsa el botón.
// Boton1

Esta función es la encargada de recibir y enviar los mensajes. Los comandos que recibe el ESP8266 desde Telegram son recibidos y tratados. Usted puede modificar textos, añadir comandos, etc. Es bueno que juegue un poco con esta función pero haga copias del sketch antes para evitar problemas en caso de que tengas una equivocación.

void handleNewMessages(int numNewMessages) {
  Serial.println(«Nuevos mensajes»); // Para ver el estado en el puerto serie
  Serial.println(String(numNewMessages));  // Para ver el estado en el puerto serie
  for (int i = 0; i < numNewMessages; i++) {
    String chat_id = String(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»;
    //————-
    //Aquí puedes añadir más comandos para tu control o modificarlos
    //————-
   
    if (text == «/ledon») {
      digitalWrite(ledPin, HIGH);   // Activa, enciende el LED – on (HIGH es voltaje nivel alto)
      ledStatus = 1;
      bot.sendMessage(chat_id, «Led en ON», «»);
    }
    if (text == «/ledoff») {
      ledStatus = 0;
      digitalWrite(ledPin, LOW);    // Apaga el LED – off (LOW es voltaje nivel bajo)
      bot.sendMessage(chat_id, «Led en OFF», «»);
    }
    if (text == «/estado») {        // Envia el estado del Relé/Led
      if (ledStatus) {
        bot.sendMessage(chat_id, «Led en ON», «»);
      } else {
        bot.sendMessage(chat_id, «Led en OFF», «»);
      }
    }
        if (text == «/start») {      //Es el mensaje que recibimos en el celular cuando conectamos
      String welcome = «Bienvenido al Bot Telegram, » + from_name + «.\n»;
      welcome += «Puede usar los siguientes comandos:\n\n»;
      welcome += «/ledon : Para encender el LED\n»;
      welcome += «/ledoff : Para apagar el LED\n»;
      welcome += «/estado : Estado del LED\n»;
      bot.sendMessage(chat_id, welcome, «»);
    }
  }
}

Esta función que viene a continuación es la de setup() es una de las imprescindibles en cualquier proyecto, incluso estando vacía ha de estar presente y se ejecuta una vez solo al reiniciar el ESP8266.

No hay mucha explicación, el programa está muy documentado. Tener en cuenta que el puerto serie esta puesto a 115200 baudios, a mi me funciona muy bien. Recuerde sincronizar el monitor serie del IDE a la misma velocidad, en caso de ser diferente solo verá carácteres raros y para ver el funcionamiento o errores le ira bien este monitor.

void setup() {
Serial.begin(115200);
// Boton1
pinMode(Boton1,INPUT);
// Establezca WiFi en modo estación y desconéctese de un AP si estaba conectado previamente
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
// Intenta conectarse a la red Wifi:
Serial.print(«Conectando a red Wifi: «);
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {      // El programa se quedará en este bucle hasta que el ESP conecte con el router.
Serial.print(«.»);
delay(500);
}
Serial.println(«»);                            // Aquí continúa una vez conectado
Serial.println(«WiFi conectado»);
Serial.print(«Dirección IP: «);
Serial.println(WiFi.localIP());
client.setInsecure(); // Si su núcleo no puede manejar conexiones seguras
pinMode(ledPin, OUTPUT); // Inicializa ledPin digital como salida.
delay(10);
digitalWrite(ledPin, LOW); // Inicializa el Pin en OFF
}
Ahora llega la otra función que también a de estar presente en un sketch, aunque esté vacía como la anterior. Lo malo es que siempre lleva algo y en este caso…

void loop() {
// Boton1 a la conexión –> Activa el LED al pulsar a masa
// Al usar la funcion Telegram, el pulsador a veces es un poco lento de respuesta. Porque el procesador está ocupado busando mensajes nuevos. No es importante.
if(digitalRead(Boton1)==HIGH) flag1=0;     // Pongo flag a 0
delay(50);
// Comienza a leer el pulsador, si esta pulsado continúa una sola vez aunque se mantenga pulsado.
if(digitalRead(Boton1)==LOW && flag1==0){
delay(250);
if (ledStatus==1){
ledStatus=0;
}
else {
ledStatus=1;
}
flag1=1;                // flag a 1
digitalWrite(2, ledStatus); // Escribimos en el Pin2 el valor ledStatus.
}
// Boton1
// Serial.println(flag1); // Para probar esta variable y ver respuesta
if (millis() > Bot_lasttime + Bot_mtbs)  {
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
while (numNewMessages) {
Serial.println(«Obtuvo respuesta»);
handleNewMessages(numNewMessages);
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
}
Bot_lasttime = millis();
}
}

Y hasta aquí hemos visto el código, si ustedes copian todo el código y lo pegan en el IDE de Arduino en un sketch llamado Telegram como ya he comentado al principio, les funcionará.

Una prueba de lo que os digo:

Recibir-datos-del-bot-telegram-y-esp8266

Esto es un ejemplo, más adelante les comento mejor este resultado.

Cómo crear una cuenta en Telegram

Pero todo lo anterior no sirve de nada si no tenemos el token de Telegram y una cuenta. Ahora vamos a ver como crear una cuenta en telegram.

Es muy sencillo y si desean pueden conectar con Telegram desde una aplicación en su computador y en modo portable (Descargar Telegram), descargan el archivo desde la web de telegram y en pocos minutos ya la tendrás en servicio. Ten presente que Telegram le pedirá un número de teléfono para enviarle un código de seguridad.

Cómo crear un Bot en el servicio de mensajeria Telegram

Una vez instalado Telegram e iniciado escriba en el buscador al Bot BotFadher e inicie sesión con el bot, en la ventana de conversación escriba /start y la aparece unas opciones como respuesta del bot, vea la siguiente imagen.

inicio-sesion-con-BotFather-Telegram

Después escriba /newbot para crear un nuevo bot de Telegram. Entonces BotFather le preguntará el nombre de tu bot. Escriba un nombre como desee, yo le puse Cami2020. Luego le pide un nombre de usuario que termine con «bot» ejemplo: Cami2020_bot. Si el nombre está en uso le pedirá que lo cambie. Una vez hecho esto, BotFather le dará una identificación de token.

Tenga en cuenta este token, lo usará en los próximos pasos.

recibir-token-de-BotFather-Telegram

Con estos datos ya podemos continuar con el proyecto, más adelante podrá modificar datos del bot creado. Pero si desea seguir probando, puede insertar una imagen al perfil del bot.

Si buscamos el bot para enviarle mensajes, hemos de ir al buscador y escribir: @Cami2020 y aparecerá en el listado como muestra la siguiente imagen.

Telegram-Cami2020

Y si desea modificar ajustes de usuario ha de entran en chat con BotFadher  y enviar el comando /mybots, le responderá con una mensaje para que seleccione el bot y después unas opciones sobre lo que puede hacer.

Modificar-datos-usuario-Bot-desde-BotFather-Telegram

Desde estas opciones puede cambiar nombre de usuario y si desea subir imagen de perfil.

Bien hasta aquí creo que crear un bot ha sido fácil. Sigamos con el proyecto.

De momento ya tenemos el bot y el token, ahora veamos que hacer con el token.

¿Se acuerdan de esta línea? Pegue en ella el token recibido

// Los datos del Token del Telegram BOT proporcionado por Telegram.
#define BOTtoken «1159968159:AAH1WzFriryyChBC37QIKKS61Ao_uRjoGPc«
// Su Bot Token (Proporcionado desde Botfather)

Creo que lo dice todo, modifiquen el valor de ejemplo por el que le acaban de regalar el bot de Telegram y listo para comenzar el juego.

Cómo grabar el sketch del bot ESP8266 con el IDE Arduino

En estos momentos ya deberian de tener el hardware montado y probado, es decir, prende el led del convertidor USB color azul y el rojo del ESP8266.

El Led debe de estar apagado.

Ahora vamos con el sketch en el IDE de Arduino.

Miraré de dejarles un archivo con el sketch y librerias completo para su descarga, pero no prometo nada. No obstante si tienen algún problema pueden dejar un mensaje mas abajo, cuando finalice este Tutorial. Al principio de esta entrada les dejé un pequeño vídeo como prueba del funcionamiento.

Bueno, con el sketch en el IDE hacemos una prueba de compilación para comprobar de que no le falta nada y no hay errores. Tenga presente modificar los datos del router WIFI por los de su equipo.

Compilar-sketch-telegram-bot-esp8266

Si todo ha ido bien y no presentó errores podemos grabarlo en el ESP8266 mediante el convertidor USB. Para ello debemos de conectar el USB al puerto del Computador y mientras lo conectamos hemos de mantener pulsado el botón que conectamos al Pin del GPIO0. Al conectar el Led ha de encenderse, indica de que el ESP8266 queda en modo programación.

Una vez conectado, puede soltar el Botón. Si no ha sido así es que hay algún fallo, revise y prueba de nuevo hasta que el dispositivo quede como le he comentado.

Con el ESP8266 conectado al FTDI y el led encendido (Recuerde pulsar en botón mientras lo conectamos al puertoUSB), puede programarlo y para ello vaya al IDE y seleccione la opción Programa –> Subir, El IDE volverá a compilar de nuevo y cuando termine la compilación empezará la carga del Firmware al ESP. En estos momentos los leds del USB correspondientes a la transmisión destellarán indicando que están enviando y recibiendo datos del ESP.

Cuando acabe la carga el IDE le avisará y si todo ha ido bien ya podremos probar el proyecto.

En primer lugar y para reiniciar el ESP8266 desconecte la alimentación y vuelva a conectarla pero esta vez sin pulsar el botón. Notará un ligero parpadeo del Led y permanecerá apagado. No desconecte el IDE porque en el monitor serie veremos si funciona.

Si aparece la siguiente imagen.

WIFI-conectado-el-ESP8266-01

Podemos cantar victoria a medias. Ahora inicialice la aplicación Telegram desde el computador o el celular y conecte con el Bot que hemos creado y vamos a darle vida. Yo les voy a presenta la imagen de mi bot y verán lo que aparece al conectar con Telegram.

estado-del-led-con-bot-telegram-esp8266

Primero hemos de enviarle el comando /start, este comando se le envía al reinicio del chat con el bot, si ya estamos conectado hemos de enviarlo manualmente. Cada vez que enviamos este comando nos devuelve un saludo que ya habremos visto en el sketch con los comando disponibles hasta el momento.

Recuerde los comandos:

/start: Para recibir los comandos

/ledon : Para encender el LED

/ledoff : Para apagar el LED

/estado : Estado del LED

Si miran mi conversación veran lo que pude hacer con el bot. Encender el Led, apagarlo y ver el estado en caso de manipulación manual.

El resto ya depende de ustedes, pueden usarlo incluso para una alarma, modificando el código para que cuando se active el pulsador le envien un mensaje. Pueden controlar el riego de la casa de campo o luces.

Más sobre el bot de chat para Telegram y el ESP8266-01

Este proyecto solo usa un Led que puede ser un relé, pero si desean más salidas pueden optar por un ESP8266-12F y tranquilamente pueden controlar 4 relés o incluso más según los pulsadores que quieran añadir.

La imaginación es la que decidirá que aplicación le damos a este proyecto. Si tienes dudas, deja un mensaje y entre todos le podremos ayudar.

Yo lo he probado y lo tengo en funcionamiento con un aspersor para el riego de un pequeño jardín. El botón lo uso como detector de lluvia y el relé para controlar la válvula del agua en mi segunda residencia.

Y esto es todo amigos, espero que os haya funcionado y aprendido mucho sobre este chat Bot Telegram con ESP8266 que funciona de maravilla.

Si lo usas en alguna aplicación y nos cuentas, el resto de amigos te lo agradecerán.

2 comentarios

  1. Ante todo felicitaciones, es un tutorial de los pocos que he podido ver que está todo muy bien detallado.
    Tengo un duda sobre el ESP8266. Puedo usar por ejemplo el que yo tengo para pruebas que es un 12F?
    Reconozco que para una simple aplicación como esta es un desperdicio pero ya que lo tengo lo voy a utilizar. Lo pregunto porque lo he probado y no me funciona, no se si tengo que cambiar algo en el código.
    Espero su ayuda.

    • Hola Felipe, efectivamente, puedes usar cualquier ESP del mercado. Yo normalmente uso el ESP8266-01 de 1Mb de RAM, el de color negro por su precio y porque el funcionamiento es excepcional comparado con el precio.
      También he usado en este proyecto para pruebas el 12F como el que tu indicas y funciona bien. Otro que tambien tengo y lo uso muy poco es el NodeMCU que funciona muy bien, en resumen, si el programa y las conexiones están bien, todos funcionan.
      Espero haberte ayudado.
      Muchas gracias por visitar mi web.

Deja un comentario

Información básica sobre protección de datos
Responsable Joan Mengual +info...
Finalidad Gestionar y moderar tus comentarios. +info...
Legitimación Consentimiento del interesado. +info...
Destinatarios Automattic Inc., EEUU para filtrar el spam. +info...
Derechos Acceder, rectificar y suprimir los datos, así como otros derechos. +info...
Información adicional Puedes consultar la información adicional y detallada sobre protección de datos en nuestra página de política de privacidad.