Ir al contenido principal
Todas las coleccionesTutoriales de proyectos IoT
Automatización del Hogar con Google Assistant y Ubidots
Automatización del Hogar con Google Assistant y Ubidots

Automatiza tu hogar u oficina con un relé ESP8266 y Ubidots, además de añadir comandos de voz con Google Assistant para facilitar la vida.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de una semana

Despliega tu aplicación de automatización del hogar con Ubidots y realiza el valor que el Internet de las Cosas puede aportar a tu hogar u oficina.

En el siguiente tutorial, describimos cómo puedes automatizar tu hogar u oficina con un ESP8266 (nuestro proyecto se centra en el control de luces) y luego incorporar Google Assistant para controlar dispositivos con comandos de voz.

Requisitos:

1. Ensamblaje de Hardware

Aquí en Ubidots, no nos gusta cortar los cables de nuestros electrodomésticos, así que te recomendamos que tú tampoco lo hagas. Para controlar cualquier dispositivo sin cortar su cable de alimentación de CA, en su lugar, recomendamos crear tu cable de extensión y empalmar un relé como el punto medio entre el electrodoméstico y el enchufe de pared de CA.

Este cable de relé actuará como el interruptor de encendido / apagado del dispositivo. Este es el mapa de conexión del cable del relé. Sigue la tabla a continuación para establecer las conexiones entre los sensores y el NodeMCU ESP8266:

NOTA IMPORTANTE: Recomendamos proteger tu hardware con una caja para evitar daños por factores externos como polvo, calor y humedad.

Ensamble el hardware que contiene el cable de extensión con un empalme en el relé, el Escudo Grove de NodeMCU, el NodeMCU ESP8266 y el sensor DHT.

Sigue la tabla a continuación para establecer las conexiones entre el NodeMCU ESP8266 con el Sensor DHT y el Relé: el enchufe de alimentación de CA para el enchufe de pared y su respectivo socket para el dispositivo que se controla.

2. Programación con el IDE de Arduino

  1. Si aún no lo has hecho, descarga el IDE de Arduino.

  • Abre el IDE y selecciona Archivos → Preferencias

  • Agrega la URL a continuación en el campo URLs adicionales del gestor de placas. Puedes agregar múltiples URLs separándolas con comas.

NOTA: Si eres usuario de Mac, notarás que la interfaz es diferente de Windows; deberías instalar este controlador si no puedes instalar el NodeMCU ESP8266.

2. Abre e instala la placa ESP8266 en el Gestor de Placas: Herramientas -> Placa -> Gestor de Placas y encuentra fácilmente la placa escribiendo “ESP8266” en la barra de búsqueda.

3. Ahora selecciona la placa NodeMCU 1.0 desde el menú Herramientas -> Placa
4. Define o verifica el Puerto de tu PC con el que el dispositivo se está comunicando. Ve a Herramientas -> Puerto: -> Selecciona el puerto

  • Asegúrate de que la Velocidad de Carga de tu IDE sea 115200 yendo a Herramientas -> Velocidad de Carga → 115200

5. Descarga la biblioteca Ubidots MQTT ESP de nuestro repositorio de GitHub. Para descargar la biblioteca, haz clic en el botón "Clonar o descargar" y selecciona "Descargar ZIP".

6. Ahora vuelve al IDE de Arduino y carga la biblioteca Ubidots MQTT.

  • Ve a Esquema -> Incluir biblioteca -> Agregar biblioteca .ZIP y elige la biblioteca MQTT ESP de Ubidots. Si se carga correctamente, recibirás la respuesta: "Biblioteca añadida a tus bibliotecas.“

8.Repite el mismo proceso para descargar e instalar la Biblioteca del Sensor DHT.

9. Instala la biblioteca: PubSubClient

Esquema/Programa -> Incluir Biblioteca -> Gestor de Bibliotecas y instala la biblioteca "PubSubClient".

10. Cierra y abre nuevamente el IDE de Arduino.

3. Tiempo de Programación & Visualización de Ubidots

Una vez que tu ESP8266 esté configurado, podemos publicar y obtener datos de Ubidots para monitorear y controlar tus electrodomésticos.

  1. Copia y pega el siguiente código en el IDE de Arduino. No olvides personalizar el SSID y la contraseña de Wi-Fi y tu Token de Ubidots.

