Blog Post
Reloj IoT con matrices LED + ESP8266
Este post es uno de esos proyectos que arrancan con “quiero un reloj lindo” y terminan en: firmware, sincronización NTP, endpoints REST, y una marquesina que te tira notificaciones como si fuera una mini Times Square en tu escritorio 😄
La idea: usar un ESP8266 y 4 módulos LED matrix 8x8 (basados en MAX7219) para mostrar:
- La hora, obtenida de Internet (NTP)
- Posibilidad de sumar un RTC para resiliencia
- Mensajes estilo marquesina que le envío por API REST
Repositorio del proyecto (código + detalles):
https://github.com/imaerials/esp-mx7219-clock
Objetivos del proyecto
Mis requisitos eran bien concretos:
- Que la hora sea correcta (y que no dependa de reinicios)
- Poder empujar mensajes desde cualquier lado (PC, celular, otra app)
- Que sea fácil de extender: clima, recordatorios, estado de servicios, etc.
Hardware (BOM rápido)
Lo básico para armarlo:
- 1× ESP8266 (NodeMCU / Wemos D1 mini / similar)
- 4× módulos LED matrix 8x8 (MAX7219) encadenables
- Fuente 5V estable (esto es importante, las matrices consumen)
- Cables Dupont / protoboard (o PCB si te ponés fino)
- (Opcional) Módulo RTC (por ejemplo DS3231) si querés hora sin Internet
Tip real: si ves parpadeos o brillo raro, casi siempre es alimentación o masa compartida mal resuelta.
Cómo funciona (a nivel arquitectura)
Me gusta pensar el firmware en 3 partes:
- Time layer: sincroniza hora por NTP y mantiene el clock
- Display layer: renderiza hora / mensajes en las matrices
- API layer: recibe comandos (mensaje, modo, intensidad, etc.)
Eso te deja el proyecto prolijo y fácil de crecer sin que sea “un loop infinito con ifs” 😅
Sincronización de hora (NTP)
La hora viene de Internet usando NTP. La estrategia típica:
- Al boot, conecto Wi-Fi
- Sincronizo NTP
- Mantengo la hora en memoria y re-sincronizo cada X tiempo
Ventajas:
- hora correcta sin calibración manual
- si reinicia, vuelve a estar bien en segundos
Si agregás RTC, podés hacer:
- usar RTC como “fuente local” si no hay Internet
- y cuando vuelve la red, corregir RTC contra NTP
Mensajes tipo marquesina (API REST)
El componente divertido: poder mandarle un texto y que lo scrollee.
No voy a “prometer” endpoints exactos acá porque pueden cambiar con el tiempo, pero la idea es algo así:
POST /api/message(o similar) para enviar un textoGET /api/statuspara ver estado (modo actual, hora, intensidad, etc.)POST /api/configpara setear brillo, velocidad de scroll, etc.
En el repo están los detalles actualizados y el código completo:
https://github.com/imaerials/esp-mx7219-clock
Ejemplo de request (conceptual):
curl -X POST http://<ip-del-esp>/api/message -H "Content-Type: application/json" -d '{"text":"🚀 Deploy terminado. Mate time."}'
Cosas que aprendí (y que me ahorraron dolor)
- Fuente de 5V: las matrices son sensibles a caídas de tensión
- Longitud de cables: cuanto más corto, mejor (sobre todo señal)
- Brillo: al máximo queda fachero… pero el consumo sube fuerte
- Reintentos Wi-Fi: si no hacés manejo de reconexión, te quedás sin reloj
- Separar capas: tiempo / display / API (vale oro cuando escalás features)
Ideas para la v2
La lista de “ya que estoy…” nunca termina, pero algunas cosas que me copan:
- Mostrar clima o temperatura (si tenés sensor)
- Notificaciones de Home Assistant
- Modo “no molestar” (por ejemplo de noche)
- Panel web simple para configurar Wi-Fi y opciones
- Logs básicos y métricas (para debug cuando está lejos)
Cierre
Este proyecto es un buen ejemplo de mi tipo de homelab: cosas chicas, útiles y que abren puertas a mejorar el stack entero (red, observabilidad, automatización).
Si querés replicarlo o forkearlo, acá está el repo:
https://github.com/imaerials/esp-mx7219-clock