Blog Post

Reloj IoT con matrices LED + ESP8266

Published

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:

  1. Que la hora sea correcta (y que no dependa de reinicios)
  2. Poder empujar mensajes desde cualquier lado (PC, celular, otra app)
  3. 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:

  1. Time layer: sincroniza hora por NTP y mantiene el clock
  2. Display layer: renderiza hora / mensajes en las matrices
  3. 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 texto
  • GET /api/status para ver estado (modo actual, hora, intensidad, etc.)
  • POST /api/config para 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