Controla Luces LED con Alexa mediante Arduino Yun – Tutorial de Hogar Inteligente
Componentes y materiales
| Componente | Cantidad |
|---|---|
| Arduino Yun | 1 |
| Amazon Alexa Echo | 1 |
| LED (genérico) | 1 |
| Tarjeta Micro SD | 1 |
Aplicaciones y servicios online
- Amazon Web Services (AWS) IoT
- AWS Lambda
- Alexa Skills Kit
Sobre el proyecto
Motivación
Desde que construí un espejo inteligente con Alexa integrada, busco más formas de conectar hardware y dispositivos de automatización del hogar. Cuando supe que la nueva API Smart Home de Alexa permite controlar dispositivos personalizados directamente, decidí probarlo.
Este árbol de Navidad controlado por Echo usa una versión anterior de la API, pero sirvió como punto de partida y me guió hacia el Arduino Yun, que combina un sistema Linux y un microcontrolador en un solo paquete.
Mi objetivo era el «hola mundo» de las skills de hogar inteligente: encender y apagar un LED con la voz. Como tenía una matriz LED de 2x3, decidí usarla para darle más vistosidad.
Visión general del proyecto
El proyecto conecta una placa Arduino Yun a una Skill Smart Home v3 de Alexa. Para ello se utilizan: una Skill Smart Home (v3), una función AWS Lambda, un «Thing» de AWS IoT y el Arduino Yun suscrito a ese Thing.
En el diagrama se muestran todas las piezas principales involucradas en el encendido de la luz.
Recomiendo abordar cada paso como un mini-proyecto (puede llevar 1+ hora cada uno) y probar a medida que se avanza. Nada es muy difícil, pero hay muchas piezas interconectadas.
Paso 1: Crear una Skill Smart Home y Lambda asociada
Crear una Skill Smart Home, una función Lambda y vincularlas. Seguid este tutorial. Aseguraos de seguir los pasos de LWA (Login with Amazon) para obtener el Client ID y Client Secret usados en la configuración de la Skill.
Si podéis entrar en el panel de Alexa y descubrir vuestro nuevo dispositivo smart home (en este punto solo una respuesta de Lambda), vais por buen camino.
Nota: el tutorial usa Python 3.6, pero yo usé Python 2.7. Solo podréis copiar la parte handle_discovery de mi función Lambda por ahora.
Paso 2: Crear un Thing en AWS IoT
El descubrimiento no sirve si no se puede actuar, así que creemos un Thing en AWS IoT siguiendo estos pasos. Usaremos el «Thing Shadow» (sombra del thing), que es una copia del estado del thing junto con los cambios deseados. El Arduino se suscribirá a un feed de notificaciones que publica los cambios («delta») en esta sombra.
Una vez creado el Thing, en la pestaña de seguridad del panel web de IoT, descargad la clave pública, la clave privada y el certificado. Pulsad «Activar» para obtener la clave de la Autoridad de Certificación Raíz (Root CA). Guardad todo; el Arduino los usará para autenticarse.
En la pestaña Shadow de vuestro Thing, haced clic en editar y añadid una propiedad para que quede así:
{ "reported": { "light": "on" } }
Paso 3: Conectar Lambda con el Thing
Con el Thing listo, actualizad el código de Lambda para actualizar la sombra del Thing. Podéis copiar mi código completo de Lambda, pero mantened los cambios relacionados con Discovery que hicisteis.
Aseguraos de que el rol IAM asociado a la función Lambda tenga permisos AWSIoTFullAccess. Podéis ver el rol en la parte inferior del panel de configuración de Lambda.
En la página de configuración de Lambda, en la pestaña Test, añadid una directiva llamada TurnOff con el siguiente JSON específico v3. Añadid otra prueba TurnOn cambiando solo el nombre del header a TurnOn.
{
"directive": {
"header": {
"namespace": "Alexa.PowerController",
"name": "TurnOff",
"payloadVersion": "3",
"messageId": "1bd5d003-31b9-476f-ad03-71d471922820",
"correlationToken": "1234"
},
"endpoint": {
"scope": { "type": "BearerToken", "token": "some-access-token" },
"endpointId": "appliance-001",
"cookie": {}
},
"payload": {}
}
}
Al ejecutar las pruebas TurnOn y TurnOff, la sombra del Thing debería mostrar un estado deseado coherente con la acción. Si es así, todo va bien.
Paso 4: Configurar el Arduino Yun
Configurar el hardware del Arduino Yun. Esta guía me resultó más útil que la oficial. Notas: en Windows, formatead la tarjeta SD como FAT32 (exFAT no soportado). No pude ver la página «upgrade» correctamente hasta que conecté por Ethernet; después el WiFi funcionó bien.
Habréis completado este paso cuando veáis esta opción y sigáis los pasos:

