En esta guía aprenderás cómo controlar un par de electrodomésticos de 110V a través de Wi-Fi por $9, utilizando SONOFF Dual de Itead, que también puede medir el consumo de energía.
Comparado con los enchufes inteligentes de WiFi de grado consumidor en el mercado, el SONOFF es una gran alternativa para realizar proyectos de IoT en el hogar inteligente e incluso industriales a mayor escala. Además, se basa en el popular chip Wi-Fi ESP8266, lo que lo hace compatible con el entorno de Arduino y otros recursos como nuestras bibliotecas ESP en Ubidots.
Requisitos
Un dispositivo UartSBee para poder programar el SONOFF usando tu computadora
Un SONOFF Dual
La biblioteca UbidotsESPMQTT
Configuración de Hardware
Desmonta el dispositivo SONOFF Dual, esto es para acceder al pinout TTL del SONOFF, que necesitaremos para programar el ESP8266 a bordo. El SONOFF viene sin dos de sus conectores de pines, por lo que necesitarás soldarlos antes de programar la unidad.
Después de soldar, conecta la placa al UartSBee siguiendo esta tabla:
UartSBee ---> SONOFF Dual
VCC ---> VCC
TX ---> RX
RX ---> TX
GND ---> GND
Pinout de UartSBEE
Además, necesitarás hacer una conexión entre el pin GND del conector de pines a la izquierda (el que contiene los pines del Botón 1 y 0), y el pin EN_FW del ESP8266 que se muestra a continuación:
Pinout de SONOFF (cara frontal)
Pinout de SONOFF (cara trasera)
Configuración del IDE de Arduino
En el IDE de Arduino, haz clic en Archivos -> Preferencias e ingresa esta URL en el campo URLs adicionales del gestor de placas, para poder acceder a las bibliotecas del ESP8266 para Arduino:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Este campo soporta múltiples URLs. Sepáralas con comas en caso de que ya tengas otras URLs escritas.
Abre el Gestor de Placas desde el menú Herramientas -> Placa e instala la plataforma ESP8266.
Después de la instalación, ve al menú Herramientas > Placa y selecciona la placa: Módulo Genérico ESP8266.
Descarga la biblioteca UbidotsESPMQTT como un archivo ZIP en nuestro cuenta de GitHub.
De vuelta en tu IDE de Arduino, haz clic en Sketch -> Incluir Biblioteca -> Agregar Biblioteca .ZIP.
Selecciona el archivo .ZIP de UbidotsESPMQTT y luego haz clic en “Aceptar” o “Elegir”.
Cierra el IDE de Arduino y ábrelo nuevamente.
Codificando tu SONOFF Dual
Este código de ejemplo se suscribirá a una variable de Ubidots que enciende o apaga ambos relés al mismo tiempo.
Antes de ejecutar el código, ve a tu cuenta de Ubidots, localiza la pestaña "Dispositivos" y crea un Dispositivo llamado "SONOFF Dual" y una variable en él llamada "Relés". Debería verse así:
Asegúrate de que la etiqueta de API del Dispositivo sea "sonoff-dual" y la etiqueta de API de la variable sea "relays". Estos son los identificadores únicos utilizados por el SONOFF para saber a qué variable suscribirse en el broker MQTT. Puedes editar las etiquetas si es necesario.
Ahora estás listo para flashear tu dispositivo con el siguiente código:
/**************************************** * Incluir Bibliotecas ****************************************/#include "UbidotsESPMQTT.h"/**************************************** * Definir Constantes ****************************************/#define TOKEN "p4uuxxxxxxxxncTVfoVqxxxxxRQW" // Tu TOKEN de Ubidots#define WIFINAME "UBIWIFI" //Tu SSID#define WIFIPASS "clave123456789ubi" // Tu contraseña de Wifi#define MQTTCLIENTNAME "sonoff15345" // Tu nombre de cliente MQTT, debe ser único, por lo que recomendamos elegir un nombre ASCCI aleatorioUbidots client(TOKEN, MQTTCLIENTNAME);/**************************************** * Funciones Auxiliares ****************************************/void relays_on() { Serial.write(0xA0); Serial.write(0x04); Serial.write(0x03); Serial.write(0xA1); Serial.flush(); }void relays_off(){ Serial.write(0xA0); Serial.write(0x04); Serial.write(0x00); Serial.write(0xA1); Serial.flush(); } void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Mensaje recibido ["); Serial.print(topic); Serial.print("] "); for (int i=0;i<length;i++) { Serial.print((char)payload[i]); } if ((char)payload[0]=='1'){ relays_on(); } else{ relays_off(); } Serial.println();}/**************************************** * Funciones Principales ****************************************/void setup() { // pon tu código de configuración aquí, para ejecutar una vez: Serial.begin(19200); Serial.println("Conectando a WiFi..."); client.wifiConnection(WIFINAME, WIFIPASS); client.begin(callback); Serial.println("¡Conectado!"); pinMode(16, OUTPUT); client.ubidotsSubscribe("sonoff-dual","relays"); // Etiquetas de API del dispositivo Ubidots y de la variable Serial.println("¡Suscrito!"); }void loop() { // pon tu código principal aquí, para ejecutar repetidamente: if(!client.connected()){ client.reconnect(); client.ubidotsSubscribe("sonoff-dual","relays"); //Inserta las etiquetas de dataSource y de la variable } client.loop(); }
Puedes realizar acciones más elaboradas manipulando los comandos internos del SONOFF Dual. Aquí hay una referencia rápida que encontramos en sus foros:
Serial: 19230,8,N,1Bytes a enviar a la unidad: 0xA0 0x04 0xxx 0xA1donde 0xxx parece ser: 0x00 ambos apagados 0x01 relé uno encendido 0x02 relé dos encendido 0x03 ambos relés encendidos
Después de flashear tus dispositivos, abre el monitor serial del IDE de Arduino, deberías ver algo como esto, lo que significa que la conexión WiFi y la suscripción MQTT fueron exitosas:
Resultados
Ahora ve a la pestaña "Dashboards" y agrega un nuevo Widget del tipo "Control"--> "Switch":
Este interruptor enviará un "1" o un "0" a la variable "Relés", que luego se lee en la función de callback del SONOFF para encender o apagar los relés. ¡Ahora puedes controlar tu SONOFF Dual de forma remota desde tu dashboard!