Ok Google...Arduino!

  • 0 Respuestas
  • 196 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Ruleman

  • *
  • Ex-Staff
  • *****
  • Mensajes: 210
  • Actividad:
    3.33%
  • Country: 00
  • Reputación 5
  • ex facufangio
    • Ver Perfil

Ok Google...Arduino!

  • en: Abril 21, 2020, 04:58:09 pm

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 (You are not allowed to view links. Register or Login). 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: You are not allowed to view links. Register or Login) 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
  1. //Incluimos las librerías mencionadas.
  2.  
  3. #include <ESP8266WiFi.h>
  4. #include <Adafruit_MQTT.h>
  5. #include <Adafruit_MQTT_Client.h>
  6.  
  7. // Conectamos a nuestro WiFi
  8. WiFiClient client;
  9. #define SSID_WIFI       "Tu_SSID"
  10. #define PASS_WIFI       "Tu_Password"
  11.  
  12. //Conexión con Adafruit IO
  13.  
  14. #define servidor  "io.adafruit.com"
  15. #define puerto     1883
  16. #define usuario   "Usuario"
  17. #define API_KEY   "contraseña por la API"
  18.  
  19. Adafruit_MQTT_Client mqtt(&client, servidor, puerto, usuario, API_KEY);
  20.  
  21. //Configurar el feed de Adafruit
  22.  
  23. //acá hacemos la petición a nuestro feed.
  24. Adafruit_MQTT_Subscribe lights = Adafruit_MQTT_Subscribe(&mqtt, usuario "/feeds/lights");
  25.  
  26. //Definimos la salida que va a tener el rele para poder conectar una lámpara.
  27. const int rele = 5;
  28.  
  29. void setup() {
  30.   Serial.begin(115200);
  31.   pinMode(rele,OUTPUT);
  32.   digitalWrite(rele, LOW);
  33.   delay(10);
  34.  
  35.   // Conectarse a la red WiFi
  36.  
  37.   Serial.println(); Serial.println();
  38.   Serial.print("Conectando a ");
  39.   Serial.println(SSID_WIFI);
  40.   WiFi.begin(SSID_WIFI, PASS_WIFI);
  41.   while (WiFi.status() != WL_CONNECTED) {
  42.     delay(500);
  43.     Serial.print(".");
  44.   }
  45.   Serial.println();
  46.   Serial.println("WiFi Conectado");
  47.  
  48.   //  Adafruit IO
  49.  
  50.   mqtt.subscribe(&lights);
  51.  
  52.   // Conectarse a Adafruit IO
  53.  
  54. //Acá hacemos que conecte y si no es posible lo renitente cada 5 seg"
  55.   int8_t ret;
  56.   if (!mqtt.connected()) {
  57.     Serial.print("Conectando a AdafruitIO");
  58.     uint8_t intentos = 3;
  59.     while ((ret = mqtt.connect()) != 0) {
  60.          Serial.println(mqtt.connectErrorString(ret));
  61.          Serial.println("Intentando en 5 segundos");
  62.          mqtt.disconnect();
  63.          delay(5000);  
  64.          intentos--;
  65.          
  66.          if (intentos == 0) {
  67.            while (1);
  68.          }
  69.     }
  70.     Serial.println("\nConectado!");
  71.   }
  72.  
  73. }
  74.  
  75. void loop() {
  76.  
  77.   //Espera recibir un mensaje que la conexión a MQTT
  78.  
  79.   Adafruit_MQTT_Subscribe *subscription;
  80.   while ((subscription = mqtt.readSubscription(1000))) {
  81.     //Comprobar si el mensaje es para el lights
  82.     if (subscription == &lights) {
  83.       //Comprobar el mensaje
  84.       if (You are not allowed to view links. Register or Login((char *)lights.lastread, "1") == 0){
  85.  
  86. //el valor que guardamos en IFTTT es el que vamos a analizar y comparar para que esto suceda
  87. //si es 1 se va a encender y si es 0 apaga
  88.        
  89.         digitalWrite(rele, HIGH);   //Encendemos el rele
  90.         Serial.println("\nLuz Encendida");
  91.       } else if (You are not allowed to view links. Register or Login((char *)lights.lastread, "0") == 0){
  92.         digitalWrite(rele, LOW);  //Apagamos el Rele
  93.         Serial.println("\nLuz Apagada!");
  94.       }
  95.     }
  96.   }
  97. }
  98.  

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!
« Última modificación: Abril 21, 2020, 05:08:59 pm por facufangio »

 

Arduino + Snap4Arduino "Hola Mundo"

Iniciado por Riojas

Respuestas: 1
Vistas: 3560
Último mensaje Febrero 19, 2017, 09:31:50 pm
por rreedd
Arduino + Snap4Arduino "Juego PONG" [Parte1]

Iniciado por Riojas

Respuestas: 0
Vistas: 2823
Último mensaje Febrero 24, 2017, 04:59:07 pm
por Riojas
Arduino + Snap4Arduino "Juego PONG" [Final]

Iniciado por Riojas

Respuestas: 0
Vistas: 2251
Último mensaje Marzo 15, 2017, 02:33:08 pm
por Riojas
Arduino + Snap4Arduino "Juego PONG" [Parte2]

Iniciado por Riojas

Respuestas: 0
Vistas: 2452
Último mensaje Marzo 03, 2017, 07:07:08 pm
por Riojas
Creando librerías en Arduino #2: Clases, métodos y propiedades... [ITMK Blog]

Iniciado por fermino

Respuestas: 0
Vistas: 3211
Último mensaje Febrero 18, 2015, 10:57:00 pm
por fermino