Monitorando ambiente com NodeMCU

Monitorando-ambiente-com-NodeMCU
Font Size

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

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:

DallasTemperatureDHT

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!

 
 
Iago Pereira
 
Estudante de Engenharia Biomédica, da Universidade Federal de Uberlândia e entusiasta do DIY (Faça você mesmo).     

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.”

 
 
 

Posts relacionados

Aprendendo utilizar o módulo laser com Arduino

por autocore
8 anos ago

Relógio com o Módulo TM1637 e Arduino

por autocore
5 anos ago

Conheça o Shield CLP para Arduino Nano

por Bruno Raniere
4 anos ago
Sair da versão mobile