Guía para conectar tu ESP8266 con Google Assistant usando IFTTT

- Categorías : Teoría

Indice

En esta guía vamos a mostrar un ejemplo para controlar nuestro ESP8266 usando comandos de voz y el Google Assistant. Para este pequeño tutorial vamos a empezar encendiendo un LED conectado en nuestra placa ESP, el cual encenderemos y apagaremos por voz. Para ello lo controlaremos con Arduino y usaremos las plataformas Adafruit IO y IFTTT.

IFTT y Arduino

Material necesario:

  • Placa ESP8266
  • Un dispositivo con Google Assistant (Por ejemplo un Android o iPhone con la App o Google Home)
  • Un ordenador con acceso a internet y el Arduino IDE instalado.
  • Adafruit IO – Una cuenta gratuita
  • IFTTT – Una cuenta gratuita (“maker”) creada.
  • Google – Una cuenta en Google, que será la misma para el asistente

Setup

Para realizar este ejemplo vamos a seguir unos pasos para configurar cada una de las plataformas.

Paso 1: Adafruit IO

Primero de todo, debemos registrarnos en la web de Adafruit. Esta es una plataforma IoT construida sobre el protocolo MQTT (Message Queue Telemetry Transport – Protocolo de transporte de telemetría de cola de mensajes)

MQTT es un protocolo ligero que permite que varios dispositivos se conecten a un servidor compartido, llamado MQTT Broker, y se suscriban o escriban en temas definidos por el usuario. Cuando un dispositivo está suscrito a un tema, el corredor le enviará una notificación cada vez que ese tema cambie. MQTT es más adecuado para aplicaciones con velocidades de datos bajas, restricciones de energía estrictas o conexiones lentas a Internet.

Después de crear nuestra cuenta en Adafruit IO, deberemos ir al apartado “IO” tal y como se indica a continuación.

Pestana IO

Dentro de la pestaña IO, iremos ahora a “Feeds” y clicaremos sobre “View All”. 

View all 

Queremos crear un “Feed”, para ello vamos a la pestaña “Actions” y seleccionamos “créate a New Feed”. Se creará por defecto en el grupo también por defecto “Default”.

Actions_IFTTT

Rellenamos el campo de nombre y descripción, por ejemplo, con “On Off Google”.

 New_feed

Después de darle a “Create”, vamos al menú “Dashboard” y clicaremos también en “view all”.

Dashboard quiere decir tablero de instrumentos, por lo que como su nombre indica, será donde usaremos las diferentes herramientas de Adafruit IO.

 view_all

Seleccionamos “Create a New Dashboard”

create_new_dashboard

Y rellenamos los campos de nombre y descripción, por ejemplo “LightSwitch”.

Create_new_dashboard

Abra el nuevo Dashboard y verás una página casi en blanco. Pulsa el botón azul “+” y te dejará añadir un nuevo “bloque” a la dashboard.

light_swift

Por ahora, todo lo que necesitaremos es un botón de alternancia “toggle”, que debería ser la primera opción.

 create_new_block

Cuando se te solicite que elija una fuente (feed), selecciona la que acaba de crear.

 Choose feed

Mantén los valores predeterminados para el resto de la configuración.

Block_settings

El resultado será el siguiente:

Light_swift

Con esto ya tenemos todo lo necesario con Adafruit IO. El siguiente paso es conectar su ESP8266 al MQTT Broker.

Paso 2: Conectar con la ESP8266

Como hemos dicho, usaremos el Arduino IDE, el cual previamente configuramos como siempre con la librería necesaria para nuestra placa: ESP8266WiFi.h

Para ello, amos a Archivo>Preferencias, y copiaremos la siguiente dirección en el Gestor de URLs Adicionales de tarjetas:

http://arduino.esp8266.com/stable/package_esp8266com_indez.json

Después, buscamos e instalamos las librerías. Para ello vamos a “Herramientas>Placa: >Gestor de tarjetas” y buscamos en el “esp8266” e instalamos la librería que nos aparece.

También deberemos instalarnos la librería “Adafruit MQTT Client”. Como siempre, estas librerías puedes encontrarlas buscando en el Gestor de librerías (Programa >Incluir Librería>Administrar bibliotecas)

Adafruit

Buscaremos la librería “Adafruit MQTT Client”., y a la hora de instalar es posible que nos indique que debemos instalar más (clicando en Install all), por lo que nunca está demás tener las que recomienda para que funcione.

