Monitorando ambiente com NodeMCU
Opa pessoal, tudo beleza? Hoje vamos aprender a como estar monitorando ambiente com NodeMCU. Assim, este exemplo se aplica muito na área de IoT – Internet of Things (Internet das Coisas). Em resumo, nós iremos realizar a interação de sensores no mundo físico, tudo isso focado em seu processamento e resultados no mundo virtual (internet).
Mas, o intuito desse post é demonstrar a aplicação de um Webserver local integrado à um LDR, DHT22, DS18b20 (mais conhecido como sensor de temperatura à prova d’água). Ou seja, realizar um monitoramento de ambiente com o NodeMCU.
Mas calma, primeiro leia isso.
Primeiramente, para melhor compreensão desse post, recomendo que você já tenha algum conhecimento de programação aplicada à módulos de internet, nessa aplicação o módulo NodeMCU V3 e saiba o básico de html (Para o melhor desenvolvimento de um layout de página amigável).
Onde posso aplicar esse projeto?
Então, essa integração possui inúmeras aplicações físicas no mundo, desde o simples monitoramento residencial para makers e developers, até aplicação industrial. Mas chega de balela, e vamos direto ao assunto.
Componentes do Projeto
- LDR (Light Depending Resistor) ou Resistência dependente de Luz;
- DHT 22
- DS18b20 – Um sensor de temperatura à prova d’água (ideal para aplicações aquáticas) com uma resolução incrível de 0,5ºC;
- NodeMCU V3 ESP12E (Wemos);
- Resistor de 4,7k(DS18b20);
- Resistor de 10k (LDR);
- Protoboard
- Jumpers
Esquema de montagem
Entendendo o Código
Primeiramente, vamos por partes agora, conhecendo cada trecho, pra ficar fácil :). Em seguida, foram utilizadas as bibliotecas DHT e DallasTemperature, que podem ser encontradas nos seguintes links:
Dessa forma, a configuração de cada um desses sensores, e inicializá-lo é algo simples e de fácil entendimento. Mas há uma dica, sempre que for utilizar/aplicar um sensor, seja ele analógico ou digital, siga sempre 3 palavras:
Informar, iniciar e ler
– Informar quais bibliotecas usadas, e qual configuração do sensor (porta, frequência de leitura, etc.);
– Iniciar o sensor, no setup;
– Ler o sensor, através de chamadas de leituras.
Então, sabia que todas essas informações são obtidas destrinchando a biblioteca. Vamos nessa?
Parte do código referente ao set do DHT22:
– Informei qual biblioteca usar “…DHT.h.”, qual porta está “…DHTPIN 4; DHT dht(DHTPIN, DHTTYPE,11)” e quais variáveis (t,h).
– Iniciei o sensor “dht.begin()”;
– Li o sensor “..t = readTemp e h = readHumi..”.
#include <DHT.h>
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define DHTPIN 4 // GPIo4 ou porta D2 do NodeMCU
DHT dht(DHTPIN, DHTTYPE,11); //Criação do objeto de leitura DHT
float t,h; //variáveis que armazenarão os valores lidos de temperatura e umidade;
void setup(){
dht.begin(); //Inicia o sensor
}
void loop(){
t=dht.readTemperature(); //Função de leitura da temperatura
h=dht.readHumidity();//Função de leitura da umidade
}
Parte do código referente ao set do DS18B20:
– Informei = “..OneWire ; DallasTemperature ; ONE_WIRE_BUS ; oneWire, Dallas…);
– Iniciei = “sensors…”;
– Li = “t2 = …”
#include <OneWire.h>
#include <DallasTemperature.h
#define ONE_WIRE_BUS 16 //GPI016 ou porta D0 do NodeMCU OneWire
oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire); //Criação do objeto sensors.
void setup(){
sensors.begin();// Inicia o objeto sensors.
}
void loop(){
sensors.requestTemperatures();
t2 = sensors.getTempCByIndex(0);
}
Parte do código referente ao set do LDR:
O LDR tem somente uma mudança em relação aos outros sensores, pra uso prático, não há necessidade da utilização de uma biblioteca, então:
– Informo (… ldr, valorldr);
– Leio (valor ldr = analogRead(A0)
int ldr = 0; //Setando a utilizaçâo do LDR à porta ADC A0 do Nodemcu
int valorldr = 0;//variável para armazenar a leitura do ldr.
void loop(){
valorldr = analogRead(ldr);
}
Por fim, vamos a parte do código referente ao set do Webserver e envio de dados para o mesmo.
Portanto, para iniciar e rodar um Webserver, deve-se informar algum parâmetros – tais como nome e senha da rede de internet à ser conectada, qual porta de conexão deverá se utilizar (normalmente utiliza-se à 80) – algum métodos devem ser seguidos, que podem ser visto no código abaixo.
#include <ESP8266WiFi.h>
const char* ssid = "sua-rede";
const char* password = "sua-senha";
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(10);
// Conecta à rede WiFi.
Serial.println();
Serial.println();
Serial.print("Conectando à ");
Serial.println(ssid);
WiFi.begin(ssid, password); // Inicia o wifi
while (WiFi.status() != WL_CONNECTED) {
delay(500); //Condição de verificação que ENQUANTO a rede não conectar, ele continurá printando “.”.
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi conectado");
// Inicia o servidor
server.begin();
Serial.println("Webserver rodando");
// Te mostra qual IP foi adquirido junto ao roteador, guarde bem o número desse IP, pois seu webservice poderá ser acessado pelo navegador através dele
Serial.println(WiFi.localIP());
}
void loop() {
// Afim de prevenir erros, verifica se o webservice ainda está conectado
WiFiClient client = server.available();
if (!client) {
return;
}
while(!client.available()){
delay(1); }
// Lê A PRIMEIRA LINHA DA REQUISIÇÃO de envio
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
// Como resposta a “aceitação” à requisição de envio
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nEscreva algum texto aqui. ";
s += “variável a ser lida";
s += "</html>\n";
// Mostra resposta ao cliente, para quem foi enviado
client.print(s);
delay(1);
Serial.println("Client disconnected");
// The client will actually be disconectado
// when the function returns and 'client' object is detroyed
}
Obs: Como forma de enxugar o código, somente nesta parte, foi utilizada o Example da IDE Arduino – “WifiWebserver”.
Resultado do Projeto

Algumas informações importantes:
Primeiramente, na linha 56, há um requisito de impressão WiFi.localIP(). Aqui, é mostrado qual IP o módulo adquiriu junto ao roteador. Então, copie esse endereço, vá ao navegador, e acompanhe seu trabalho completo!
Código Completo do Projeto
#include <ESP8266WiFi.h>
#include <DHT.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define DHTTYPE DHT22 // DHT 22 (AM2302)
#define DHTPIN 4 // GPIo4 ou porta D2 do NodeMCU
DHT dht(DHTPIN, DHTTYPE,11);
#define ONE_WIRE_BUS 16 //GPI016 ou porta D0 do NodeMCU
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
const char* ssid = "Familia Pereira"; //Configuração de sua rede WiFI
const char* password = "04091327";
float t,h;//variáveis que armazerão temperatura e umidade lidas do DHT22
float t2; //variável para o sensor ds18b20
int ldr = 0; //Setando a utilizaçâo do LDR à porta ADC A0 do Nodemcu
int valorldr = 0;//variáveis aplicadas ao LDR
int id = 1; //Identificação de qual conjunto de sensores está sendo enviado aquela informação
(Caso você deseje aplicar mais de um conjunto de sensores)
signed long rssi = WiFi.RSSI(); //Função "medir" a intensidade do sinal WiFi - interessante para
aplicaçôes onde há muitas barreiras, até o ponto onde está localizado o roteador.
String myIPAddrStr; //Variável para armazenamento do IP gerado para acesso do Webservice.
// As funções abaixo são para definiçâo de IPFixo - Caso deseje configurar, basta descomentar as linhas 14,15,16.
//IPAddress ip(192,168,72,171); //Alterar aqui para o IP Desejado
//IPAddress gateway(192,168,72,1); //Gateway da rede
//IPAddress subnet(255,255,255,0);//Mascara da rede
WiFiServer server(80); //Definição para o webservice utilizar a porta 80.
void setup() {
Serial.begin(9600);
sensors.begin();
dht.begin();
delay(10);
// Aqui começa a conexão com a rede
Serial.println();
Serial.println();
Serial.print("ESP8266 Conectando à ");
Serial.println(ssid);
WiFi.begin(ssid, password); //Inicia a conexão WiFi, utilizando os parametros fornecidos.
//WiFi.config(ip, gateway, subnet); //Ao setar IP Fixo, descomentar essa linha
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Conectado");
server.begin();
myIPAddrStr = String(WiFi.localIP().toString());
Serial.println(WiFi.localIP()); //Acesse seu webserver atráves do IP gerado aqui.
}
void loop() {
delay(2000);
t = dht.readTemperature(); //Chamada de leitura do sensor DHT22
h = dht.readHumidity();
sensors.requestTemperatures();
t2 = sensors.getTempCByIndex(0); // //Chamada de leitura do sensor DS18b20
rssi = WiFi.RSSI();
valorldr = analogRead(ldr);
WiFiClient client = server.available(); // Comparação se o cliente Wifi, está disponível
if (!client) {
return;
}
Serial.println("Webserver gerado.");
while(!client.available()){
delay(1);
}
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
String url = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n";
//Geração da página HTML
url += "<html>\r\n";
url += "<title>Monitoramento remoto</title>";
url += "<center><h1>Os parâmetros ambientais lidos são:</h1>";
url += "<br/>";
url += "<br/>";
url += "<br/>";
url += "<b>Temperatura (DHT22) = </b>";
url += t;
url +="ºC";
url += "<br/>";
url +="<b>Umidade (DHT22) = </b>";
url += h;
url +="%";
url += "<br/>";
url += "<b>Temperatura (DS18b20) = </b>";
url += t2;
url += "ºC";
url += "<br/>";
url += "ID = ";
url += id;
url += "<br/>";
url += "<b>Luminosidade = </b>";
url += valorldr;
url += "<br/>";
url += "<b>Intens. Sinal = </b> ";
url += rssi;
url += "<br/>";
url += "<b>IP = </b>";
url += String(myIPAddrStr);
url += "<br/>";
url += "<input type=""button"" value=""Atualizar"" onClick=""history.go(0)"">" ; //Essa linha gera um botão p/ atualizar a página do webservice.
url += "<br/>";
url += "<br/>";
url += "<br/>";
url += "<br/>";
url += "<br/>";
url += "<br/>";
url += "<b>www.autocorerobotica.blog.br </b> por <b> I.A.P </b>";
url += "</center></html>\n";
client.print(url);
Serial.println();
Serial.println("Fechando a conexão");
delay(30000); //Espera 30 segundos e recomeça o loop.
}
Por fim, não percam o próximo post – Monitoramento de segurança com SENSOR PIR e Arduíno!
Então, tem opniões? Dúvidas? Sugestões de projetos?Deixem nos comentários abaixo!

Sou fã e me espelho no jeito visionário do Elon Musk e dele vem minha frase favorita:
“Fracasso é uma possibilidade por aqui. Se as coisas não estão fracassando, você não está inovando o suficiente.”


Cara! Muito Bacana! Parabéns!!!!
Olá, Rapha. Boa tarde!
Obrigada pelo seu feedback.
Exelente Rapha … isso é compartilhar … Parabéns.