Integración Arduino IoT Cloud Amazon Alexa

En este post vamos integrar Arduino con Alexa para lo cual vamos a utilizar Arduino IoT Cloud, es decir usaremos el Editor web Arduino , Arduino IoT Cloud asi como Alexa Skills para Arduino .

En cuanto al hardware se usaran los siguientes componentes:

  • Arduino MKR WiFi 1010 × 1
  • Escudo Arduino MKR ENV × 1
  • Protoboard (genérico) × 1
  • LED de alto brillo, blanco × 1
  • Cables de puente (genéricos) × 1
  • Cátodo común LED RGB × 1
  • Resistencia 220 ohmios

1: Arduino IoT Cloud y montaje inicial

El esquema que se va a usar es bastante simple, como se puede ver en la imagen de abajo, pues se basa en dos simples leds ( uno tricolor) con sus correspondientes resistencias limitadoras todo ello conectado a un arduino MKR

Desde la página principal de IoT Cloud , crearemos algo nuevo y le asignaremos un nombre significativo Luego seleccionaremos el tablero que vamos a usar. Si no puede ver su tablero, es posible que haya omitido agregar un nuevo dispositivo siguiendo el procedimiento que comienza después de hacer clic en el botón AGREGAR DISPOSITIVO , en la sección Dispositivos .

Una vez hecho esto, añadiremos tres propiedades a nuestra «Thing» (cosa) . Los dos primeros representarán las lámparas , el último la temperatura.

El tipo ColouredLight nos permite controlar una Luz RGB , permitiéndonos controlar su brillo y color. Configúrelo como ReadandWrite porque necesitaremos controlar su comportamiento usando Alexa.

El tipo DimmedLight es similar al anterior, pero solo nos permite controlar el brillo de una luz.

La última propiedad a agregar es la temperatura . Agreguemos este como ReadOnly, ya que solo queremos saber su valor, no establecerlo. Como tipo podemos usar el sensor de temperatura (Celsius), pero siéntase libre de configurarlo como Fº si le conviene más.

Así es como debería verse la vista del Panel de control de su cosa en este punto:

Al agregar propiedades, asegúrese de usar solo los tipos enumerados en la sección Hogar inteligente ; de lo contrario, no funcionarán con Alexa.

La sección Smart Home

Ahora vaya al Editor web haciendo clic en el botón Editar boceto en la vista de edición de su cosa .

2: Editor web Arduino

En el Editor web necesitamos agregar algún código al Sketch generado automáticamente para nosotros.

Debido a que queremos leer algunos datos ambientales (es decir, la temperatura, pero no dude en agregar luz, humedad y presión si lo desea), importaremos la biblioteca Arduino_MKRENV en la parte superior de nuestro Sketch.

#include <Arduino_MKRENV.h>

Luego definimos algunas constantes para los pines de la placa que se usarán para R, G, Bandwhitelight , de esta manera el código es más legible:

#define PIN_MEETING_ROOM 5
#define PIN_LOUNGE_AREA_R 2
#define PIN_LOUNGE_AREA_B 3
#define PIN_LOUNGE_AREA_G 4

Ahora, en la función de configuración , podemos inicializar el Arduino MKR ENV Shield con:

if (!ENV.begin()) {
   Serial.println("Failed to initialize MKR ENV shield!");
   while (1);
}

De esta forma si el escudo no está instalado se bloqueará la ejecución del Sketch .

No necesitamos especificar que pinMode debe ser OUTPUT (saldia ) porque lusaremos analogWrite() para establecer la intensidad de nuestro LED blanco o los colores individuales del RGB.

En la función de bucle vamos a leer la temperatura cada segundo:

temperature = ENV.readTemperature();
delay(1000);

Finalmente, es hora de implementar nuestras funciones de devolución de llamada: las que se ejecutarán cada vez que se extraiga un cambio en el valor de una propiedad de IoT Cloud.

Tenemos que implementar onMeetingRoomChangeonLoungeAreaChange:

void onMeetingRoomChange() {
 uint8_t brightness = map(meetingRoom.getBrightness(), 0, 100, 0, 255);
 if (meetingRoom.getSwitch()) {
   Serial.println(brightness);
   analogWrite(PIN_MEETING_ROOM, brightness);    
 }
 else{
   analogWrite(PIN_MEETING_ROOM, LOW);
 }
}

Con el código de arriba primero leemos el valor de brillo de la nube y lo asignamos a un valor utilizable, luego verificamos si el interruptor de la luz está encendido, si lo está podemos encender la luz, usando el brightnessr ojo antes. De lo contrario apagamos la luz

El principio de funcionamiento es el mismo para la otra devolución de llamada:

void onLoungeAreaChange() {
 uint8_t r, g, b;
 loungeArea.getValue().getRGB(r, g, b);
 if (loungeArea.getSwitch()) {
   Serial.println("R:"+String(r)+" G:"+String(g)+ " B:"+String(b));
   analogWrite(PIN_LOUNGE_AREA_R, r);
   analogWrite(PIN_LOUNGE_AREA_B, b);
   analogWrite(PIN_LOUNGE_AREA_G, g);
 }
 else{
    Serial.println("Lamp Off");
    analogWrite(PIN_LOUNGE_AREA_R, 0);
    analogWrite(PIN_LOUNGE_AREA_B, 0);
    analogWrite(PIN_LOUNGE_AREA_G, 0);
 }
}