Adafruit_library 

Una vez instaladas, copia el siguiente código en un nuevo sketch, en el cual tendrás que cambiar tus parámetros de red WiFi así como el usuario y clave del Adafruit IO. Esta clave es una cadena de caracteres que puedes encontrar clicando en el botón dorado de tu dashboard o en “View AIO Key” en el menú de la derecha de Adafruit IO.

 Adafruit_IO

/*

 * On Off Google Assistant - Solectro Shop 2020

 * basado en:

 * https://www.instructables.com/id/Control-Your-Projects-With-Google-Assistant-and-Ad/

 */

#include

#include "Adafruit_MQTT.h"

#include "Adafruit_MQTT_Client.h"

#define WIFI_SSID ""

#define WIFI_PASS ""

#define MQTT_SERV "io.adafruit.com"

#define MQTT_PORT 1883

#define MQTT_NAME ""

#define MQTT_PASS ""

WiFiClient client;

Adafruit_MQTT_Client mqtt(&client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS);

Adafruit_MQTT_Subscribe onoff = Adafruit_MQTT_Subscribe(&mqtt, MQTT_NAME "/f/onoff");

void setup()

{

  Serial.begin(9600);

  //Connect to WiFi

  Serial.print("\n\nConnecting Wifi... ");

  WiFi.begin(WIFI_SSID, WIFI_PASS);

  while (WiFi.status() != WL_CONNECTED)

  {

    delay(500);

  }

  Serial.println("OK!");

  //Subscribe to the onoff topic

  mqtt.subscribe(&onoff);

  pinMode(LED_BUILTIN, OUTPUT);

}

void loop()

{

  //Connect/Reconnect to MQTT

  MQTT_connect();

  //Read from our subscription queue until we run out, or

  //wait up to 5 seconds for subscription to update

  Adafruit_MQTT_Subscribe * subscription;

  while ((subscription = mqtt.readSubscription(5000)))

  {

    //If we're in here, a subscription updated...

    if (subscription == &onoff)

    {

      //Print the new value to the serial monitor

      Serial.print("onoff: ");

      Serial.println((char*) onoff.lastread);

      //If the new value is  "ON", turn the light on.

      //Otherwise, turn it off.

      if (!strcmp((char*) onoff.lastread, "ON"))

      {

        //active low logic

        digitalWrite(LED_BUILTIN, LOW);

      }

      else

      {

        digitalWrite(LED_BUILTIN, HIGH);

      }

    }

  }

  // ping the server to keep the mqtt connection alive
  if (!mqtt.ping())
  {
    mqtt.disconnect();
  }
}

  /***************************************************

Adafruit MQTT Library ESP8266 Example

Must use ESP8266 Arduino from:  https://github.com/esp8266/Arduino

Works great with Adafruit's Huzzah ESP board & Feather

 ---->   https://github.com/esp8266/Arduino

 ---->   https://github.com/esp8266/Arduino

Adafruit invests time and resources providing this open source code,

please support Adafruit and open-source hardware by purchasing

products from Adafruit!

Written by Tony DiCola for Adafruit Industries.

MIT license, all text above must be included in any redistribution

****************************************************/

void MQTT_connect() 

{

  int8_t ret;

  // Stop if already connected

  if (mqtt.connected())

  {

    return;

  }

  Serial.print("Connecting to MQTT... ");

  uint8_t retries = 3;

  while ((ret = mqtt.connect()) != 0) // connect will return 0 for connected

  { 

    Serial.println(mqtt.connectErrorString(ret));

    Serial.println("Retrying MQTT connection in 5 seconds...");

    mqtt.disconnect();

    delay(5000);  // wait 5 seconds

    retries--;

    if (retries == 0) 

    {

      // basically die and wait for WDT to reset me

      while (1);

    }

  }

  Serial.println("MQTT Connected!");

}

Paso 3: Conectar Google Assistant mediante IFTTT

En este paso, podremos por fin conectar nuestro asistente de Google con el “MQTT Broker” de Adafruit IO lo que nos permitirá el control de la luz por comandos de voz.

Para hacer esto, usaremos la plataforma IFTTT, de la cual hemos hablado en otra guía.

Si no la conoces, hecha un vistazo a la guía antes de seguir, para registrarte y conocerla previamente. 

