Controle de iluminação com NodeMCU e Ubidots
Quantas vezes você já deixou as luzes da sua casa acesas sem querer? Resolva esse problema rapidamente com um sistema automático de sensor de luz que desliga (e liga) as luzes de acordo com a quantidade de luminosidade no ambiente.
Este sistema funciona com um sensor de luz que detecta a quantidade e a intensidade da luz natural. Se o sensor detectar luz natural, ele apagará a luz da sua casa e abrirá as persianas; se o sensor detectar que não há luz, ele acenderá a luz e fechará as persianas. Além disso, com Ubidots você pode ligar ou desligar uma luz extra quando quiser.
É muito simples de fazer e, mais importante, ajuda a economizar energia.
Visão geral
Este post explica como usar o NodeMCU com Ubidots . O NodeMCU é um dispositivo de Internet das Coisas ( IoT ) com GPIO, PWM, I2C, 1-Wire e ADC integrados em uma única placa, além de conexão Wi-Fi. É fácil de usar e você só precisa da IDE do Arduino para programá-lo.
Requisitos
- NodeMcu versão 1.0
- Base de proteção Grove para NodeMCU
- Revezamento Grove
- Sensor de luz Grove
- LED branco Grove
- Servomotor
- Biblioteca UbidotsESPMQTT
- Conta Ubidots
Configurar
- Primeiro, conecte o NodeMCU à sua placa de expansão e, em seguida, conecte os componentes da seguinte forma:
O resultado final:
- No ambiente de desenvolvimento Arduino (IDE), clique em Arquivo -> Preferências e insira o URL abaixo no campo "URLs adicionais do Gerenciador de Placas". Você pode adicionar vários URLs, separando-os por vírgulas.
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Abra o “Gerenciador de Placas” em Ferramentas -> Menu Placa 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 biblioteca Ubidots , caso ainda não a tenha feito. Agora, clique em Sketch –> Incluir Biblioteca –> Adicionar Biblioteca .ZIP
3. Selecione o arquivo .ZIP do Ubidots ESPMQTT e clique em “Aceitar” ou “Escolher” para todas as bibliotecas. Se não conseguir adicionar a biblioteca, tente manualmente: descompacte o arquivo rar/zip baixado e copie a pasta da biblioteca para o caminho C:\Users\ ubidots \Documents\Arduinolibraries
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” (como mostrado abaixo).

2. Verifique se o nome da Fonte de Dados e da Variável corresponde aos seus Rótulos de API. Isso é importante porque nossa variável será inscrita por meio do Rótulo de API, permitindo a comunicação entre Ubidots e o NodeMCU. Após verificar os rótulos da Fonte de Dados e da Variável, você poderá editar seus nomes com apenas um clique.

3. Crie o interruptor que permite ligar ou desligar a luz. Para isso, acesse Dashboard e, no canto superior direito da página, clique em Adicionar Widget . Selecione Controle –> Interruptor –> manual (fonte de dados) –> luz (variável) –> concluir.
Programe o ESP8266 NodeMCU
Assim que tudo estiver conectado corretamente, iremos para a IDE e escreveremos o seguinte código:
/**************************************** * Incluir Bibliotecas ****************************************/ #include "UbidotsESPMQTT.h" #include<Servo.h> /**************************************** * Definição de Constantes ****************************************/ #define TOKEN "...." // Seu TOKEN Ubidots #define WIFINAME "...." // Seu SSID #define WIFIPASS "...." // Sua Senha do Wi-Fi #define MQTTCLIENTNAME "..." // Seu nome de cliente MQTT. Ele deve ser único, por isso recomendamos escolher um nome ASCII aleatório. Servo myservo; int sensorPin = A0; int ledPin = D5; int relayPin = D3; int state; int lightState; Ubidots client(TOKEN, MQTTCLIENTNAME); /**************************************** * Funções Auxiliares ****************************************/ void callback(char* topic, byte* payload, unsigned int length) { Serial.print("Mensagem recebida ["); Serial.print(topic); 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.ubidotsSubscribe("manual", "extra_light"); //Insira a fonte de dados e os rótulos das variáveis } state = analogRead(sensorPin); lightState = digitalRead(ledPin); if (state <= 50) { digitalWrite(ledPin, HIGH); client.add("light", lightState); myservo.write(180); client.add("blind", 0);ubidotsPublish("Control"); Serial.println("Noite - Luz LIGADA, Persianas fechadas."); } else { digitalWrite(ledPin, LOW); client.add("light", lightState); myservo.write(0); client.add("blind", 1);ubidots("Control"); Serial.println("Dia - Luz DESLIGADA, Persianas abertas."); } client.add("luminosity", state); //Insira seus rótulos de variáveis e o valor a ser enviadoubidots("Control"); client.loop(); }
Resultados
Após gravar o código, acesse o Ubidots e atualize a página. Você verá o novo "controle" criado.
Se você quiser verificar o estado das persianas ou da luz, pode criar seu dashboard como desejar. Caso não saiba como, consulte este tutorial .

Acabamos de mostrar como projetar um sistema de controle de iluminação baseado na Internet das Coisas, o que comprova como tarefas aparentemente complexas podem ser realizadas com muita facilidade com as ferramentas certas.
Chegou a hora de criar um dashboard de controle para gerenciar suas luzes hoje mesmo. Para saber mais sobre Ubidots , confira estes tutoriais em vídeo e inscreva-se gratuitamente hoje!