La única diferencia notable es el hecho de que en lugar del brillo solo, tenemos tres componentes diferentes: son la representación del color RGB de la luz. Por supuesto, podemos definir colores personalizados por nombre en la aplicación Alexa, por lo que no tendremos que decir manualmente qué cantidades de rojo, verde o azul queremos configurar.

Este es el código al completo:

/* 
  Sketch generated by the Arduino IoT Cloud Thing "Office"
  https://create.arduino.cc/cloud/things/f2c77d46-5abb-41e2-a8bb-3990155f342c 

  Arduino IoT Cloud Properties description

  The following variables are automatically generated and updated when changes are made to the Thing properties

  CloudTemperature temperature;
  CloudDimmedLight meetingRoom;
  CloudColoredLight loungeArea;

  Properties which are marked as READ/WRITE in the Cloud Thing will also have functions
  which are called when their values are changed from the Dashboard.
  These functions are generated with the Thing and added at the end of this sketch.
*/

#include "thingProperties.h"
#include <Arduino_MKRENV.h>

#define PIN_MEETING_ROOM 5
#define PIN_LOUNGE_AREA_R 2
#define PIN_LOUNGE_AREA_B 3
#define PIN_LOUNGE_AREA_G 4

void setup() {
  // Initialize serial and wait for port to open:
  Serial.begin(9600);
  // This delay gives the chance to wait for a Serial Monitor without blocking if none is found
  delay(1500);
  
  if (!ENV.begin()) {
    Serial.println("Failed to initialize MKR ENV shield!");
    while (1);
  }

  // Defined in thingProperties.h
  initProperties();

  // Connect to Arduino IoT Cloud
  ArduinoCloud.begin(ArduinoIoTPreferredConnection);
  
  /*
     The following function allows you to obtain more information
     related to the state of network and IoT Cloud connection and errors
     the higher number the more granular information you’ll get.
     The default is 0 (only errors).
     Maximum is 4
 */
  setDebugMessageLevel(2);
  ArduinoCloud.printDebugInfo();
}

void loop() {
  ArduinoCloud.update();
  // Your code here 
  temperature = ENV.readTemperature();
  delay(1000);
}


void onMeetingRoomChange() {
  uint8_t brightness = map(meetingRoom.getBrightness(), 0, 100, 0, 255);
  if (meetingRoom.getSwitch()) {
    Serial.println(brightness);
    analogWrite(PIN_MEETING_ROOM, brightness);    
  }
  else{
    analogWrite(PIN_MEETING_ROOM, LOW);
  }
}


void onLoungeAreaChange() {
  uint8_t r, g, b;
  loungeArea.getValue().getRGB(r, g, b);
  if (loungeArea.getSwitch()) {
    Serial.println("R:"+String(r)+" G:"+String(g)+ " B:"+String(b));
    analogWrite(PIN_LOUNGE_AREA_R, r);
    analogWrite(PIN_LOUNGE_AREA_B, b);
    analogWrite(PIN_LOUNGE_AREA_G, g);
  }
  else{
     Serial.println("Lamp Off");
     analogWrite(PIN_LOUNGE_AREA_R, 0);
     analogWrite(PIN_LOUNGE_AREA_B, 0);
     analogWrite(PIN_LOUGE_AREA_G, 0);
  }
}

3: Configuración de habilidades de Amazon Alexa

Ahora necesitaremos la aplicación Amazon Alexa, que se puede descargar desde la App Store de Apple o la Google Play Store . Una vez instalado, inicie sesión con su cuenta existente o cree una nueva.

Repasemos los pasos necesarios para instalar Arduino Alexa Skill. Seguiremos la secuencia de imágenes a continuación para ver todos los pasos requeridos.

1/9: toca "Dispositivos"
Toque «Dispositivos»
2/9: Ahora habilitemos nuestras habilidades para el hogar inteligente
Ahora habilitemos nuestras habilidades para el hogar inteligente (smart Home Skills)

Tecleando «Arduino» y tocando «buscar» obtendremos una lista. ¡Ese es el que necesitamos!

Una vez seleccionado, tendremos que habilitarlo

Inicie sesión con nuestras credenciales de cuenta Arduino Create

Nuestra Alexa y Arduino IoT Cloud ahora pueden hablar entre sí

Es hora de descubrir nuestros dispositivos

Un poco de paciencia no hará daño, así que habrá que esperar hasta que Alexa reconozca los nuevos dispositivos que nos hemos montado.

4: Configuración de dispositivos Amazon Alexa

Después de esperar un poco, debería ver que se han encontrado algunos dispositivos.

Después de tocar en Elegir dispositivo, se le presentará la página de configuración que enumera todos los dispositivos disponibles (se nombrarán de acuerdo con el nombre de nuestras propiedades en Arduino IoT Cloud).

Vamos a elegir un dispositivo y toque Set Hasta dispositivo . Si lo desea, también puede agregarlo a un grupo (de esta manera puede controlar y organizar sus dispositivos más fácilmente), de lo contrario, omita esta parte.

Repita el proceso de configuración para cada dispositivo que desee controlar.

Finalmente, la vista del dispositivo debería verse así:

Finalmente podemos empezar a preguntar cosas como «Alexa, ¿cuál es la temperatura en la oficina?» o «Alexa, enciende la luz de la sala de reuniones» .

Más información en https://create.arduino.cc/projecthub/303628/arduino-iot-cloud-amazon-alexa-integration-4e6078

Deja una respuesta