- Integración de la librería UniversalTelegramBot para simplificar la comunicación HTTPS con la API de Telegram.
- Control remoto de pines GPIO para accionar actuadores como LEDs y leer estados de interruptores.
- Implementación de seguridad mediante la validación del Chat ID y el uso de certificados SSL.
¿Te has planteado alguna vez manejar los trastos de tu casa desde el sofá usando el móvil? Pues bien, montar un sistema para controlar un ESP32 a través de Telegram es una de las formas más sencillas y potentes de meterse en el mundo de la domótica sin complicarse la vida con servidores externos costosos o configuraciones imposibles.
La magia reside en convertir tu placa en un pequeño servidor que escucha las órdenes de un bot. No hace falta que seas un hacha de la programación, ya que con un par de librerías y un poco de paciencia puedes conseguir que tu dispositivo encienda luces o te avise sobre el estado de un sensor en tiempo real, todo mediante mensajes de texto instantáneos.
Materiales que vas a necesitar

Para ponerte manos a la obra, no hace falta que gastes una fortuna. Lo más importante es disponer de una placa ESP32; da igual si es un modelo antiguo o uno de los más modernos, ya que la compatibilidad es total. Aparte del cerebro del proyecto, necesitarás algunos componentes básicos para hacer las pruebas:
- Un diodo emisor de luz (LED) para comprobar que todo funciona.
- Una resistencia de 220 ohmios para no fundir el LED.
- Un pulsador o interruptor para leer estados físicos.
- Cables de conexión y una protoboard para no tener que soldar nada al principio.
Montaje del circuito electrónico

Antes de tocar el código, hay que dejar el hardware listo. Para este ejemplo, vamos a conectar el LED al pin GPIO 33 y el interruptor al GPIO 14. Es fundamental que recuerdes que puedes cambiar estos pines según te convenga, pero tendrás que reflejar ese cambio más tarde en las constantes del programa.
El LED se conecta con su resistencia correspondiente para protegerlo, mientras que el pulsador se configurará internamente para evitar cables extra. Una vez que tengas el montaje en la protoboard, ya puedes pasar a la parte del software, que es donde ocurre toda la acción.
Configuración del Bot en Telegram

Para que el ESP32 sepa a quién hacer caso, primero debemos crear la identidad del bot en la propia aplicación de Telegram. Este proceso es fundamental porque nos proporcionará dos datos clave: el token del bot (una cadena larga de números y letras) y tu ID de usuario personal. Sin estas dos llaves, el dispositivo no podrá autenticarse ni saber quién tiene permiso para darle órdenes.
Si en algún momento sientes que el chat se ha vuelto un caos, recuerda que siempre puedes borrar el historial desde el menú superior derecho. Al hacer esto, el bot se reinicia y volverá a mostrar el botón de inicio con los comandos disponibles para empezar de cero.
Preparación del entorno de desarrollo

Para que el código funcione, necesitamos instalar una herramienta que nos facilite la vida: la librería UniversalTelegramBot. En lugar de escribir cientos de líneas de código para manejar la API de Telegram, esta librería lo hace casi todo por nosotros.
Para instalarla, simplemente ve al gestor de librerías del Arduino IDE, escribe el nombre de la librería y pulsa instalar. Asegúrate también de tener instaladas las librerías de WiFi y WiFiClientSecure, que son las que permiten que el ESP32 se conecte a internet y use el protocolo HTTPS para que la comunicación sea totalmente segura.
Análisis del código de control
El programa comienza definiendo las credenciales de tu red WiFi y las claves del bot. Es vital que sustituyas los valores de ejemplo por tu propio SSID y contraseña, así como el token y el ID de chat. Para la interactividad, definimos una variable llamada info que contiene la lista de comandos que el bot reconocerá, como /led_on o /sw_state.
Gestión de mensajes y comandos
El corazón del sistema es la función que revisa si hay mensajes nuevos. El ESP32 utiliza el método getUpdates para consultar la cola de mensajes de Telegram. Para evitar que cualquier desconocido controle tu casa, el código incluye un filtro que verifica que el ID del remitente coincida exactamente con tu CHAT_ID predefinido.
Una vez validado el usuario, el bot analiza el texto recibido: si detecta /led_on, envía una señal digital al pin 33 para encender la luz; si recibe /led_off, la apaga. También existe la opción de /led_toggle, que es muy práctica porque invierte el estado actual del LED sin que tengas que saber si estaba encendido o apagado previamente.
Lectura de sensores y finalización
Además de mandar órdenes, el bot puede informarnos. Usando el comando /sw_state, el ESP32 lee el estado del pin 14. Como hemos configurado el pin como INPUT_PULLUP, el dispositivo detectará si el botón está presionado o no y nos enviará una respuesta textual confirmándolo.
En el proceso de arranque, el dispositivo se conecta al WiFi de forma bloqueante, lo que significa que no hará nada hasta que la conexión sea estable. Para cerrar el círculo de seguridad, se utiliza el certificado raíz de Telegram, garantizando que el tráfico de datos esté cifrado. El bucle principal simplemente repite la comprobación de mensajes cada segundo para mantener el sistema ágil y reactivo.
Con este sistema hemos logrado integrar hardware y software para crear un puente de comunicación inalámbrico. Hemos configurado un bot, gestionado la seguridad mediante IDs y certificados, y programado la respuesta de pines GPIO para interactuar con el mundo físico desde cualquier lugar con conexión a internet.
Preguntas frecuentes
¿Qué librería es necesaria para conectar el ESP32 con Telegram?
Se debe utilizar la librería UniversalTelegramBot, la cual simplifica la interacción con la API de Telegram y facilita el envío y recepción de mensajes.
¿Cómo se asegura que solo yo pueda controlar el bot?
El código implementa un filtro que compara el ID del chat del mensaje recibido con un CHAT_ID predefinido, ignorando cualquier comando que venga de otro usuario.
¿Es necesario usar HTTPS para comunicarse con el bot?
Sí, Telegram requiere conexiones seguras, por lo que se utiliza WiFiClientSecure y se debe configurar el certificado raíz de Telegram en el ESP32.
¿Para qué sirve el comando /led_toggle en el código?
Este comando sirve para invertir el estado actual del LED, encendiéndolo si estaba apagado o apagándolo si estaba encendido.
¿Por qué se utiliza INPUT_PULLUP para el interruptor?
Se usa para activar la resistencia interna de la placa, evitando así la necesidad de añadir una resistencia física externa al circuito del pulsador.
¿Dónde consigo el token del bot y el ID de usuario?
El token se obtiene al crear el bot a través de BotFather en Telegram, y el ID de usuario se puede conseguir mediante bots especializados en obtener la identidad del perfil.