Tutorial SONOFF: Un controlador de temperatura ambiente Wi-Fi por 10 $

En nuestra última publicación del blog aprendimos cómo usar el SONOFF Smart Switch para controlar un relé de Ubidots . En este caso aprenderemos a controlar un Aire Acondicionado con el SONOFF TH , una variación del original que incluye sensores de temperatura y humedad. Usando estas lecturas, usaremos Ubidots para encender o apagar su aire acondicionado automáticamente, dependiendo de la temperatura ambiente.
Descripción general

En comparación con los $ 30 que existen, SONOFF es una excelente alternativa para realizar IoT a mayor escala. Además, está basado 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 .
SONOFF viene con su propio firmware y aplicación móvil, pero creemos que su principal valor radica en su factor de forma y precio. ¡Es por eso que decidimos piratear un poco y liberar todo su poder!
Requisitos
Configuración
- Desmonte el dispositivo SONOFF, esto es para acceder al pinout TTL de SONOFF, que necesitaremos para programar el ESP8266 integrado. Necesitará soldar cuatro pines, como se muestran en la imagen a continuación.
- Conecte los pines UARTbee a los pines SONOFF, siguiendo esta distribución de pines:

UARTbee | HIJO |
---|---|
VCC | VCC |
Texas | RX |
RX | Texas |
Tierra | Tierra |
Vaya al IDE de Arduino, haga clic en Archivos -> Preferencias e ingrese esta URL para poder acceder a las bibliotecas de ESP8266 para Arduino:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
en el URL del Administrador de tableros adicionales . Este campo admite múltiples URL, separándolas con comas, en caso de que ya tenga otras URL escritas.
3. Abra el Administrador de placas desde Herramientas -> menú Placa e instale la plataforma ESP8266. Seleccione su placa ESP8266 en Herramientas > Placa después de la instalación.
4. Descargue la biblioteca Ubidots aquí .
5. Ahora, haga clic en Sketch -> Incluir biblioteca -> Agregar biblioteca .ZIP.
6. Seleccione el archivo .ZIP de Ubidots y luego haga clic en “Aceptar” o “Elegir” .
7. Cierre el IDE de Arduino y ábralo nuevamente.
Crear eventos Ubidots
Necesitaremos dos Eventos Ubidots : uno para encender el relé y otro para apagarlo:
- En su Ubidots , vaya a Eventos y luego haga clic en "Agregar nuevo evento".
- Seleccione la fuente de datos SONOFF que acaba de crear.
- Seleccione la Índice de calor .
- Establezca la condición de activación en "mayor que 25" o el índice de calor que desee (el SONOFF envía los datos en grados Celsius)
- Seleccione el tipo de disparador “Establecer una variable”, luego seleccione la fuente de datos SONOFF nuevamente, luego la “Variable de relé”
- Configúrelo en "1" para que Eventos establezca la variable Relé en "1" cuando se cumpla la condición.
- Repita estos pasos para crear un segundo evento, pero esta vez establezca la condición en "menos de 20" y el valor enviado al relé en "0".
Codificando tu SONOFF-TH
Aquí está el código que enciende/apaga el dispositivo SONOFF, para usar este código no olvides cambiar WIFISSID, CONTRASEÑA y tu TOKEN Ubidots .
Para cargar el código en SONOFF necesitarás ponerlo en modo de programación:
- Conecte el UARTbee al USB de la PC.
- Presione el botón SONOFF y desconecte el USB al mismo tiempo.
- Mientras presiona el botón, conecte nuevamente el USB.

/**************************************** * Incluir Bibliotecas ****** **********************************/ #include "Ubidots.h" #include "DHT.h" / ************************************** * Definir instancias y constantes ***** ***********************************/ #define DHTPIN 14 // a qué pin digital estamos conectados #definir TIPO DHT DHT11 // DHT 11 #definir RELÉ 12 #definir LED 13 const char* UBIDOTS_TOKEN = "..."; // Pon aquí tu TOKEN Ubidots const char* WIFI_SSID = "..."; // Pon aquí tu SSID de Wi-Fi const char* WIFI_PASS = "..."; // Pon aquí tu contraseña de Wi-Fi char *macAddrs; DHT dht(DHTPIN, DHTTYPE); Ubidots ubidots(UBIDOTS_TOKEN, UBI_HTTP); /**************************************** * Funciones auxiliares ****** ********************************/ // Pon aquí tus funciones auxiliares /******* ******************************** * Funciones principales ************** **************************/ void setup() { Serial.begin(115200); dht.begin(); ubidots.wifiConnect(WIFI_SSID, WIFI_PASS); pinMode(RELÉ, SALIDA); pinMode(LED, SALIDA); escritura digital (LED, ALTA); ubidots.setDebug(verdadero); // Descomentar esta línea para imprimir mensajes de depuración } void loop() { // Espere unos segundos entre mediciones. retraso(2000); // ¡Leer la temperatura o la humedad tarda unos 250 milisegundos! // Las lecturas del sensor también pueden tener hasta 2 segundos de antigüedad (es un sensor muy lento) float h = dht.readHumidity(); // Leer la temperatura como Celsius (valor predeterminado) float t = dht.readTemperature(); // Verifique si alguna lectura falló y salga temprano (para volver a intentarlo). if (isnan(h) || isnan(t)) { Serial.println("¡Error al leer desde el sensor DHT!"); devolver; } // Calcular el índice de calor en Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false); ubidots.add("humedad", h); // Cambia el nombre de tu variable ubidots.add("temperature", t); ubidots.add("calor", hic); bool bufferEnviado = falso; bufferEnviado = ubidots.send(); // Enviará datos a una etiqueta de dispositivo que coincida con el ID del dispositivo if (bufferSent) { // Hará algo si los valores se enviaron correctamente Serial.println("Valores enviados por el dispositivo"); } ubidots.getDeviceMac(macAddrs); /* Obtener el último valor de una variable como flotante usando HTTP */ float setRelay = ubidots.get(macAddrs, "relay"); if (setRelay == 1.00) { digitalWrite(RELAY, ALTO); //En relé digitalWrite(LED, LOW); //Encendido led } if (setRelay == 0.00) { digitalWrite(RELAY, LOW); //Relé apagado digitalWrite(LED, HIGH); //led apagado } retardo(5000); }
- Cuando termine de cargar el código, desconecte el UARTbee y SONOFF, luego conecte el sensor DHT11.
Su SONOFF está listo para conectarse a una fuente de alimentación de 110-240 V y a su aire acondicionado.
Poniéndolo todo junto
Probamos este proyecto con un fan de “SAMURAI Eole Crystal”. Esta máquina requería presionar un botón para encenderla después de enchufarla a la toma de CA, por lo que soldamos el botón ON/OFF para que siempre esté ENCENDIDO:



Luego volvimos a ensamblar la unidad, la conectamos a la CA y ¡listo!

Dando un paso más…
Ubidots es un servicio en la nube que permite a miles de ingenieros de todo el mundo crear IoT , tanto en la educación como en la empresa. Para saber cómo Ubidots puede ayudar a su empresa, consulte nuestras funciones o déjenos un mensaje.