Un marcador del Mundial gigante hecho por ti

¿Te imaginas seguir cada partido del Mundial FIFA en un panel LED que se ve desde el otro lado de la pieza? Este proyecto, inspirado en una guía de Adafruit, combina cuatro matrices LED RGB de 64x32 pixeles en un solo display de 128x64 pixeles. Un microcontrolador ESP32 S3 consulta la API pública de ESPN y dibuja en vivo el marcador, las banderas de los países y el minuto de juego.

Al terminar vas a saber cómo encadenar varios paneles HUB75, cómo alimentar un display de alto consumo sin quemar nada, y cómo leer datos deportivos en tiempo real desde una API y mostrarlos en hardware.

Matriz LED RGB de 64x32 pixeles sostenida en las manos

La parte interesante es el volumen de datos: el JSON que devuelve ESPN es grande y refrescar cuatro paneles RGB en simultáneo exige bastante cómputo. Por eso el corazón del proyecto es un ESP32 S3 y no un ESP32 clásico.

Por qué un ESP32 S3 y no otro

El ESP32 S3 aporta tres cosas clave para este display:

  • 8 MB de flash y 2 MB de PSRAM, espacio de sobra para guardar las banderas ya preprocesadas y para manipular JSONs grandes.
  • Doble núcleo a 240 MHz, ideal para repartir el trabajo: un núcleo refresca las matrices y el otro consulta la API.
  • WiFi nativo para conectarse a la red de la casa sin hardware extra.

Placas más simples como el ESP8266, el ESP32 clásico o un SAMD51 no alcanzan a refrescar cuatro paneles sin que aparezca parpadeo. En la guía original se usa una placa Matrix Portal S3, que ya integra el conector HUB75 y el ESP32 S3 en una sola PCB.

Placa controladora ESP32 S3 conectada a una matriz LED RGB encendida

Lista de materiales

  • Placa de desarrollo ESP32 S3 con WiFi (Matrix Portal S3 o equivalente)
  • 4 matrices LED RGB de 64x32 pixeles, paso 4mm (P4)
  • 4 paneles acrílicos negros difusores (10.2 x 5.1 pulgadas)
  • 2 fuentes switching 5V 4A (una por cada par de paneles)
  • Cable USB tipo C para alimentar y programar la placa
  • Cables HUB75 de 16 pines (vienen incluidos con las matrices)
  • Tornillos M3 para fijar los paneles

Esquema de alimentación, el punto crítico

Cuatro matrices a brillo máximo pueden pedir más de 15 A en el peor caso. La regla de oro: nunca alimentes las matrices desde la placa. La distribución recomendada es:

  • Fuente 1 (5V 4A): las dos matrices superiores.
  • Fuente 2 (5V 4A): las dos matrices inferiores.
  • USB tipo C: solo la placa controladora.

Une las tierras (GND) de todas las fuentes y de la placa para tener una referencia común. Si no comparten GND, los datos llegan con ruido y vas a ver glitches en la imagen.

Fuente de poder switching de 5V con sus cables

Cableado HUB75

Cada matriz usa un conector HUB75 de 16 pines. Los paneles se encadenan entrada con salida:

Código
ESP32 S3 -> Matriz 1 (IN) -> Matriz 1 (OUT) -> Matriz 2 (IN) -> Matriz 2 (OUT) -> ...

Después configuras la librería para tratar las cuatro matrices como una sola pantalla de 128x64. En CircuitPython esto se hace con el tamaño total y los parámetros de tiling (tile y serpentine) según cómo armaste físicamente el mosaico de 2x2.

Código base en CircuitPython

Python
import time
import board
import displayio
import rgbmatrix
import framebufferio
import adafruit_requests
import wifi
import socketpool
import ssl

displayio.release_displays()

