Crea una Tira LED Inteligente Animada Controlada por Alexa con Arduino
Componentes y materiales
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino UNO | 1 | También sirve Arduino Nano. Arduino Mega permite controlar más píxeles LED. |
| Raspberry Pi 3 Model B | 1 | Actúa como puente MQTT entre AWS IoT y Arduino. |
| Tira NeoPixel (WS2812) | 1 | Cualquier tira LED WS2812 direccionable funciona. |
Aplicaciones y servicios online
- Arduino IDE – Para programar el Arduino.
- AWS Lambda – Ejecuta código Python en la nube sin gestionar servidores.
- Alexa Skills Kit – Define el modelo de interacción por voz.
- AWS IoT – Gestiona el "device shadow" (sombra del dispositivo) para sincronizar estados.
Descripción del proyecto
Este proyecto permite controlar una tira LED RGB direccionable mediante comandos de voz a Alexa. La arquitectura combina hardware local (Arduino + Raspberry Pi) con servicios en la nube de AWS para lograr un control remoto seguro y escalable.
¿Por qué una tira LED?
Las tiras LED direccionables (WS2812) permiten controlar cada LED individualmente, creando infinitos efectos de color y animaciones. Hace años desarrollé la librería ALA (Arduino Light Animations) para facilitar su uso en placas Arduino. Ahora, Alexa añade control por voz, llevando la experiencia a otro nivel.
Visión general de la arquitectura
El sistema consta de seis bloques interconectados:
- Amazon Alexa: Una Skill personalizada ("Light Strip") traduce comandos de voz en "intents" que envía a la función Lambda.
- AWS Lambda: Script Python que recibe los mensajes de Alexa y actualiza el "shadow" en AWS IoT.
- AWS IoT: Almacena el device shadow (representación JSON del estado de la tira). Cuando el shadow cambia, notifica vía MQTT a los clientes suscritos (Raspberry Pi).
- Raspberry Pi: Ejecuta un cliente MQTT que recibe actualizaciones del shadow y envía comandos serie al Arduino por USB.
- Arduino: Ejecuta la librería ALA para animar la tira LED según los comandos recibidos por puerto serie. Compatible con Uno, Nano o Mega.
- Tira LED WS2812: LEDs direccionables individualmente para animaciones fluidas y coloridas.
El proyecto se divide en dos fases para simplificar:
Fase 1: Control web (base del hardware)
Consulta mi proyecto "Web-Controlled LED Animations with Raspberry Pi and Arduino" en Hackster.io. Esta fase cubre el cableado de la Raspberry Pi, Arduino y la tira WS2812. Al finalizar, podrás controlar animaciones desde un navegador web en tu móvil o PC.
Fase 2: Control por voz con Alexa (esta guía)
Añade la capa de voz usando servicios AWS. Requiere paciencia y seguir los pasos con cuidado.
Configuración de AWS IoT
Una vez completado el hardware, pasamos a la nube. Usaremos Device Shadows de AWS IoT: una copia JSON del estado del dispositivo que sincroniza estado "deseado" y "reportado". La Raspberry Pi se suscribe a los cambios ("delta") del shadow.
Crear un "Thing" en AWS IoT
- Inicia sesión en AWS Console (crea cuenta gratuita si no tienes).
- Selecciona región US East (N. Virginia) o EU (Ireland) (arriba a la derecha).
- Busca "IoT" y abre AWS IoT Core. Cierra el tutorial inicial si aparece.
Política de seguridad
- Menú Secure → Policies → Create a Policy
- Nombre:
LightStripPolicy - Acción:
*| Recurso:*| Efecto: Allow ✓ - Crear política.
Registrar el Thing
- Menú Manage → Things → Register a Thing → Create a single thing
- Nombre:
LS01| Siguiente. - Create certificate (One-click certificate creation).
- Descarga los 3 certificados del dispositivo + Root CA (clic derecho → guardar).
- Activar certificado → Attach a Policy → Selecciona
LightStripPolicy→ Register Thing.
Endpoint de AWS IoT
En el menú Settings (esquina inferior izquierda), anota el Endpoint (ej: xxxxxxxxxx.iot.us-east-1.amazonaws.com). Lo necesitarás en la Raspberry Pi.
Configurar Raspberry Pi para escuchar al Thing
- Instala el SDK Python:
sudo pip3 install AWSIoTPythonSDK - Descarga el repositorio LightStrip:
mkdir -p /home/pi/LightStrip cd /home/pi/LightStrip wget https://github.com/bportaluri/LightStrip/archive/master.zip unzip master.zip - Copia los 4 certificados descargados a
/home/pi/LightStrip/LightStrip-master/pi. - Edita
lightstripcfg.py:
Ajusta:cd /home/pi/LightStrip/LightStrip-master/pi nano lightstripcfg.pyAWSIOT: Tu endpoint anotado.ROOT_CA: Nombre del archivo Root CA.CERTIFICATE: Nombre del certificado del dispositivo.PRIVATE_KEY: Nombre de la clave privada.DEVICE_NAME: Déjalo comoLS01.
- Ejecuta el script:
(El Arduino suele aparecer ensudo python3 lightstrip.py /dev/ttyACM0/dev/ttyACM0; el script lista puertos disponibles).
Verás mensajes de conexión y suscripción al shadow LS01.
Prueba desde la consola AWS IoT
- Ve a Manage → Things →
LS01→ pestaña Shadow. - Clic en Edit en "Shadow Document" y pega:
{ "desired": { "animation": "101" } } - Guarda. Se enviará un mensaje "delta" a la Raspberry Pi y la tira se encenderá con la animación 101.
Para cambiar color a azul:
{ "desired": { "color": "0066CC" } }
Función AWS Lambda
Lambda ejecuta código sin servidores. Sirve de puente entre Alexa Skills Kit y AWS IoT.
- En AWS Console, busca Lambda (misma región que IoT).
- Create Function → Author from scratch:
- Nombre:
LightStrip - Runtime: Python 3.6 (o superior compatible)
- Rol: Create a Custom Role → se abre pestaña → Allow → rol
lambda_basic_execution. - Crear función.
- Nombre:
- Anota el ARN de la función (esquina superior derecha).
- Clic en el box LightStrip → sección Function code:
- Code entry type: Edit code inline
- Runtime: Python 3.6
- Handler:
lambda_function.lambda_handler
- Pega el contenido de
LightStrip\lambda\lambda_function.pyen el editor. - Crea archivo
ala_controller.py y pega el contenido deLightStrip\lambda\ala_controller.py. - Save (botón naranja arriba a la derecha).
Crear la Alexa Skill
- Ve a Amazon Developer Console → Alexa → Alexa Skills Kit → Get Started.
- Add a New Skill → pestaña Skill Information:
- Skill Type: Custom Interaction Model
- Language: English (U.S.)
- Name:
LightStrip - Invocation Name:
light strip - Save.
- Anota el Skill ID.
- Menú Interaction Model → Launch Skill Builder → Code Editor → Pega el contenido de
LightStrip/alexaskill/lightstrip_skill.json. - Save Model → Build Model (tarda unos minutos).
- Vuelve a Skill Information → menú Configuration:
- Service Endpoint Type: AWS Lambda ARN
- Pega el Lambda ARN anotado.
- Save.
Conectar Alexa Skill con Lambda
- Vuelve a tu función Lambda en AWS Console.
- En "Add triggers" (derecha), selecciona Alexa Skills Kit.
- Configura:
- Application Id = Skill ID anotado.
- Add → Save.
¡Listo! Prueba estos comandos de voz
- "Alexa, abre Light Strip"
- "Enciende"
- "Pon brillo al 20 por ciento"
- "Pon brillo al 50 por ciento"
- "Pon color rojo"
- "Pon color turquesa"
- "Apaga"
- "Ejecuta una animación emocionante"
- "Ejecuta una animación relajante"
Interacciones avanzadas
Tú: Alexa, abre Light Strip Alexa: Bienvenido a LightStrip - La tira brillará en azul Tú: Lanza una animación Alexa: ¿Quieres una animación relajante o emocionante? Tú: Relajante Alexa: OK - La tira muestra una animación aleatoria Tú: Siguiente animación Alexa: OK - Otra animación aleatoria
Mejoras y ajustes
Arranque automático al encender
Para que lightstrip.py inicie solo al boot de la Raspberry Pi, añade una entrada en /etc/rc.local o crea un servicio systemd. Así no tendrás que lanzarlo manualmente tras cada reinicio.
Añadir y ajustar animaciones
La Skill incluye 20 variaciones de animación. La librería ALA permite crear las tuyas eligiendo preset, paleta y velocidad. Edita ala_controller.py (alrededor de la línea 80) para modificar o añadir animaciones a tu gusto.
Código completo
Todo el código del proyecto: GitHub - bportaluri/LightStrip
Esquemáticos
Proceso de manufactura
- Panel de control para Flight Simulator 2020 con Arduino Nano: Pantallas LCD y CDI
- Panel de interruptores y LEDs para Microsoft Flight Simulator 2020 con Arduino
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Zapatillas Inteligentes Autoajustables con Cosecha de Energía Integrada
- Construye un Robot Cuadrúpedo Inteligente con Arduino: Guía Paso a Paso
- Control Preciso de Servo con Arduino y MPU6050 (SG90 / MG996R)
- Control de brillo LED sin interrupciones con Bolt IoT y Arduino UNO
- Módulo GPS u-blox LEA‑6H 02: Guía de integración con Arduino y Python
- Brazo Robótico Inteligente Controlado por Arduino: Tutorial DIY Fácil
- Dominando reconocimiento y síntesis de voz en Arduino Due
- Control de Matriz LED 8×8 con Arduino Uno: Guía Paso a Paso