Tutorial de SONOFF Dual: Controla tus electrodomésticos de forma remota con MQTT y Ubidots

En esta guía aprenderás a controlar un par de electrodomésticos de 110 V por Wi-Fi por $ 9, usando el SONOFF Dual de Itead .
Comparado con los enchufes inteligentes Wi-Fi de consumo del mercado, el SONOFF es una excelente alternativa para IoT a gran escala. Además, se basa en el popular chip Wi-Fi ESP8266, lo que lo hace compatible con el entorno Arduino y otros recursos como nuestras bibliotecas ESP en Ubidots .
Requisitos
- Un UartSBee para poder programar el SONOFF mediante tu ordenador
- Un SONOFF Dual
- La biblioteca ESPMQTT Ubidots
Configuración de hardware
Desmonte el dispositivo SONOFF Dual para acceder a la asignación de pines TTL de SONOFF, que necesitaremos para programar el ESP8266 integrado. El SONOFF viene sin dos de sus conectores, por lo que deberá soldarlos antes de programarlo.
Después de soldar, conecte la placa al UartSBee siguiendo esta tabla:
| UartSBee | SONOFF Dual |
|---|---|
| VCC | VCC |
| Texas | RX |
| RX | Texas |
| Tierra | Tierra |
Distribución de pines de UartSBEE

Además, necesitarás hacer una conexión entre el pin GND del cabezal de pines de 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 (frontal)

Pinout de SONOFF (cara posterior)

Configuración de Arduino IDE
- En el IDE de Arduino, haga clic en Archivos -> Preferencias e ingrese esta URL en el URL del Administrador de placas adicionales , para poder acceder a las bibliotecas de ESP8266 para Arduino:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Este campo admite varias URL. Sepárelas con comas si ya tiene otras URL escritas.
- Abra el Administrador de placas desde el menú **Herramientas -> Placa** e instale la plataforma ESP8266.
- Después de la instalación, vaya al Herramientas > Placa y seleccione la placa: Módulo genérico ESP8266.
- Descargue la Ubidots ESPMQTT como un archivo ZIP en nuestra cuenta de GitHub .
- De regreso en su IDE de Arduino, haga clic en Sketch -> Incluir biblioteca -> Agregar biblioteca .ZIP.
- Seleccione el archivo .ZIP de Ubidots ESPMQTT y luego haga clic en “Aceptar” o “Elegir”.
- Cierre el IDE de Arduino y ábralo nuevamente.
Codificación de su SONOFF Dual
Este código de muestra se suscribirá a una variable Ubidots que activa o desactiva ambos relés al mismo tiempo.
Antes de ejecutar el código, acceda a su cuenta de Ubidots , localice la pestaña "Dispositivos" y cree un dispositivo llamado "SONOFF Dual" y una variable llamada "Relés". Debería verse así:

Asegúrese de que la etiqueta de la API del dispositivo sea "sonoff-dual" y la etiqueta de la API de la variable sea "relays". Estos son los identificadores únicos que utiliza SONOFF para saber a qué variable suscribirse en el broker MQTT. Puede 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" // Su TOKEN Ubidots #define WIFINAME "UBIWIFI" // Su SSID #define WIFIPASS "clave123456789ubi" // Su contraseña Wifi #define MQTTCLIENTNAME "sonoff15345" // Su nombre de cliente MQTT, debe ser único por lo que recomendamos elegir un nombre ASCCI aleatorio Ubidots 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* tema, byte* carga útil, unsigned int longitud) { Serial.print("Mensaje llegado ["); Serial.print(tema); Serial.print("] "); para (int i=0;i <length;i++) { Serial.print((char)payload[i]); } if ((char)payload[0]=='1'){ relays_on(); } else{ relays_off(); } Serial.println(); } /**************************************** * Main Functions ****************************************/ void setup() { // put your setup code here, to run once: Serial.begin(19200); Serial.println("Connecting to WiFi..."); client.wifiConnection(WIFINAME, WIFIPASS); client.begin(callback); Serial.println("Connected!"); pinMode(16, OUTPUT); client.ubidotsSerial.println("¡Suscrito!"); } void loop() { // coloca aquí tu código principal para que se ejecute repetidamente: if(!client.connected()){ client.reconnect();ubidotsSubscribe("sonoff-dual","relays"); //Inserta la fuente de datos y las etiquetas de la variable } client.loop(); }
Puedes realizar acciones más elaboradas modificando los comandos internos de SONOFF Dual. Aquí tienes una referencia rápida que encontramos en sus foros :
Serie: 19230,8,N,1 Bytes a enviar a la unidad: 0xA0 0x04 0xxx 0xA1 donde 0xxx parece ser: 0x00 ambos apagados 0x01 relé uno encendido 0x02 relé dos encendido 0x03 ambos relés encendidos
Después de flashear sus dispositivos, abra el monitor serial del IDE de Arduino, debería ver algo como esto, lo que significa que la conexión WiFi y la suscripción MQTT fueron exitosas:

Resultados
Ahora vaya a la pestaña “Dashboards” y agregue un nuevo Widget del tipo “Control”–> “Interruptor”:

Este interruptor enviará un "1" o un "0" a la variable "Relés", que se lee en la función de devolución de llamada de SONOFF para activar o desactivar los relés. ¡Ahora puede controlar su SONOFF Dual de forma remota desde el dashboard!
Ahora es el momento de crear tus propias aplicaciones y dashboards para controlar y gestionar tus entornos. Para saber más sobre Ubidots , consulta estos videotutoriales y regístrate gratis hoy mismo.