Este proyecto usa un ESP32 conectado a Wi-Fi para recibir /wake desde un bot de Telegram y enviar un paquete Wake-on-LAN a la tarjeta de red de una PC. El teléfono puede estar fuera de casa: Telegram entrega el comando por internet, mientras que el ESP32 debe permanecer en la misma red local que la PC. La imagen inicial resume esa ruta; el paquete no pasa directamente del teléfono a la PC.
El repositorio incluye el sketch Arduino, una plantilla de configuración y capturas que explican la preparación de la PC y del bot. Los valores de Wi-Fi, token, identificador de chat, MAC y broadcast se completan en un archivo local excluido de Git. La guía de instalación desarrolla cada paso; el flujo técnico explica el código y los límites de la confirmación de encendido.
La PC necesita una tarjeta de red compatible con Wake-on-LAN, alimentación de espera y una conexión que permita recibir el paquete. En la BIOS/UEFI, busca opciones como Power On By PCI Devices, Power On By PCIE Devices o Wake on LAN y habilita las que correspondan al adaptador. Los nombres cambian según la placa; la captura siguiente muestra un ejemplo con las dos primeras habilitadas.
En Windows, revisa en las propiedades del adaptador Ethernet las opciones Wake on Magic Packet y el permiso para reactivar el equipo. Obtén la MAC del adaptador Ethernet que permanecerá conectado, no la MAC Wi-Fi del ESP32. Prueba primero desde suspensión dentro de la LAN: el encendido desde apagado completo depende de la placa, el adaptador y el estado de energía. El paso a paso detalla cómo comprobarlo. Microsoft explica que el inicio rápido/apagado híbrido puede impedir WoL en algunos estados.
Abre @BotFather, ejecuta /newbot y elige un nombre y un usuario terminado en bot. BotFather te entrega un token de acceso; guárdalo únicamente en WoL/config.local.h. La captura editada muestra el punto en que se obtiene el token, con toda la línea del token tapada.
Telegram indica que ese token permite controlar el bot y puede revocarse desde BotFather. Como el sketch y una captura originales de esta carpeta mostraban el token, renuévalo antes de usar esta publicación; después actualiza sólo el archivo local. Instrucciones oficiales de BotFather.
- Instala Arduino IDE, el soporte de placas ESP32 by Espressif Systems, la biblioteca Universal Arduino Telegram Bot y su dependencia ArduinoJson.
WiFi,WiFiClientSecureyWiFiUdpvienen con el núcleo ESP32. - Copia
WoL/config.local.example.haWoL/config.local.h. Este último archivo está ignorado por Git. CompletaWIFI_SSID,WIFI_PASSWORD, el token nuevo enBOT_TOKEN, la MAC Ethernet de la PC en seis bytesPC_MAC_BYTESy la dirección de broadcast local enWOL_BROADCAST_IP. - Deja
ALLOWED_CHAT_IDvacío sólo durante el emparejamiento. En ese estado el sketch responde a/id, pero rechaza/wake,/statusy los demás comandos. Envía/iden un chat privado con el bot; copia el número recibido aALLOWED_CHAT_IDen el archivo local y vuelve a cargar el sketch. Desde entonces los comandos operativos sólo se aceptan desde ese chat. - Abre
WoL/WoL.ino, selecciona tu placa ESP32 y puerto, compila y carga. Abre el monitor serie a 115200 baudios. Comprueba que se conecta al Wi-Fi y muestra que el bot está listo. No publiques capturas del monitor con la IP o credenciales de la instalación.
El WOL_BROADCAST_IP debe corresponder a la subred del ESP32 y de la PC: por ejemplo, en una red 192.168.1.0/24 es 192.168.1.255. No copies ese ejemplo si tu máscara o subred es distinta. El bot funciona sin abrir puertos de entrada del router: el ESP32 consulta Telegram hacia afuera y envía el paquete WoL dentro de la LAN. Configuración completa.
Con el ESP32 encendido y la PC en suspensión, envía /start, /status y luego /wake desde el chat autorizado. La captura muestra la conversación real del proyecto con SSID, IP y MAC ocultos para su publicación.
| Comando | Respuesta del sketch |
|---|---|
/id |
Devuelve el ID del chat; también funciona en modo de emparejamiento |
/start |
Lista los comandos disponibles, sólo para el chat autorizado |
/status |
Muestra conexión del ESP32, SSID, IP local y señal Wi-Fi; no consulta el estado de la PC |
/wake |
Construye y envía un paquete mágico UDP al broadcast y puerto 9 |
La respuesta de /wake indica que el ESP32 entregó el datagrama a su pila de red; no confirma que la PC lo recibió o encendió. Comprueba el arranque físicamente o por otro mecanismo de supervisión. Si no despierta, sigue el diagnóstico.
El mensaje WoL tiene 102 bytes: seis FF seguidos por 16 repeticiones de la MAC de seis bytes. El ESP32 lo envía por UDP al broadcast configurado, puerto 9. WoL/WoL.ino consulta los mensajes nuevos de Telegram cada segundo aproximadamente mediante getUpdates, compara el chat con ALLOWED_CHAT_ID y sólo entonces acepta /wake. Detalle del protocolo y del firmware.
WoL/config.local.h contiene datos de la instalación y nunca debe subirse. Las capturas originales telebot.png y telegrma.png tampoco se publican: la primera muestra parte de un token y la segunda muestra identificadores de red. El repositorio usa versiones editadas. El sketch conserva el comportamiento original de setInsecure() cuando no se configura una CA: la conexión TLS no valida la identidad del servidor. Para validarla, proporciona TELEGRAM_ROOT_CA y sincroniza el reloj antes de contactar Telegram; el documento técnico explica esta opción y su alcance. El token debe mantenerse privado incluso cuando se use validación TLS.
La implementación despierta una PC por MAC configurada y sólo dentro de una red donde el broadcast llegue a ella. No verifica el estado de la PC, no implementa un servidor externo ni requiere redirigir UDP/9 desde internet.
| Ruta | Contenido |
|---|---|
WoL/WoL.ino |
Firmware ESP32 y comandos de Telegram |
WoL/config.local.example.h |
Plantilla sin valores privados |
1.jpg |
Vista general del recorrido; primera imagen del README |
bios.jpg |
Ejemplo de configuración de BIOS/UEFI |
images/ |
Capturas de BotFather y Telegram con datos ocultos |
docs/ |
Instalación, diagnóstico y explicación técnica |