Vamos a crear, por tanto, una applet que nos facilite nuestra tarea. Nuestra “receta” será algo así como: Si “enciende la luz”, entonces “Encender luz”. 

 Create_your_own

Crearemos una “New Applet” y elegiremos para nuestro trigger el servicio “Google Assistant”, y seleccionaremos “Say a simple phrase” del menú de triggers disponibles.

Google assisstant

Si no tenemos vinculada la cuenta, nos pedirá que lo hagamos ahora:

 Connect service

Después de esto, nos llevará a una nueva lista de campos que rellenar, como son las variaciones de la frase de activación para que responda el asistente, así como el lenguaje. Para nuestras frases de activación para el encendido de la luz usaremos “Enciende la luz”, “Enciende el LED” y “Enchufa la luz”.

trigger

En la siguiente sección encontramos el filtro con el que nos permite hacer diferentes cosas basándose en las variables globales, tales como hora del día, o manipular la entrada de usuario con un simple Javascript. 

 Javascript

A continuación, pasamos a la siguiente parte de la applet, el “Then”, nuestra acción en repuesta del trigger. Para ello escogemos “Adafruit” como la “Action”, y dentro de ella “Send data to Adafruit IO”. 

Send_data_to_Adafruit 

Si no tenemos vinculada la cuenta a Adafruit, nos abrirá una ventana para conectarla.

 Despues_de_esto

Después de esto, se nos abre dos campos que tendremos que rellenar. Primero rellenaremos el nombre del Feed de Adafruit IO al que queremos enviar los datos, en nuestro caso “On Off Google”. 

Y el siguiente campo son los datos a enviar. Para nuestra applet enviaremos un “ON”, que es nuestro “string” que nuestra ESP8266 estará esperando.

Complete_action 

Una vez rellenemos los campos, solo nos queda darle un título y una descripción a nuestra applet. 

 Review_and_finish

Una vez hayamos creado nuestra applet para “ON”, nos quedará por tanto crear la correspondiente para “OFF” del mismo modo. En está usaremos las frases: “Apaga la luz”, “Apaga el LED” y “desenchufa la luz”. 

Ahora deberías ver las dos applets en el apartado de IFTTT Platform. Ahora podemos probarlas entrando en ellas y dándole a test. Si es la primera vez que usas IFTTT, no lo tendrás vinculado a las cuentas de Google ni Adafruit IO, por lo que te saldrá la opción de hacerlo. 

Applets

Paso 4: Testeo y resolución de problemas

Una vez hayas completado la vinculación, el ejemplo ya está listo. Asegúrate de que el dispositivo con el asistente de Google usa la misma cuenta que has puesto.  

Prueba a encender el LED usando alguna de las frases de activación. Pasados unos 2-5 segundos, la luz LED de la placa ESP8266 debería encenderse. Prueba las diferentes frases de encendido y apagado, para asegurarte que funcionan.

¡Enhorabuena! Ahora ya puedes descubrir todas las opciones que ofrece esta configuración, pudiendo encender diversos dispositivos como ventiladores, haciendo uso de relés, por ejemplo. Descubre y prueba a realizar diferentes proyectos IoT con control de voz.

Si cuando dices las frases de activación, la luz no cambia, puede deberse a varios problemas que debes comprobar:

  • ¿Se enciende la luz cuando fuerzas tu el cambio desde el Adafruit Dasboard? Si no, es posible que tu placa no este conectando con el servidor, no se haya subscrito al “Feed” o no esté chequeando los valores correctos de la cadena string. Usa el Serial Monitor para chequear cuál de estos problemas tiene tu ESP8266.
  • ¿Está escuchándote correctamente el Google Assistant? Si estas usando la app “Google Allo”, puedes ver como el Asistente escucha o puedes escribir directamente la frase que tu quieres que interprete.
  • ¿Está Google Assistant respondiendo con la frase correcta? Si no, entonces la cuenta de Google y tu cuenta de IFTTT no están conectadas. Asegúrate de estar usando la misma en ambos.
  • ¿Se actualiza el dashboard de Adafruit IO cuando la applet de IFTTT se desencadena con el trigger? Si no, entonces tu cuenta de Adafruit IO y la de IFTT no están conectadas. Comprueba en IFTTT para estar seguros de que la cuenta está conectada testeando las applets.

Share