También deberíais poder hacer SSH al Arduino. Recomiendo ejecutar df -h y buscar un volumen que indique que la tarjeta SD se ha montado.
Verificad en el IDE de Arduino que podéis cargar el ejemplo Blink.
Paso 5: Conectar el Yun a AWS IoT
Instalad el SDK de AWS IoT para Arduino y ejecutad un sketch de ejemplo para monitorizar los deltas de la sombra del Thing.
Recomiendo este tutorial que explica la instalación del SDK. Para usuarios de Windows con Cygwin, seguid las instrucciones de Mac/Linux (no tuve problemas con la dependencia expect). Ejecutad desde vuestro sistema host:
./AWSIoTArduinoYunInstallAll.sh <IP_Placa> <Usuario> <Contraseña_Placa>
Ese tutorial termina añadiendo la librería AWS-IoT-SDK al IDE de Arduino. Ahora deberíais encontrar el ejemplo ShadowThing en Archivo → Ejemplos → AWS-IoT-Arduino-Yun-Library.
Abrid ese sketch y editad aws_iot_config.h con vuestros endpoints y nombres de certificados/claves.
Al ejecutar el sketch, deberíais ver en el monitor serie que la conexión fue exitosa. Si cambiáis la sombra del Thing en el panel de IoT, deberíais recibir una notificación en el logger serie.
Si hay problemas, verificad que los certificados estén en las rutas correctas y que el texto Root-CA se haya copiado correctamente a un archivo.
Paso 6: Manejar los cambios en la sombra del Thing en el Arduino
Solo queda manejar los cambios en la sombra del Thing en el Arduino. Podéis copiar mi sketch. Básicamente es el ejemplo ThingShadow, pero busca específicamente cambios en la clave light. Cuando se reciben, pone todos los pines del array ledArray a HIGH o LOW según si light es on u off.
El array ledArray incluye el pin 13 integrado, así que sin LEDs adicionales veréis el LED integrado del Yun encenderse y apagarse con vuestros comandos de voz. Si queréis un cubo LED más vistoso, consultad este proyecto para el cableado y añadid los números de pines positivos al ledArray en mi sketch.
Sabréis que habéis terminado cuando podáis pedir a Alexa que encienda y apague vuestro dispositivo smart personalizado.
Si no funciona como se espera, probad con las funciones TestOn y TestOff de Lambda en el panel web; dan más información sobre qué puede fallar.
Paso 7: ¡Celebrad!
Si habéis llegado hasta aquí, ¡enhorabuena! Los Arduino pueden hacer casi cualquier cosa, y ahora sabéis cómo iniciarlo con un simple comando de voz a través de Alexa. Celebradlo encendiendo y apagando la luz muchas veces. ¡El mundo IoT es vuestra ostra!
Código
Código Lambda y Arduino para el proyecto. Los archivos .ino y .h son para el sketch de Arduino, y lambda_function se usa en AWS Lambda Cloud.
Proceso de manufactura
- Controla tu Chromecast con Amazon Alexa usando Raspberry Pi y Python
- Construya un robot Raspberry Pi controlado por Bluetooth con retroalimentación de audio
- Demo ARDrone 2.0 Controlado por Alexa: Dron Activado por Voz con Raspberry Pi y Hologram Nova
- Lámpara de mesa RGB controlada por gestos – Iluminación interactiva y sin manos
- Convierte tu Teclado MIDI en Tutor de Piano Inteligente con Arduino, LEDs y MuseScore
- Controla LEDs con Alexa mediante Raspberry Pi – Guía paso a paso fácil
- Transforma un viejo coche RC en un vehículo controlado por joystick con Arduino
- Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
- Construye un robot controlado por voz con Arduino Nano
- Brazo Robótico Controlado por Ethernet: Control Remoto Simplificado
- PiBot: Robot Pianista con Arduino para Interpretación Musical de Precisión