Lumware
Software para tiras de luz programables. Un host Python decodifica medios, aplica el pipeline de color y envía frames por USB serie a un Arduino que pinta una tira NeoPixel.
Lumware streams light. Real pixels, real frames, real photons. No mood-lighting heuristics: the colour that hits the LED is the same colour the dashboard previews.
En xifres
- 30 fps sostingut a 299 LEDs (RGB), measured.
- Wire baud 500 000, frames binaris amb CRC8.
- Frame budget host ~8 ms, latency p99 < 12 ms (host → photon).
- Transport
serialper a hardware real; transportvirtualper a desenvolupament sense Arduino — la UI rep exactament els mateixos bytes que rebria la tira.
La família
- Lumware (flagship, aquest hub) —
host → strip. - Lumware Capture —
sensor → host. Repository separat, planejat. - Lumware Stage —
unity ↔ strip. Repository separat, planejat.
Què no és
No automatització de la llar. No mood-lighting. No núvol — viu a
la LAN. No depèn de hardware: el transport virtual arrenca sense
Arduino i les imatges de calibració se sembren soles al primer boot.
Aprofundir
Els deep-dives — un script de 200 línies que es converteix en una família, l’electrònica mínima, el firmware Arduino, el protocol binari, l’arquitectura Python, BMAD i les branques, la identitat spectrum R/G/B/W, la UI web local, els benchmarks — viuen com a sèrie al blog. Cada article enllaça amb l’anterior i el següent dins de la sèrie.
Serie completa
Parte de Lumware 01/10
Qué es Lumware
Empecé queriendo hacer parpadear unos LEDs. He acabado diseñando una familia de software para tiras de luz programables.
Parte de Lumware 02/10
De script a producto
Había un script de 200 líneas. Funcionaba. Ahí no acababa la historia — sin el paso siguiente, no habría familia.
La electrónica mínima para encender una tira
Seis componentes. Si falta uno, los síntomas engañan: primeros LEDs bien, después color aleatorio. Por qué cada pieza es imprescindible.
Parte de Lumware 04/10
El firmware: Arduino y timing crítico
El Arduino Uno tiene 2 KB de RAM. Una tira de 300 LEDs son 900 bytes solo de píxeles. Cada decisión es una cuestión de espacio.
Parte de Lumware 05/10
Por qué un protocolo binario (y no JSON)
La opción fácil era JSON. También era la que hacía imposible el target de 30 FPS. Un protocolo binario de seis bytes de overhead resuelve el cuello de botella.
Parte de Lumware 06/10
Arquitectura del host: events, settings, scheduler
Tres decisiones cambiaron cómo pensé el host. Ninguna es espectacular por separado. Juntas, hacen toda la diferencia.
Parte de Lumware 07/10
BMAD: planificar antes de escribir código
Si escribo código directamente, me pierdo a la tercera semana. Si planifico de más, me pierdo antes. Tuve que aprender a planificar sin ahogarme planificando.
Parte de Lumware 08/10
Identidad: spectrum R/G/B/W
El nombre tardó más en salir que la arquitectura. Pero cuando salió, todo encajó — hasta los colores de la marca.
Parte de Lumware 09/10
La UI web local: FastAPI dentro de la app
Un mando físico sería óptimo. Construirlo, no. Puse la UI en el navegador y la hice accesible desde cualquier dispositivo de la red.
Framerate real: benchmarks y bottlenecks
El techo teórico es una cosa. Lo que mides es otra. La diferencia entre ambos es donde vive el trabajo pendiente.