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.
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.
El concepto
La idea central es simple: un abecedario iluminado que responde a mensajes enviados desde cualquier lugar.
- Se abre una web desde el móvil
- Se escribe un mensaje
- 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
| 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
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
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.
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:
- Interferencia inicial: LEDs aleatorios parpadean
- Aparición progresiva de la letra (fade-in)
- Permanencia breve
- Desvanecimiento (fade-out)
- 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
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
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.