Controlar un bot de telegram con ESP32.
Buenas a todos!, alguna vez imaginaron poder controlar cualquier dispositivo, máquina, luces sensores, tu casa o tu huerta casera desde tu teléfono con un simple chat como si interactúaran con otra persona?
Hoy les traigo una guía para poder controlar un bot de telegram a través de una placa de desarrollo para IoT basado en el ESP32 el cual tiene integrado conectividades como bluetooth, y WiFi, más información al respecto lo encontrarás acá, básicamente lo que haremos es crear un bot desde telegram, que luego controlaremos desde nuestra placa ESP32 la cual realizará todas las acciones, este proyecto nos permitirá manejar cualquier dispositivo electrónico con el solo hecho de tenerlo conectado a internet y tenerlo registrado en nuestro chat de telegram, comencemos.
El material para este tutorial es únicamente la placa ESP32, ya que el objetivo principal de este tutorial es dar guía a la instalación del entorno de desarrollo en arduino para poder programarlo desde esa IDE tan popular.
Cabe resaltar que el ESP32 puede se programada desde los siguientes entornos:
- Arduino IDE con ESP32 Arduino Core
- ESP Easy — desarrollado por entusiastas de la automatización del hogar
- Espressif IoT Development Framework — marco oficial de desarrollo de Espressif para ESP32
- Espressif Mesh Development Framework
- Espruino — JavaScript SDK y firmware emulando de cerca Node.js
- Lua RTOS para ESP32
- Mongoose OS : un sistema operativo para productos conectados en microcontroladores; programable con JavaScript o C. Una plataforma recomendada por Espressif Systems, AWS IoT, y Google Cloud IoT.
- mruby para el ESP32
- NodeMCU — firmware basado en Lua
- PlatformIO Ecosystem e IDE
- Pymakr IDE: IDE diseñado para su uso con dispositivos Pycom; maneja las actualizaciones de firmware e incluye la consola REPL de MicroPython
- Plataforma de programación embebida Simba
- IDE web basado en bloque de ecosistemas de Whitecat
- MicroPython
- Zerynth — Python para IoT y microcontroladores, incluido el ESP32
Nosotros en esta guía utilizaremos la IDE de arduino, entonces asumo que usted tiene instalado arduino en su computadora, una vez definido todo esto comencemos con la instalación.
Paso 1: Abrimos nuestra IDE de arduino
Paso 2: Nos dirigimos a Archivo->Preferencias
Paso 3 : copiamos el siguiente link en la caja de Gestor de URLs adicionales de tarjetas.
https://dl.espressif.com/dl/package_esp32_index.json
Paso 4: Dirigirnos a Herramientas->Placa->Gestor de tarjetas y buscar “ESP32”
Elegimos la versión más reciente y le damos en instalar, esperamos a que termine de instalar, una vez finalizado la instalación ya debería aparecernos la opción de ESP32 entre las placas disponibles.
Hasta aquí tenemos instalado todo el entorno necesario para poder programar y compilar nuestro ESP32.
Seguidamente debemos descargar la librería necesaria para poder controlar nuestro bot de telegram.
https://github.com/witnessmenow/Universal-Arduino-Telegram-Bot
Nota: Para evitar problemas de conflictos con la librearía WiFi del ESP32 hay que eliminar la librería WiFi de arduino para que prevalezca la librería del ESP32.
Una vez descargado dichas librería debemos incluirlas dentro de la carpeta de instalación de arduino para poder utilizarla, debería quedar más o menos así:
Seguidamente instalaremos otra librería llamada ArduinoJson, el cual se encarga de manejar los objetos JSON que utiliza la API de telegram para enviar o recibir mensajes, es estrictamente necesaria debido a que la librería que acabamos de instalar la utiliza por detrás para procesar toda la información.
Para instalarla simplemente utilizaremos el gestor de librerías del propio arduino, y es como sigue:
Una vez abierto buscamos ArduinoJson y en el primer resultado que se nos mostrará elegiremos la versión 5.13.4, debido a que esta es compatible con nuestra librería de telegram, las versiones superiores son incompatibles ya que implementan los mas nuevos estándares de C++ que arduino aún no implementa en su plataforma.
Una vez instalado estaremos listos para compilar y ejecutar nuestro código, lo siguiente es crear nuestro bot de telegram que queremos controlar, el cual se describe a continuación:
1- Primero: Ingresar a telegram y buscar BotFather el cual es un bot que nos permite crear bots
2-Seguidamente le damos start
Nos retorna algo como lo mostrado arriba, estos son todos los comandos que el bot soporta(El BotFather, no nuestro bot que vamos a crear).
3- Escribimos el comando /newbot que es para crear un nuevo bot
Al escribir este comando nos pedirá un nombre para nuestro bot, lo ingresamos, en este caso yo ingrese MediumBotTest pero ustedes pueden darle el nombre que deseen, luego nos solicita que ingresemos un nombre de usuario para nuestro bot que en este caso yo ingresé MediumBotTest_bot, es muy importante que termine en bot ya que es el formato que nos solicita telegram, si todo hemos hecho correctamente debería devolvernos algo como el último mensaje en el cual en rojo se puede observar el token de la API, esto es confidencial, no lo debe saber nadie, porque básicamente si alguien mas lo tiene podrá quitarnos el control de nuestro bot, lo copiamos y vamos al código!!
Ahora explicare como funciona el código:
En esta primera parte se agregan las librerías necesarias para poder controlar nuestro bot.
ssid[]= es un vector que almacena el nombre de nuestra red WiFi, hay que reemplazar las xxxxx por el nombre de nuestra red WiFi.
password[]= es un vector que almacena la contraseña de nuestra red WiFi para que así nuestro ESP32 pueda conectarse a ella, hay que reemplazar las xxxx por la contraseña de nuestra red WiFi.
BOTtoken= Aquí se guarda el token que nos dio el BotFather mas arriba, hay que reemplazar las xxxx por lo que nos dio el BotFather.
Esta función se encarga de escuchar los mensajes entrantes y desempaquetarlos ya que estos ingresan en forma de objetos JSON, también aquí se pueden programar las acciones que queremos tomar, como ejemplo podemos observar los comandos “/lucesOn”, “/lucesOff”, “/sensor”, y cada uno de estos comandos ejecuta una acción diferente, es decir si nosotros escribimos el comando “/sensor” él va a leer el pin 34 y nos devolverá el valor de lectura de este pin, así pues nosotros podemos establecer nuestros propios comandos, y dentro de los mismos programamos las tareas que queremos realizar lo cual podría ser encender luces, leer sensores, encender el televisor, etc. Si lo compilamos y subimos deberíamos obtener algo como esto: