El sistema funciona con un sensor de luz que será responsable de detectar la cantidad y claridad de la luz del día. Si el sensor detecta luz del día, apagará la luz de tu casa y subirá las persianas; si el sensor detecta que no hay luz, encenderá la luz y bajará las persianas. Además, usando Ubidots puedes encender o apagar una luz extra siempre que lo desees.
Es muy simple de hacer y, lo más importante, te ayuda a ahorrar energía.
Descripción general
Esta publicación explica cómo usar el NodeMcu con Ubidots. NodeMcu es un dispositivo de Internet de las Cosas (IoT) con GPIO, PWM, IIC, 1-Wire y ADC todo en una sola placa, y tiene conexión Wi-Fi. Es fácil de usar y solo necesitas el Arduino IDE para aprender a programarlo.
Requisitos
Configuración
1. Primero, acopla el NodeMcu a su base y luego conecta los componentes.
Debería verse así:
2. Ve al Arduino IDE, haz clic en Archivos --> Preferencias e ingresa http://arduino.esp8266.com/stable/package_esp8266com_index.json en el campo "URLs adicionales del gestor de placas". Puedes agregar múltiples URLs, separándolas con comas.
3. Abre "Gestor de placas" desde Herramientas --> Menú de placas e instala la plataforma esp8266. No olvides seleccionar tu placa NodeMCU 1.0 del menú después de la instalación.
4. Descarga la biblioteca UbidotsESPMQTT si aún no lo has hecho. Ahora, haz clic en Sketch --> Incluir biblioteca --> Agregar biblioteca .ZIP
5. Selecciona el archivo .ZIP de Ubidots ESPMQTT y luego “Aceptar” o “Elegir” para todas las bibliotecas. Si no puedes agregar la biblioteca, intenta manualmente: descomprime el rar / zip descargado y copia la carpeta de la biblioteca a la ruta C:\Users\ubidots\Documents\Arduino\libraries.
6. Cierra el Arduino IDE y ábrelo nuevamente.
Configurando Ubidots
Agrega una nueva Fuente de Datos llamada "manual" y una nueva Variable llamada "extra_light" (como se ve a continuación).
2. Verifica que el nombre de la Fuente de Datos y la Variable sea el mismo que sus Etiquetas API. Esto es importante porque nuestra variable será suscrita a través de la Etiqueta API y permite la comunicación entre Ubidots y el NodeMcu. Después de verificar las etiquetas de la Fuente de Datos y la Variable, puedes editar su nombre con solo un clic.
3. Crea el interruptor que te permite encender o apagar la luz. Para hacer esto, ve a Dashboard y en la parte superior derecha de la página, haz clic en Agregar widget. Selecciona Control --> Interruptor --> manual (fuente de datos) --> luz (variable) --> finalizar.
Programar el ESP NodeMcu
Una vez que todo esté conectado correctamente, iremos al IDE y escribiremos el siguiente código:
/**************************************** * Incluir bibliotecas ****************************************/#include "UbidotsESPMQTT.h"#include <Servo.h>/**************************************** * Definir constantes ****************************************/#define TOKEN "...." // Tu TOKEN de Ubidots#define WIFINAME "...." // Tu SSID#define WIFIPASS "...." // Tu contraseña Wifi#define MQTTCLIENTNAME "..." // Tu nombre de cliente MQTT, debe ser único, por lo que recomendamos elegir un nombre ASCCI aleatorioServo myservo;int sensorPin = A0;int ledPin = D5;int relayPin = D3;int state;int lightState;Ubidots client(TOKEN, MQTTCLIENTNAME);/**************************************** * Funciones auxiliares ****************************************/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]); } Serial.println(); if ((char)payload[0]=='1'){ digitalWrite(relayPin, HIGH); } else if ((char)payload[0]=='0'){ digitalWrite(relayPin, LOW); } }/**************************************** * Funciones principales ****************************************/void setup() { // pon tu código de configuración aquí, para ejecutarse una vez: Serial.begin(115200); client.wifiConnection(WIFINAME, WIFIPASS); client.begin(callback); myservo.attach(D8); pinMode(ledPin, OUTPUT); pinMode(relayPin, OUTPUT); client.ubidotsSubscribe("manual", "extra_light"); //Inserta las etiquetas de la fuente de datos y la variable }void loop() { // pon tu código principal aquí, para ejecutarse repetidamente: if(!client.connected()){ client.reconnect(); client.ubidotsSubscribe("manual", "extra_light"); //Inserta las etiquetas de la fuente de datos y la variable } state = analogRead(sensorPin); lightState = digitalRead(ledPin); if (state <= 50) { digitalWrite(ledPin, HIGH); client.add("light", lightState); myservo.write(180); client.add("blind", 0); client.ubidotsPublish("Control"); Serial.println("Noche - Luz ENCENDIDA, persianas abajo."); } else { digitalWrite(ledPin, LOW); client.add("light", lightState); myservo.write(0); client.add("blind", 1); client.ubidotsPublish("Control"); Serial.println("Día - Luz APAGADA, persianas arriba."); } client.add("luminosity", state); //Inserta las etiquetas de tus variables y el valor a enviar client.ubidotsPublish("Control"); client.loop(); }
ver rawLight_Control alojado con ❤ por GitHub
Resultados
Después de cargar tu código, ve a Ubidots y actualiza la página. Verás la nueva Fuente de Datos "control" creada.
Si deseas verificar el estado de las persianas o la luz, puedes construir tu panel de control como desees. Si no sabes cómo, consulta este tutorial.
Te hemos mostrado cómo diseñar un control de luz basado en el Internet de las Cosas, lo que demuestra cómo cosas que parecen complejas se pueden hacer muy fácilmente con las herramientas adecuadas.
¡Ahora tú prueba! ¡Regístrate en Ubidots gratis!
Este artículo fue publicado originalmente en el blog de Ubidots el 21 de enero de 2017.