fbpx

Monitor de Temperatura e Umidade com NODEMCU ESP8266 como Servidor Web


Olá pessoal,

Os módulos e placas de desenvolvimento baseados no microcontrolador ESP8266, como a NODEMCU , têm ganhado destaque para soluções de IoT devido à sua relação custo-benefício. Este microcontrolador possui como principal característica o uso da tecnologia de comunicação Wi-Fi, podendo ser programado para ser usado como um servidor Web independente.
Neste tutorial você vai aprender a criar um servidor web com a NODEMCU ESP 8266 para monitorar a temperatura e a umidade lida pelo sensor DHT11.

Vamos começar?


MATERIAIS NECESSÁRIOS

1 x NODEMCU ESP8266;
1 x Cabo micro USB;
1 x Sensor DHT11;
1 x Resistor de 10 kΩ;
1 x Protoboard;
Fios jumper.


ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES


Antes de iniciar a montagem elétrica do circuito, certifique-se que a NODEMCU ESP8266 esteja desligada, esta medida evitará possíveis danos a sua placa. Em seguida, monte o circuito da Figura 1.

Circuito para monitorar a temperatura e umidade com sensor DHT11.
Figura 1: Circuito elétrico para projeto Monitor de Temperatura e Umidade com NODEMCU ESP8266 como Servidor Web.


Ao montar seu circuito observe os seguintes pontos:
• O sensor DHT11 possui 4 terminais. O primeiro (VCC) é o terminal de alimentação, que conforme datasheet do fabricante pode ser entre 3 V e 5,5 V. O segundo (DATA) é o pino de comunicação de dados, será através dele que o valor da temperatura e umidade serão comunicados. O terceiro (NC) é um pino vazio. Por fim, o último (GND) é o terminal de terra do sensor;
• O pino 1 do sensor DHT11 será ligado a alimentação de 3,3 V da placa NODEMCU ESP8266;
• O pino 2 deve ser conectado à porta digital D2 (GPIO4);
• No pino 2 vamos conectar um resistor de 10 kΩ pull-up (resistor conectado ao VCC);
• O pino 4 deve ser conectado ao GND (terra).


ELABORANDO O CÓDIGO

Após a verificação do circuito montado, vamos a programação do nosso Sketch. Inicialmente, vamos proceder a instalação das bibliotecas necessárias para utilização do sensor DHT11. Estas bibliotecas encontram-se disponíveis para download nos seguintes links:

DHT11 Sensor Library

Adafruit Unified Sensor Lib


Após realizar o download da biblioteca, vamos instalá-la por meio do seguinte caminho: Toolbar > Sketch > Incluir biblioteca > Adicionar biblioteca ZIP, conforme ilustra a Figura 2.

Incluir biblioteca no Arduino IDE
Figura 2: Caminho para incluir biblioteca no Arduino IDE.


Com a biblioteca instalada, vamos a programação do nosso Sketch. Este projeto propõe a criação de um servidor Web que atualiza a temperatura e umidade automaticamente, fazendo uso do sensor DHT11 e da NODEMCU ESP8266.

Para melhor compreensão o código será explicado passo-a-passo a seguir. Neste momento, observe o código abaixo e aproveite para analisar sua estrutura.

#include<ESP8266WiFi.h> //Biblioteca para funcionamento do WiFi do ESP
#include<ESP8266WebServer.h> //Biblioteca para o ESP funcionar como servidor
#include <DHT.h> //Biblioteca para funcionamento do sensor de temperatura e umidade DHT11

const char* ssid = "XXXXXX";  // Rede WiFi
const char* password = "1235678";  //Senha da Rede WiFi

ESP8266WebServer server(80); //server na porta 80

#define DHTPIN 4 //Pino digital D2 (GPIO5) conectado ao DHT11
#define DHTTYPE DHT11 //Tipo do sensor DHT11

DHT dht(DHTPIN, DHTTYPE); //Inicializando o objeto dht do tipo DHT passando como parâmetro o pino (DHTPIN) e o tipo do sensor (DHTTYPE)

float temperatura; //variável para armazenar a temperatura
float umidade; //Variável para armazenar a umidade

void setup() {
  Serial.begin(115200); //Inicializa a comunicação serial
  delay(50); // ?Intervalo para aguardar a estabilização do sistema
  dht.begin(); //Inicializa o sensor DHT11

  Serial.println("Conectando a Rede: "); //Imprime na serial a mensagem
  Serial.println(ssid); //Imprime na serial o nome da Rede Wi-Fi

  WiFi.begin(ssid, password); //Inicialização da comunicação Wi-Fi

  //Verificação da conexão
  while (WiFi.status() != WL_CONNECTED) { //Enquanto estiver aguardando status da conexão
    delay(1000);
    Serial.print("."); //Imprime pontos
  }
  Serial.println("");
  Serial.println("WiFi Conectado");
  Serial.print("IP: ");
  Serial.println(WiFi.localIP()); //Função para exibir o IP da ESP

  server.on("/", handle_OnConnect); //Servidor recebe uma solicitação HTTP - chama a função handle_OnConnect
  server.onNotFound(handle_NotFound); //Servidor recebe uma solicitação HTTP não especificada - chama a função handle_NotFound

  server.begin(); //Inicializa o servidor
  Serial.println("Servidor HTTP inicializado");

}

void loop() {
  server.handleClient(); //Chama o método handleClient()
}

void handle_OnConnect() {
  temperatura = dht.readTemperature();  //Realiza a leitura da temperatura
  umidade = dht.readHumidity(); //Realiza a leitura da umidade
  Serial.print("Temperatura: ");
  Serial.print(temperatura); //Imprime no monitor serial o valor da temperatura lida
  Serial.println(" ºC");
  Serial.print("Umidade: ");
  Serial.print(umidade); //Imprime no monitor serial o valor da umidade lida
  Serial.println(" %");
  server.send(200, "text/html", EnvioHTML(temperatura, umidade)); //Envia as informações usando o código 200, especifica o conteúdo como "text/html" e chama a função EnvioHTML

}

void handle_NotFound() { //Função para lidar com o erro 404
  server.send(404, "text/plain", "Não encontrado"); //Envia o código 404, especifica o conteúdo como "text/pain" e envia a mensagem "Não encontrado"

}

String EnvioHTML(float Temperaturastat, float Umidadestat) { //Exibindo a página da web em HTML
  String ptr = "<!DOCTYPE html> <html>\n"; //Indica o envio do código HTML
  ptr += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n"; //Torna a página da Web responsiva em qualquer navegador Web
  ptr += "<meta http-equiv='refresh' content='2'>";//Atualizar browser a cada 2 segundos
  ptr += "<link href=\"https://fonts.googleapis.com/css?family=Open+Sans:300,400,600\" rel=\"stylesheet\">\n";
  ptr += "<title>Monitor de Temperatura e Umidade</title>\n"; //Define o título da página

  //Configurações de fonte do título e do corpo do texto da página web
  ptr += "<style>html { font-family: 'Open Sans', sans-serif; display: block; margin: 0px auto; text-align: center;color: #000000;}\n";
  ptr += "body{margin-top: 50px;}\n";
  ptr += "h1 {margin: 50px auto 30px;}\n";
  ptr += "h2 {margin: 40px auto 20px;}\n";
  ptr += "p {font-size: 24px;color: #000000;margin-bottom: 10px;}\n";
  ptr += "</style>\n";
  ptr += "</head>\n";
  ptr += "<body>\n";
  ptr += "<div id=\"webpage\">\n";
  ptr += "<h1>Monitor de Temperatura e Umidade</h1>\n";
  ptr += "<h2>NODEMCU ESP8266 Web Server</h2>\n";

  //Exibe as informações de temperatura e umidade na página web
  ptr += "<p><b>Temperatura: </b>";
  ptr += (float)Temperaturastat;
  ptr += " Graus Celsius</p>";
  ptr += "<p><b>Umidade: </b>";
  ptr += (float)Umidadestat;
  ptr += " %</p>";

  ptr += "</div>\n";
  ptr += "</body>\n";
  ptr += "</html>\n";
  return ptr;

}


Para melhor compreensão do código acompanhe os seguintes passos:

1 – Incluir as bibliotecas
Iniciamos o código do Monitor de Temperatura e Umidade com NODEMCU ESP8266 como Servidor Web incluindo as bibliotecas necessárias para o uso da conexão Wi-Fi pela NODEMCU ESP8266 e para funcionamento do sensor DHT11. Também faz-se necessária a inclusão da biblioteca ESP8266WebServer.h, que possui alguns métodos que nos ajudarão a configurar um servidor e a lidar com solicitações HTTP de entrada.

2 – Incluir as configurações de rede
Como vamos utilizar a NODEMCU ESP8266 no modo Station (STA), que permite que a placa se conecte a uma rede Wi-Fi existente, precisamos fornecer o nome (ssid) e a senha (password) da rede. Desta forma, substitua as informações entre aspas pelas informações da sua rede local.

3 – Definir objetos e declarar variáveis
Em seguida, declaramos um objeto da biblioteca ESPWebServer, para que possamos acessar suas funções. Neste objeto, precisamos passar como parâmetro a porta onde o servidor será executado. Desse modo, passamos como parâmetro a porta 80, que é a porta padrão usada para HTTP.
Logo após, definimos o GPIO ao qual o pino de dados do DHT11 está conectado. Neste caso, ele está conectado ao GPIO 4 (D2).
Posteriormente, selecionamos o tipo de sensor DHT (11 ou 22) que estamos usando. Neste exemplo, estamos usando o sensor DHT11. Feito isso, instanciamos um objeto DHT passando como parâmetros o tipo e o pino definidos anteriormente.
Além disso, declaramos duas variáveis do tipo float para armazenar os valores lidos pelo sensor DHT11, sendo elas: temperatura e umidade.

4 – Configuração do servidor
Na função setup, vamos realizar as configurações do servidor antes de realmente executá-lo. Mas antes disso, inicializamos a comunicação serial e o sensor DHT11.
Em seguida, tentamos conectar a NODEMCU ESP8266 a rede Wi-Fi, por meio da função WiFi.begin() que recebe como parâmetros o nome da rede (ssid) e a senha (password).
Enquanto, a NODEMCU ESP8266 tenta se conectar à rede, vamos verificar o status da conectividade por meio da função WiFi.status(). No momento em que a placa NODEMCU consegue se conectar à rede, será impresso no monitor serial o endereço de IP atribuído à placa.

5 – Solicitações HTTP
Dependendo das solicitações HTTP de entrada precisamos especificar qual código executar quando um URL for atingido. Quando um servidor recebe uma solicitação HTTP no caminho raiz (/), chamamos a função handle_OnConnect, através da instrução server.on(“/”, handle_OnConnect);.
No entanto, quando o servidor recebe qualquer URL diferente do caminho raiz, ele deve responder com um status HTTP 404 (não encontrado) e uma mensagem para o usuário. Para isso, usamos a função server.onNotFound(handle_NotFound);.

6 – Inicializar o servidor
O próximo passo é a inicialização do servidor, que é realizado através da instrução server.begin();

7 – Retorno das solicitações HTTP
Para lidar com as solicitações HTTP precisamos chamar o método handleClient no objeto do servidor na função principal. O método handleClient() faz parte da biblioteca ESP8266WebServer e lida com algumas operações de fundo para ter um cliente conectado ao servidor.

8 – Criar função handle_OnConect()
Em seguida, precisamos criar uma função anexada ao URL raiz (/) com server.on. Nesta função, obteremos os valores lidos pelo sensor DHT11 de temperatura e umidade e armazenaremos nas variáveis umidade e temperatura. Estes valores serão impressos no monitor serial.
Para responder à solicitação HTTP, usamos o método send . Embora o método possa ser chamado com um conjunto diferente de argumentos, sua forma mais simples consiste no código de resposta HTTP, o tipo de conteúdo e o conteúdo.
Em nosso exemplo, estamos enviando o código 200, código de status HTTP que corresponde a resposta OK. Em seguida, especificamos o tipo de conteúdo como “text / html“ e, finalmente, chamamos a função EnvioHTML(), responsável por criar uma página HTML dinâmica contendo valores de temperatura e umidade.

9 – Criar função handle_NotFound()
Da mesma forma, precisamos criar uma função para lidar com a página 404 Error. Sempre que esta função for chamada a página Web exibirá a mensagem “Não encontrado”.

10 – Criara página Web em HTML
A função EnvioHTML() é responsável por gerar uma página da web sempre que o servidor Web NODEMCU ESP8266 obtiver uma solicitação de um cliente. Esta função concatena o código HTML em uma grande string e retorna à server.send(). Além disso, EnvioHTML()  usa valores de temperatura e umidade como parâmetro para gerar dinamicamente o conteúdo HTML.


SERVIDOR EM EXECUÇÃO

Com a programação do Sketch finalizada, faça o upload do código para a sua placa NODEMCU ESP8266. Em seguida, abra o monitor serial do Arduino IDE e defina a taxa de bauds para 115200. A Figura 3 ilustra as mensagem que serão exibidas no monitor serial.

Monitor serial - ESP servidor Web
Figura 3: Monitor serial resposta do projeto Monitor de Temperatura e Umidade com NODEMCU ESP8266 como Servidor Web.


Em seguida, abra o seu navegador de internet e digite na barra de endereços o endereço de IP da NODEMCU ESP8266. Em nosso exemplo, o IP foi 192.168.88.71. A Figura 4 ilustra página Web criada no projeto Monitor de Temperatura e Umidade com NODEMCU ESP8266 como Servidor Web.

Monitor de Temperatura e Umidade com NODEMCU ESP8266 como Servidor Web.
Figura 4: Monitor de Temperatura e Umidade com NODEMCU ESP8266 como Servidor Web.

Espero que tenham gostado deste tutorial. Em caso de dúvidas deixe seu comentário abaixo.

Att.,

Carol Correia Viana



Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.