sábado, 18 de marzo de 2023

Wake On Lan - ESP8266 - Enciende la PC de manera remota

Finalmente me compré una placa con el integrado ESP8266, en este caso una placa de desarrollo NodeMCU ESP8266 V3. Hace rato que quería probar esta familia de placas que, entre otras cosas, tienen conectividad WiFi.

No voy a entrar en muchos detalles respecto de las características de la placa, no es el fin de este post, pero resumidamente son las siguientes:

  • Procesador: ESP8266 @ 80MHz (3.3V) (ESP-12E)
  • 4MB de memoria FLASH (32 MBit)
  • WiFi 802.11 b/g/n
  • Regulador 3.3V integrado (500mA)
  • Conversor USB-Serial CH340G / CH340G
  • 9 pines GPIO con I2C y SPI
  • 1 entrada analógica (1.0V max)
  • 4 agujeros de montaje (3mm)
  • Pulsador de RESET
  • Entrada alimentación externa VIN (20V max)

En realidad la primera placa que compré fue una Wemos D1 Mini pero no hubo manera de hacerla andar. Puedo subir sketchs desde el IDE de Arduino pero no puedo utilizar ninguno de los pines. ¯_(ツ)_/¯

En fin, desde hace tiempo que tenía ganas de probar la función WOL de la placa madre de mi PC.

WOL o Wake on Lan es un estándar de redes que permite encender la pc de manera remota. En mi caso, que utilizo Gnu-Linux como sistema operativo, no tuve que hacer más que habilitar la opción de wake on lan en el BIOS de la pc.

En este link les dejo un artículo de la web Xataca que explica como habilitar esta función tanto en el Bios como en Microsoft Windows.

Wake-on-LAN está implementado utilizando un paquete especialmente diseñado llamado “Paquete mágico”, el cual es enviado a todos los equipos en la red, entre ellos el dispositivo a ser encendido. El “paquete mágico” contiene la dirección MAC del equipo destino, un identificador numérico que tiene cada Tarjeta de Red u otros dispositivos de red en la computadora, que posibilita ser reconocido dentro de la red. (…) Si un “paquete mágico” es recibido y está direccionado a la dirección MAC del dispositivo, la Tarjeta de Red envía la señal a la fuente de energía o tarjeta madre para iniciar el encendido del sistema, muy similar a lo que acontece cuando se presiona el botón de encendido. Fuente: Wikipedia

Para este proyecto entonces usaremos la placa mencionada arriba, dos leds de diferente color (en mi caso usé un led RGB) y un pulsador. La idea es que el ESP8266 se conecte a nuestro router (nos señale con los leds cuando se está conectando y cuando la conexión ha sito establecida exitosamente) y cuando presionamos el pulsador se envía el paquete mágico.

Vamos a hacer uso de tres librerías que pueden instalarse vía el Gestor de de Librerías (Herramientas -> Administrar Bibliotecas…)

  • La primera es WiFiUdp.h que nos permite crear una instancia de la clase WiFi UDP que puede enviar y recibir mensajes UDP.

  • La segunda es WakeOnLan.h que es la librería que nos permitirá armar de manera sencilla el paquete mágico y enviarlo. Toda la información referente a esta librería la pueden encontrar en este link.

  • La tercera es Debouncer.h que no es estrictamente necesaria pero a mi me resulta muy útil y sencilla para evitar los “rebotes” del pulsador y la uso habitualmente (para este sketch en particular los rebotes no son un problema).

Los rebotes son las falsas pulsaciones (ruido) que se producen al hacer falsos contactos en el interruptor. Si te interesa saber más sobre los rebotes recomiendo visitar esta página.

Dejo el diagrama de conexiones. Como comenté arriba estoy usando un led RGB de cátodo común, ustedes pueden utilizar LEDS comunes (recuerden conectarlos a GND utilizando una resistencia de 220ohms). El uso de los LEDS no es necesario, pero me gustan los indicadores visuales.

Flashing Leds

Como siempre el código está bastante comentado para que en cada paso se entienda lo que estamos haciendo.

Dejo debajo el link al proyecto en GitHub. Incluyo también un script en python llamado “wake_on_lan.py” (estoy aprendiendo python XD) que funciona perfectamente para encender remotamente una pc y en donde se puede ver con claridad como se arma el paquete mágico.

GitHub: https://github.com/mcattani/esp8266_wake_on_lan

Como siempre si este proyecto te gustó / interesó no dudes en compartirlo y dejar algún comentario, se aprecia.

Saludos!