(https://i.imgur.com/zEUrSHim.jpg)
Ok Google.....Arduino!
Hola a todos, hoy les traigo un tutorial para que puedan conectar Arduino con un ESP8266 y poderlo usar con el Asistente de Google.
Si bien como Arduino es open source podemos encontrar este mismo tutorial en muchos lados y de formas distintas, es por eso que comparto este material para los amantes de la domótica o makers de Arduino sin la necesidad de gastar tanto dinero en otras formas de automatizar como lo es el sonoff u otro que exista en el mercado.ESP8266
(https://i.imgur.com/gSkXbVfm.jpg)
El ESP8266 es un chip de bajo costo con un stack TCP/IP y a su vez es un microcontrolador independientemente a la conexión a WiFi. A este lo podemos encontrar en un módulo para Arduino o lo podemos encontrar en placas como NodeMCU, Wemos, entre otros tanto. En mi caso usaré un Wemos D1 mini Pro que ya tiene incorporado el ESP8266.
(https://i.imgur.com/FxAdPZIm.jpg)
Lo primero que tenemos que hacer es conectarnos a Adafruit IO (https://io.adafruit.com/ (https://io.adafruit.com/)). Esta plataforma gratuita que trabaja con el protocolo MQTT (Message Queuing Telemetry Transport) este protocolo de red de publicación-suscripción que transporta mensajes entre dispositivos.
Esto nos permite conectarnos en cualquier parte del mundo, para poder revisar sensores o automatizar con el uso de Google Assitent.
Esto funciona de la siguiente manera, el ESP8266 publica o envía información al MQTT Broker que es el encargado de enviar y recibir a los diferentes dispositivos conectados.
Luego usaremos IFTTT (el valor de sus siglas es: "If This Then That", link: https://ifttt.com/ (https://ifttt.com/)) para vincular nuestro Placa y Adafruit IO con los servicios de IFTTT combinando condiciones y acciones para poder así automatizar lo que se nos ocurra.(https://i.imgur.com/zXKjUCx.png)
Empecemos!
Primero tenemos que crear una cuenta en Adafruit IO para poder cargar nuestro feeds.
Para crear un Feeds, nos vamos a la pestaña con el mismo nombre y en Actions/ Create a New Feed.
(https://i.imgur.com/IvHw2nG.png)
(https://i.imgur.com/f2RY90p.png)
Nos aparecerá una nueva ventana que le vamos a poner un nombre y una descripción. En mi caso le puse lights y no agregue descripción, eso es opcional. Luego presionamos Crerate.(https://i.imgur.com/vuZxhcj.png)
Una vez creado nos dirigimos donde dice Adafruit IO Key, esto nos proporcionara un nombre de usuario y contraseña para poder vincular nuestra placa. Yo tape los valores porque justamente lo estoy usando para esta práctica.
(https://i.imgur.com/3bRv9gm.png)
(https://i.imgur.com/XNkuAmf.png)
Una vez realizado este paso, nos dirigiremos a la página de IFTTT para crear un usuario con la cuenta de Google o la que ustedes deseen.
Vamos al icono de nuestro perfil y seleccionamos "Create". (https://i.imgur.com/0uMFcwT.png)
(https://i.imgur.com/8RASOSz.png)
Nos aparecerá algo como lo siguiente, hacemos click en el signo de "+" y buscamos "Google Assistant" y seleccionamos la opción "Say a simple phrase".(https://i.imgur.com/KCuHPKi.png)
(https://i.imgur.com/MG5E7jZ.png)
Ahora vamos a pasarle lo que queremos decir para que las acciones se cumplan.
(https://i.imgur.com/sQHmQTq.png)
Listo ya tenemos las instrucciones para "Encender". Seguido de esto vamos hacer nuevamente click en el signo "+" para vincular nuestro feed en Adafruit IO.
(https://i.imgur.com/Scxyhm0.png)
Seleccionamos la única opción y nos aparecerá una ventana, en este paso seleccionamos el nombre de nuestro Feed y le pasamos un valor para guardar, en este caso yo puse "1", si quieren le pueden cambiar el valor por "encender". Listo le dan a "Create action" y ya tenemos la acción de "Encender", hay que tener en cuenta que tenemos que repetir los pasos anteriores para generar la acción de "Apagar", y le ponen un "0" al "Data to Save" o simplemente "apagar" quedando de la siguiente manera.(https://i.imgur.com/Ti5mOBc.png)
(https://i.imgur.com/iw1o0iC.png)
Ahora vamos al código que tanto están esperando.
Primero tenemos que cargar las librerías del ESP8266 y las de Adafruit_MQTT, para poder realizar el enlace.
//Incluimos las librerías mencionadas.
#include <ESP8266WiFi.h>
#include <Adafruit_MQTT.h>
#include <Adafruit_MQTT_Client.h>
// Conectamos a nuestro WiFi
WiFiClient client;
#define SSID_WIFI "Tu_SSID"
#define PASS_WIFI "Tu_Password"
//Conexión con Adafruit IO
#define servidor "io.adafruit.com"
#define puerto 1883
#define usuario "Usuario"
#define API_KEY "contraseña por la API"
Adafruit_MQTT_Client mqtt(&client, servidor, puerto, usuario, API_KEY);
//Configurar el feed de Adafruit
//acá hacemos la petición a nuestro feed.
Adafruit_MQTT_Subscribe lights = Adafruit_MQTT_Subscribe(&mqtt, usuario "/feeds/lights");
//Definimos la salida que va a tener el rele para poder conectar una lámpara.
const int rele = 5;
void setup() {
Serial.begin(115200);
pinMode(rele,OUTPUT);
digitalWrite(rele, LOW);
delay(10);
// Conectarse a la red WiFi
Serial.println(); Serial.println();
Serial.print("Conectando a ");
Serial.println(SSID_WIFI);
WiFi.begin(SSID_WIFI, PASS_WIFI);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi Conectado");
// Adafruit IO
mqtt.subscribe(&lights);
// Conectarse a Adafruit IO
//Acá hacemos que conecte y si no es posible lo renitente cada 5 seg"
int8_t ret;
if (!mqtt.connected()) {
Serial.print("Conectando a AdafruitIO");
uint8_t intentos = 3;
while ((ret = mqtt.connect()) != 0) {
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Intentando en 5 segundos");
mqtt.disconnect();
delay(5000);
intentos--;
if (intentos == 0) {
while (1);
}
}
Serial.println("\nConectado!");
}
}
void loop() {
//Espera recibir un mensaje que la conexión a MQTT
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(1000))) {
//Comprobar si el mensaje es para el lights
if (subscription == &lights) {
//Comprobar el mensaje
if (strcmp((char *)lights.lastread, "1") == 0){
//el valor que guardamos en IFTTT es el que vamos a analizar y comparar para que esto suceda
//si es 1 se va a encender y si es 0 apaga
digitalWrite(rele, HIGH); //Encendemos el rele
Serial.println("\nLuz Encendida");
} else if (strcmp((char *)lights.lastread, "0") == 0){
digitalWrite(rele, LOW); //Apagamos el Rele
Serial.println("\nLuz Apagada!");
}
}
}
}
Esquema de conexión.
(https://i.imgur.com/UtbXuRg.png)
Como se puede apreciar el D1 de la placa es 5 para el IDE de Arduino.(https://i.imgur.com/tYvvXhV.png)
Anotación Importante!
La placa de Wemos tiene que ser conectada a 3.3V como máximo y el rele a 5v, por lo que van a tener que usar una fuente aparte para alimentar el relay.Y a todo esto lo podemos controlar con el asistente de Google desde nuestro smartphone, sin necesidad de comprar nada más que el módulo!Les dejo una imagen del trabajo terminado!
(https://i.imgur.com/j888UPs.jpg)
Yo en este caso solo lo programe para que trabaje un solo rele, pero se pueden agregar más acciones y feeds como también reles.
Bueno espero que les sirva de ayuda y lo puedan poner en práctica. Si tienen dudas o sugerencias las pueden comentar y los ayudo.
En próxima edición de la revista enviaré un aporte para controlar con otras cositas ;).
Gracias por leer y los leo!