Controle de temperatura com Ubidots MQTT e NodeMCU

Este guia detalha como criar um controlador de temperatura com Ubidots e um NodeMCU simples para enviar alertas por e-mail ou SMS quando sua "variável" (neste caso, a temperatura) ficar muito quente, muito fria ou atingir um determinado limite definido.
Vamos usar uma versão pré-cabeada e à prova d'água do sensor DS18B20 (sensor de temperatura OneWire). Ele é útil quando você precisa medir algo à distância ou em condições de umidade. O sensor de temperatura OneWire possui diferentes versões; uma delas tem um resistor integrado e outras não, então certifique-se de usar a versão correta antes de começar o projeto. Para o controle, usaremos um NodeMCU com um pino digital.
Requisitos
- NodeMcu versão 1.0
- Sensor de temperatura OneWire DS18B20
- Biblioteca UbidotsESPMQTT
- Biblioteca OneWire
- Biblioteca de Temperatura de Dallas
- Um resistor de 4,7 kΩ (caso seu DS18B20 não tenha um)
- Cabos
Configurar
- Primeiro, precisamos escolher uma versão. Se o seu sensor tiver o resistor integrado, basta conectá-lo ao NodeMCU desta forma:
| DS18B20 | NodeMCU |
|---|---|
| FIO PRETO | GND |
| FIO VERMELHO | Vin |
| FIO AMARELO | D3 |
Caso contrário, você precisa alimentar o pino DATA através do resistor de 4,7kΩ, e os pinos Vin e GND devem ser conectados entre si e ao terra.

- No ambiente de desenvolvimento Arduino (IDE), clique em Arquivo -> Preferências e insira o seguinte URL 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 (e não se esqueça de selecionar sua placa NodeMCU 1.0 em Ferramentas > Menu Placa após a instalação).
-
Faça o download das Ubidots ESPMQTT , OneWire e DallasTemperature usando estes links.
-
Agora, clique em Sketch -> Incluir Biblioteca -> Adicionar Biblioteca .ZIP .
-
Selecione os arquivos .ZIP do Ubidots ESPMQTT, OneWire e DallasTemperature e clique em “Aceitar” ou “Escolher” para todas as bibliotecas. Se não conseguir adicionar as bibliotecas, tente manualmente: descompacte o arquivo rar/zip baixado e copie a pasta da biblioteca para o caminho C:\Users\ ubidots \Documents\Arduinolibraries .
-
Feche a IDE do Arduino e abra-a novamente.
Código
Assim que tudo estiver conectado corretamente, iremos para a IDE e escreveremos o seguinte código:
/**************************************** * Incluir Bibliotecas ****************************************/ #include "UbidotsESPMQTT.h" #include<OneWire.h> #incluir<DallasTemperature.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. #define Pin D3 float temp; OneWire ourWire(Pin); DallasTemperature sensors(&ourWire); 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(); } /**************************************** * Main Functions ****************************************/ void setup() { // put your setup code here, to run once: Serial.begin(115200); client.wifiConnection(WIFINAME, WIFIPASS); sensors.begin(); client.begin(callback); } void loop() { // put your main code here, to run repeatedly: if(!client.connected()){ client.reconnect(); } sensors.requestTemperatures(); //Prepare the sensor for reading temp = sensors.getTempCByIndex(0); Serial.print(sensors.getTempCByIndex(0)); //Read and print the temperature in Celsius client.add("temperature", temp); //Insert your variable Labels and the value to be sent delay(1000); Serial.println("Grados Centigrados"); client.<a i=3> ubidots Publish("control"); client.loop(); }
Resultados
Agora, abra sua conta Ubidots Origem . Você verá uma nova fonte de dados chamada "control". Clique nela.

Aqui você verá o valor da temperatura:

Criar um alerta
Você também pode criar um evento que o notifica quando a temperatura estiver irregular. Vá para Eventos , clique em Adicionar Evento e selecione sua Fonte de Dados e Variável .
O sistema de eventos pode enviar notificações por e-mail, SMS, Telegram ou WebHook. Você também pode definir uma variável:

Quando seu evento estiver pronto, você deverá ver estas janelas:

Neste exemplo, se da temperatura for >= 28 , Ubidots enviará um e-mail conforme configurado anteriormente, da seguinte forma:
É muito simples! Com apenas alguns cabos, você pode monitorar o comportamento da temperatura da sua casa, esteja você dentro ou fora. Você pode até mesmo acionar alertas por e-mail/SMS em caso de incêndio.
Agora tente você!
… ainda não se cadastrou no Ubidots ? Não se preocupe, você pode se cadastrar aqui em menos de 30 segundos.
