Ok Google...Arduino!

Iniciado por Ruleman, Abril 21, 2020, 04:58:09 PM

Tema anterior - Siguiente tema

0 Miembros y 2 Visitantes están viendo este tema.

Abril 21, 2020, 04:58:09 PM Ultima modificación: Abril 21, 2020, 05:08:59 PM por facufangio

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


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.


Lo primero que tenemos que hacer es conectarnos a Adafruit IO (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta). 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: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta) 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.



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.







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.


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.






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".





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".




Ahora vamos a pasarle lo que queremos decir para que las acciones se cumplan.


Listo ya tenemos las instrucciones para "Encender". Seguido de esto vamos hacer nuevamente click en el signo "+" para vincular nuestro feed en Adafruit IO.


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.




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.

Código: c

//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.


Como se puede apreciar el D1 de la placa es 5 para el IDE de Arduino.


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!


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!