Stranger Retro - Luces desde el otro lado

Recrear las luces de Stranger Things como interfaz conectada

La idea

Todo empezó con una pregunta simple de Aitor Resano: ¿podemos recrear las luces de Stranger Things?
La escena es conocida: Joyce Byers cuelga luces de Navidad y Will se comunica desde el otro lado, letra a letra.

La propuesta resolvía dos cosas a la vez: experimentar con una forma distinta de decorar el espacio y jugar con el hype de la serie y el rollo fan de nuestras hijas. Un gesto doméstico, pero también una excusa perfecta para explorar comunicación, red y luz.

Spoiler: sí, se pudo.

resul_casa1.jpg

Además, Ana, de Retrogusto, también es muy fan de la serie, y el cartel con letras de colores encajaba especialmente bien en su bar.

Y como el Retro esta en frente de nuestro estudio todo quedo conectado.
Pasted image 20260107200910.png

El concepto

La idea central es simple: un abecedario iluminado que responde a mensajes enviados desde cualquier lugar.

  1. Se abre una web desde el móvil
  2. Se escribe un mensaje
  3. Las letras se iluminan, una a una, como en la serie

No hay cables entre el móvil y las luces. Todo viaja por internet. El sistema está pensado para poder enviar mensajes a distintos carteles, cada uno en un lugar diferente.

Los ingredientes

pcb_pico_.jpg

Componente Función
Raspberry Pi Pico W Control y conectividad WiFi
Tira de 50 NeoPixels LEDs direccionables
PCB propia Interconexión
Cartel con abecedario Soporte físico de las letras

El Pico W cuesta menos de 7 € y ya incluye WiFi. Los NeoPixels permiten controlar cada LED de forma independiente, algo clave para que cada letra tenga su propio comportamiento lumínico.

La arquitectura: por qué no WebSockets

app_retro.png

El soporte de WebSockets en CircuitPython es limitado, así que se optó por una solución más pragmática: HTTP Long Polling. Sorprendentemente, funciona de forma estable y encaja muy bien con las limitaciones de la placa.

El sistema se apoya en un gateway intermedio que actúa como mediador: guarda los mensajes en una cola y los entrega cuando el Pico los solicita.

Pico: "¿Hay mensajes?"
Gateway: "No, espera…"
(5 segundos después)
Gateway: "Sigue sin haber"
Pico: "¿Y ahora?"
Gateway: "¡Sí! Alguien escribió 'hola'"
Pico: *enciende H… O… L… A…*

El mapeo: cada letra en su sitio

detalle1.jpg

Aquí aparece la parte más artesanal. Cada letra del abecedario debe corresponder a un LED físico concreto:

LETRA_A_LED = {
    'a': 46, 'b': 44, 'c': 42, 'd': 41, 'e': 39,
    'f': 38, 'g': 36, 'h': 34, 'i': 16, 'j': 18,
    ...
}

El cartel tiene 50 LEDs, pero no todos representan letras. El patrón depende de cómo se coloquen físicamente las luces. En este caso:

-zy-x-wvu-ts-r--i-j-kl-mn-o-pq----h-g-fe-dc-b-a--

Cada - es un LED sin letra. El orden está invertido porque la tira comienza por el extremo final.

detalle2.jpg

Cada instalación es ligeramente distinta: las luces llegaron con separaciones variables entre LEDs, lo que obligó a ajustar el mapeo en cada cartel. La globalización tampoco es gratuita en el mundo físico.

El efecto Stranger Things

Encender una letra no es suficiente. Hace falta atmósfera.

El efecto sigue una secuencia reconocible:

  1. Interferencia inicial: LEDs aleatorios parpadean
  2. Aparición progresiva de la letra (fade-in)
  3. Permanencia breve
  4. Desvanecimiento (fade-out)
  5. Paso a la siguiente letra
def pulso_letra(led):
    color = COLORES_LETRAS[random_index]

    for i in range(12):
        brillo = i / 12
        pixels[led] = dim_color(color, brillo)
        time.sleep(0.03)

    time.sleep(1.0)

    for i in range(12, -1, -1):
        brillo = i / 12
        pixels[led] = dim_color(color, brillo)
        time.sleep(0.02)

El resultado es una sensación de comunicación frágil, como si el mensaje tuviera que abrirse paso desde otro lugar.

Efectos de fondo

Cuando no hay mensajes, el sistema no se apaga. Existen varios efectos de fondo que mantienen el cartel “vivo”:

Efecto Descripción
navidad Ondas de colores cálidos
estrellas Puntos titilantes
nebulosa Ondas profundas
aurora Barridos de luz
pulsar Latidos expansivos

La clave es que los efectos son no bloqueantes. Cada uno renderiza un frame y devuelve el control:

class NavidadEffect:
    def update(self):
        if time.monotonic() - self.last_render < self.speed:
            return
        self.render_frame()
        self.last_render = time.monotonic()

Así, el sistema puede recibir mensajes mientras las luces siguen animándose.

Multi-dispositivo

m6.jpg

El sistema soporta varios carteles simultáneamente. Cada uno tiene su propio mapeo de letras, definido por un identificador:

if DEVICE_ID == 'leia':
    LETRA_A_LED = MAPEO_LEIA
elif DEVICE_ID == 'elretro':
    LETRA_A_LED = MAPEO_ELRETRO
else:
    LETRA_A_LED = MAPEO_JUNE

Desde la web se puede elegir a qué cartel enviar el mensaje.

Comandos remotos

Además de texto, el sistema acepta comandos simples:

Comando Acción
hola Deletrea “hola”
navidad Activa efecto navidad
estrellas Activa estrellas
parar Detiene efectos
reset Reinicia el dispositivo
test Verifica el mapeo A-Z

El resultado

resul_casa1.jpg
resul_casa2.jpg

Funciona. Y hay algo especialmente divertido ver cómo las letras aparecen una a una: colores saturados sobre fondo oscuro, dan el pego

Un proyecto pequeño, doméstico, pero que mezcla red, hardware y narrativa.

Código

Si quieres saber más sobre la implementación, puedes pasarte por Retrogusto y preguntar por el código.

Registro
Proyecto desarrollado entre diciembre de 2025
Actualmente hay tres instalaciones activas: ElRetro.