matrix = rgbmatrix.RGBMatrix(
    width=128, height=64, bit_depth=4,
    rgb_pins=[board.MTX_R1, board.MTX_G1, board.MTX_B1,
              board.MTX_R2, board.MTX_G2, board.MTX_B2],
    addr_pins=[board.MTX_ADDRA, board.MTX_ADDRB,
               board.MTX_ADDRC, board.MTX_ADDRD,
               board.MTX_ADDRE],
    clock_pin=board.MTX_CLK,
    latch_pin=board.MTX_LAT,
    output_enable_pin=board.MTX_OE,
    tile=2, serpentine=True)

display = framebufferio.FramebufferDisplay(matrix)

wifi.radio.connect("TU_SSID", "TU_CLAVE")
pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())

URL = "https://site.api.espn.com/apis/site/v2/sports/soccer/fifa.world/scoreboard"

while True:
    resp = requests.get(URL)
    data = resp.json()
    # ... procesar y dibujar partidos
    time.sleep(60)

Banderas preprocesadas

Las banderas llegan desde el CDN de ESPN como PNG grandes. Mostrarlas tal cual sería lento y se verían borrosas en tan pocos pixeles, así que conviene prepararlas una sola vez:

  1. Descargar cada bandera.
  2. Reescalarla a 16x12 pixeles.
  3. Aplicar corrección gamma, porque las matrices RGB tienen respuesta no lineal y sin esto los colores se ven apagados.
  4. Guardarla como bitmap en la flash para acceso rápido.

Carcasa y montaje

Los paneles acrílicos negros difusores van delante de cada matriz, separados unos 5mm. Ese aire es el que difumina el grano de los LED y hace que el marcador se vea parejo y nítido. Una caja de MDF de 6mm cortada a láser deja todo prolijo. No olvides la ventilación pasiva: cuatro matrices a brillo medio generan calor.

Panel acrílico negro difusor para matriz LED

Variantes y mejoras

  • Otra liga o deporte: cambia la URL de la API por la de la Premier League, la Champions o incluso la NBA. El JSON varía, pero la estructura general (eventos, equipos, marcador) se mantiene entre los deportes de ESPN, así que el código se adapta con cambios menores.
  • Brillo automático: agrega un sensor de luz LDR y baja el brillo de noche. Ahorras energía y evitas que el panel encandile en una pieza oscura.
  • Alertas de gol: conecta un buzzer activo o una tira de LED extra y dispara un efecto cuando el marcador cambia. Detectar el cambio es tan simple como comparar el score nuevo con el de la consulta anterior.
  • Modo reloj: cuando no hay partidos, reutiliza el mismo panel como reloj gigante con la hora obtenida por NTP.

Personalización para Chile

En Chile puedes conseguir el cerebro y la alimentación del proyecto en MechatronicStore. El panel HUB75 de 64x32 es la pieza más difícil de encontrar a nivel local, así que esa la tendrás que importar; el resto lo armas con stock nacional:

  • Seeed Studio XIAO ESP32 S3 (SKU GS1-3) por $13.670 CLP: trae el mismo chip ESP32 S3 con WiFi y PSRAM que pide el proyecto. Es una placa ultracompacta, así que para manejar los paneles HUB75 directo necesitarás más pines que los de la XIAO; si buscas la experiencia tal cual la guía original, la placa Matrix Portal S3 es la referencia.
  • Fuente switching 5V 10A DC (SKU K-444) por $10.900 CLP: una sola de estas reemplaza a las dos fuentes de 5V 4A y deja margen de corriente para encender los cuatro paneles a buen brillo.
  • Cable USB tipo C a USB tipo A 1mt (SKU B-101) por $2.190 CLP: el mismo cable que usas para programar y alimentar la placa controladora.

Recursos

  • Tutorial original: LED Matrix FIFA World Cup Scoreboard (Adafruit Learning System)
  • Lenguaje y librerías: CircuitPython con rgbmatrix, displayio y adafruit_requests
  • Datos en vivo: API pública de ESPN para el marcador del fútbol

Versión chilena con componentes en stock local en MechatronicStore.