/**************************************** * Incluir Bibliotecas ****************************************/#include "UbidotsESPMQTT.h"#include "DHT.h"/**************************************** * Definir Constantes ****************************************/#define TOKEN "xxxx" // Tu TOKEN de Ubidots#define WIFINAME "xxxx" //Tu SSID#define WIFIPASS "xxxx" // Tu Contraseña Wifi#define DEVICE_LABEL "esp8266";#define DHTPIN D1 // pin al que está conectado el sensor#define RELAY D3  	// pin al que está conectado el relé// Descomenta el tipo que estés usando!#define DHTTYPE DHT11   // DHT 11//#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321//#define DHTTYPE DHT21   // DHT 21 (AM2301)Ubidots ubiClient(TOKEN);WiFiClient client;DHT dht(DHTPIN, DHTTYPE);/**************************************** * Funciones Auxiliares ****************************************/void callback(char* topic, byte* payload, unsigned int length) {  Serial.print("Mensaje recibido [");  Serial.print(topic);  Serial.print("] ");  for (int i=0;iSerial.print((char)payload[i]);  }  if ((char)payload[0]=='1'){digitalWrite(RELAY, HIGH);  }  else{digitalWrite(RELAY, LOW);  }  Serial.println();}/**************************************** * Funciones Principales ****************************************/void setup() {  // pon tu código de configuración aquí, para que se ejecute una vez:  ubiClient.ubidotsSetBroker("industrial.api.ubidots.com"); // Establece el broker correctamente para la cuenta empresarial  ubiClient.setDebug(true); // Pasa un valor booleano verdadero o falso para activar mensajes de depuración  Serial.begin(115200);  pinMode(RELAY, OUTPUT);  dht.begin();  ubiClient.wifiConnection(WIFINAME, WIFIPASS);  ubiClient.begin(callback);  if(!ubiClient.connected()){  ubiClient.reconnect();  }  char* deviceStatus = getUbidotsDevice(DEVICE_LABEL);  if (strcmp(deviceStatus, "404") == 0) {ubiClient.add("light", 0); //Inserta tus etiquetas de variable y el valor a enviarubiClient.ubidotsPublish(DEVICE_LABEL);ubiClient.loop();  }  ubiClient.ubidotsSubscribe(DEVICE_LABEL,"light"); //Inserta las etiquetas del Dispositivo y de la Variable}void loop() {  // pon tu código principal aquí, para que se ejecute repetidamente:  if(!ubiClient.connected()){  ubiClient.reconnect();  ubiClient.ubidotsSubscribe(DEVICE_LABEL,"light"); //Inserta las etiquetas del Dispositivo y de la Variable  }  // Leer humedad  float humValue = dht.readHumidity();  // Leer temperatura en Celsius (el valor predeterminado)  float tempCValue = dht.readTemperature();  // Leer temperatura en Fahrenheit (isFahrenheit = true)  float tempFValue = dht.readTemperature(true);  ubiClient.add("temperature-c", tempCValue); //Inserta tus etiquetas de variable y el valor a enviar  ubiClient.ubidotsPublish(DEVICE_LABEL);  ubiClient.add("temperature-f", tempFValue); //Inserta tus etiquetas de variable y el valor a enviar  ubiClient.ubidotsPublish(DEVICE_LABEL);  ubiClient.add("humidity", humValue); //Inserta tus etiquetas de variable y el valor a enviar  ubiClient.ubidotsPublish(DEVICE_LABEL);  ubiClient.loop();   delay(1000);}char* getUbidotsDevice(char* deviceLabel) {  char* data = (char *) malloc(sizeof(char) * 700);  char* response = (char *) malloc(sizeof(char) * 400);  sprintf(data, "GET /api/v1.6/devices/%s/", deviceLabel);  sprintf(data, "%s HTTP/1.1\r\n", data);  sprintf(data, "%sHost: industrial.api.ubidots.com\r\nUser-Agent:esp8266/1.0\r\n", data);  sprintf(data, "%sX-Auth-Token: %s\r\nConnection: close\r\n\r\n", data, TOKEN);  if (client.connect("industrial.api.ubidots.com", 80)) {client.println(data);  } else {return "e";  }  free(data);  int timeout = 0;  while(!client.available() && timeout < 5000) {timeout++;if (timeout >= 4999){    return "e";}delay(1);  }  int i = 0;  while (client.available()) {response[i++] = (char)client.read();if (i >= 399){  break;}  }  char * pch;  char * statusCode;  int j = 0;  pch = strtok (response, " ");  while (pch != NULL) {if (j == 1 ) {  statusCode = pch;}pch = strtok (NULL, " ");j++;  }  free(response);  return statusCode;}


