Controle de luz com NodeMcu e Ubidots
Quantas vezes você acidentalmente deixou as luzes de sua casa acesas? Resolva esse problema rapidamente com um sistema automático de sensor de luz que pode desligar (e ligar) dependendo da quantidade de luz do ambiente.
Este sistema funciona com um sensor de luz que será responsável por detectar a quantidade e a clareza da luz natural. Se o sensor detectar a luz do dia, ele desligará a luz da sua casa e levantará as persianas; se o sensor detectar que não há luz presente, ele acenderá a luz e baixará as persianas. Além disso, usando Ubidots você pode ligar ou desligar uma luz extra sempre que quiser.
É muito simples de fazer e, mais importante, ajuda a economizar energia.
Visão geral
Este post explica como usar o NodeMcu com Ubidots . NodeMcu é um dispositivo de Internet das Coisas ( IoT ) com placa tudo-em-um GPIO, PWM, IIC, 1-Wire e ADC e possui conexão Wi-Fi. É fácil de usar e você só precisa do Arduino IDE para programar o dispositivo.
Requisitos
- NodeMcu versão 1.0
- Escudo Base Grove para NodeMcu
- Relé Grove
- Sensor de luz Grove
- Grove LED branco
- Servo motor
- Biblioteca Ubidots ESPMQTT
- Conta Ubidots
Configurar
- Primeiro, conecte o NodeMcu à sua blindagem de base e depois conecte os componentes da seguinte forma:
O resultado final:
- Vá para o IDE do Arduino, clique em Arquivos -> Preferências e insira o URL abaixo no campo “URLs adicionais do gerenciador de placa”. Você pode adicionar vários URLs, separando-os por vírgulas.
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Abra “Boards Manager” em Ferramentas -> menu Board e instale a plataforma esp8266. Não se esqueça de selecionar sua placa NodeMCU 1.0 no menu após a instalação.
2. Baixe a Ubidots ESPMQTT, caso ainda não o tenha feito. Agora, clique em Sketch -> Incluir Biblioteca -> Adicionar Biblioteca .ZIP
3. Selecione o arquivo .ZIP do Ubidots ESPMQTT e depois “Aceitar” ou “Escolher” para todas as bibliotecas. Se você não conseguir adicionar a biblioteca, tente manualmente: descompacte o rar/zip baixado e copie a pasta da biblioteca para o caminho C:Users ubidots DocumentsArduinolibraries
4. Feche o Arduino IDE e abra-o novamente.
Configurando Ubidots
- Adicione uma nova fonte de dados chamada “manual” e uma nova variável chamada “extra_light” (conforme visto abaixo).
2. Verifique se o nome da fonte de dados e da variável é igual aos rótulos da API. Isso é importante porque nossa variável será inscrita através do API Label e permite a comunicação entre Ubidots e NodeMcu. Depois de verificar os rótulos da fonte de dados e da variável, você pode editar seus nomes com apenas um clique.
3. Crie o interruptor que permite ligar ou desligar a luz. Para fazer isso, acesse Dashboard e no canto superior direito da página, clique em Adicionar Widget . Selecione Controle -> Alternar -> manual (fonte de dados) -> luz (variável) -> finalizar.
Programe o ESP8266 NodeMcu
Assim que tudo estiver conectado corretamente, iremos ao IDE e escreveremos o seguinte código:
/**************************************** * Incluir bibliotecas ****** **********************************/ #include " Ubidots ESPMQTT.h" #include<Servo.h> /**************************************** * Definir constantes ****** **********************************/ #define TOKEN "...." // Seu Ubidots TOKEN # define WIFINAME "...." //Seu SSID #define WIFIPASS "...." // Seu Wifi Pass #define MQTTCLIENTNAME "..." // Seu nome de cliente MQTT, deve ser exclusivo, por isso recomendamos escolher um nome ASCCI aleatório Servo myservo; int sensorPin = A0; int ledPin = D5; int reléPin = D3; estado interno; int estadodeluz; Cliente Ubidots (TOKEN, MQTTCLIENTNAME); /************************************** *Funções Auxiliares****** **********************************/ void callback(char* topic, byte* payload, unsigned int length) { Serial.print("A mensagem chegou ["); Serial.print(tópico); Serial.print("] "); para (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); } } /**************************************** * Main Functions ****************************************/ void setup() { // put your setup code here, to run once: Serial.begin(115200); client.wifiConnection(WIFINAME, WIFIPASS); client.begin(callback); myservo.attach(D8); pinMode(ledPin, OUTPUT); pinMode(relayPin, OUTPUT); client.ubidots Subscribe("manual", "extra_light"); //Inserir o dataSource e os rótulos da variável } state = analogRead(sensorPin); lightState = digitalRead(ledPin); if (estado <= 50) { digitalWrite(ledPin, HIGH); cliente.add("luz", lightState); meuservo.write(180); cliente.add("cego", 0); cliente. ubidots Publicar("Controle"); Serial.println("Noite - Luz acesa, persianas fechadas."); } else { digitalWrite(ledPin, LOW); cliente.add("luz", lightState); meuservo.write(0); cliente.add("cego", 1); cliente. ubidots Publicar("Controle"); Serial.println("Dia - Luz apagada, cega."); } client.add("luminosidade", estado); //Insira os Labels da sua variável e o valor a ser enviado ao cliente. ubidots Publicar("Controle"); cliente.loop(); }
Resultados
Depois de atualizar seu código, vá para Ubidots e atualize a página. Você verá o novo “controle” criado.
Se quiser verificar o estado das persianas ou da luz pode construir o seu dashboard como desejar. Se você não sabe como conferir este tutorial .
Acabamos de mostrar como projetar um controle de luz baseado na Internet das Coisas, o que prova como coisas aparentemente complexas podem ser feitas facilmente com as ferramentas certas.
Agora é hora de criar um dashboard para controlar e gerenciar suas luzes hoje. Para saber mais sobre Ubidots , confira estes tutoriais em vídeo e inscreva-se gratuitamente hoje mesmo!