Ahora, verifica que tu código sea correcto haciendo clic en el botón de verificación en el IDE de Arduino sobre el editor.

A continuación, carga el código en tu NodeMCU. Para hacer esto, elige el ícono de flecha derecha al lado del ícono de verificación.

2. Ve a la sección de Dispositivos de tu cuenta de Ubidots y visualiza el dispositivo creado previamente —ESP8266— recibiendo datos de temperatura y humedad.

3. Como el dispositivo ya está conectado y enviando datos a Ubidots, vamos a crear un panel y widgets para controlar la luz de la lámpara desde un panel web o móvil.

4. Ve a tu cuenta de Ubidots y dirígete a Datos->Paneles y crea un nuevo panel haciendo clic en el ícono de más.

5. Crea un widget de control para encender/apagar la lámpara. Es requerido por nuestro código de muestra que la variable a controlar se llame "light," o modifica el código de muestra anterior para reflejar la etiqueta de variable deseada.

Ahora tienes una aplicación de control básica para encender y apagar luces, a la que puedes acceder desde un escritorio o un teléfono móvil descargando la aplicación exploradora de Ubidots en Playstore.

Sin embargo, podemos ir mucho más allá de esto. Ubidots también te permite crear visualizaciones personalizadas como indicadores de medidor, gráficos de líneas, barras y métricas para extraer información de las condiciones de tus activos, como la temperatura y humedad de tu lámpara. Si deseas aprender más sobre los paneles de Ubidots y estas visualizaciones personalizadas, te recomendamos los siguientes artículos:

Para este tutorial, el panel IoT se ve así:

5. Configura una receta en IFTTT para controlar tu sistema usando Google Assistant

Por último, pero no menos importante, aprenderás a controlar luces utilizando comandos de voz con IFTTT, un servicio web que te permite conectar aplicaciones y automatizar tareas, y Google Voice Assistant.

  1. Regístrate o inicia sesión en tu cuenta de IFTTT.

  2. Haz clic en el avatar de perfil y selecciona Crear un nuevo Applet.

3. Haz clic en “+ Esto” (disparador) y selecciona Google Assistant. Luego, selecciona la primera opción “Di una frase simple” como el disparador:

4. En el siguiente paso, necesitas llenar los campos con los comandos de voz personalizados de Google Assistant. Por ejemplo:

  • ¿Qué quieres decir? “Enciende la lámpara”

  • ¿Cuál es otra forma de decirlo? (opcional) “Enciende la lámpara”

  • ¿Y otra forma? (opcional) “Enciende la luz”

  • ¿Qué quieres que el Asistente diga en respuesta? “Ok, encendiendo la lámpara”

  • Idioma Inglés

  • Haz clic en Crear Disparador

5. Con el Disparador ya configurado, es hora de crear la acción “+ eso” y buscar WebHooks como servicio de acción:

6. Llena los campos de la configuración de WebHooks con los siguientes parámetros:

7. Una vez que el disparador y la acción estén configurados y correctamente conectados, puedes ir a tu Google Assistant y decir “Enciende la lámpara” y ver cómo se enciende tu lámpara

8. Ahora repite el mismo proceso para crear el applet para apagar la lámpara. Todos los pasos anteriores son los mismos, las únicas diferencias son las mencionadas a continuación:

  • Configuración del disparador (Google Assistant): cambia “on” por “off”

  • Configuración de la acción (WebHooks): El cuerpo debe ser {"light": 0} en lugar de {"light": 1}

9. Una vez que ambos applets estén creados y conectados, ¡estás listo!

¡Ahora tienes una impresionante aplicación de hogar inteligente para controlar tus luces de forma remota utilizando Ubidots y Google Assistant!

Otros usuarios también encontraron útil...


¿Ha quedado contestada tu pregunta?