Arduino, Internet das Coisas e Computação vestível

[Voltar]

[Avançar]

9.2. Servidor Web para uma estação Metereológica


Servidor Web para uma estação Metereológica

O projeto usa WeMos D1 Wifi ESP8266 ou ESP8266 NodeMCU, Módulo Sensor DHT11 e Display Oled 0,96 128x64 para informar a temperatura e umidade através de IP da Internet (Servidor Web) em uma relação Servidor/Cliente. Quanto utilizar a placa WeMos D1 Wifi ESP8266 configurar a placa no Arduino IDE como WebMos D1 R1. Quanto utilizar a placa ESP8266 NodeMCU configurar  a placa no Arduino IDE como NodeMCU 0.9 (ESP-12 Module).

O que é um Servidor Web?
Um computador responsável por fornecer e receber dados dos diversos clientes, atuando como centralizador de informação na Rede. Para tanto, utiliza um conjunto de protocolos de comunicação entre computadores chamado de TCP/IP (Protocolo de controle de transmissão): TCP (Transmission Control Protocol) e IP (Internet Protocol).

A relação Servidor/Cliente
A relação entre os computadores que hospedam sites (Servidores) e os navegadores que utilizamos em nossos computadores ou celulares (Clientes) é chamada de Servidor/Cliente. Neste tipo de relação, utiliza-se o procotolo o HTTP (Hypertext Transfer Protocol) para estabelecer a comunicação. Ele é responsável pelo tratamento dos pedidos e respostas entre cliente e servidor na World Wide Web. Nesse contexto, chamamos os servidores de Servidores Web.

/* 
Programa: Servidor Web para uma estação Metereológica com sensor DHT11 
Autor: André Luis Marques da Silveira
Data: 22/09/2019
*/

#include "Wire.h"                                   		//  Biblioteca para enviar e receber dados TWI/I2C 
#include "Adafruit_GFX.h"                           	//  Biblioteca para processamento gráfico
#include "Adafruit_SSD1306.h"                          //  Biblioteca do controlador SSD1306
#include "ESP8266WiFi.h"

#include <DHT.h>
#define DHTPIN D5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

Adafruit_SSD1306 display(128, 64);                    // Cria objeto display

const char* ssid      = "NOME DO SERVIDOR";
const char* password  = "SENHA DO SERVIDOR"; 
int porta = 80;

//  --- Caso ocorra problemas com a porta 80, utilize 8082 ou 8089 ---- //
//  --- A chamada, por exemplo fica: http://192.168.0.15:8082  ---- //

WiFiServer server(porta);                                

void setup() {

  //  --- Inicializa Sensor DHT11 ---- //  
  
      dht.begin();                                      			// Inicializa biblioteca WIRE
      Wire.begin();                                     			// Inicializa biblioteca sensor DHT11
      pinMode(DHTPIN, INPUT);                            	// Define pino do Sensor DHT11 

  //  ---- Inicializa tela Oled ---- //  
 
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);    // Inicializa a tela com endereço I2C "0x3C"
      display.setTextColor(WHITE);                      		//  Define cor do texto
      display.setRotation(0);                           		//  Configura orientação
      display.setTextWrap(false);   
      display.setTextSize(1);                           		//  Define tamanho da fonte do texto
      display.dim(0);                                   			//  Define brilho (0 é máximo)
      display.clearDisplay();                           		//  Limpa a tela 
      display.drawRect(0,0,128,15,WHITE);               	//  Posição (x0,y0,x1,y1)
      display.setCursor(4,4);                          		//  Posição do cursor na tela
      display.print("Rede:");                           		//  Escreve texto no display
      display.println(ssid);                            			//  Escreve no da Rede Wifi
      display.display();                                			// Mostra texto no display

 // ---- Inicializa serial ---- //

      Serial.begin(9600); 
      Serial.print("Conectando a rede Wifi ");          
      Serial.println(ssid);                               		// Escreve nome da Rede Wifi na Serial
        
  // --- Conecta Rede Wifi ---- //  

      int a = 0;    
      WiFi.begin(ssid, password);                      		// Passa parâmetros para fazer conexão com a Rede sem fio     
      while (WiFi.status() != WL_CONNECTED) {           	// Testa status da conexão
             a = a + 1;
             if (a < 60) {
                 Serial.print(".");
             } else {
                     Serial.println(".");
                     a = 0;
                    }
             delay(100);        
      }

      Serial.println("Conectado a rede");        
      Serial.println("");                               
      Serial.println("Servidor iniciado");              

  // ---- Inicia Servidor Web para receber dados em "WiFiServer server(porta)" ---- //     
 
      server.begin();                                   

  // ---- Escreve na serial o IP recebido da rede sem fio (AUTOMÁTICO) ---- //
       
      Serial.print("IP para se conectar ao NodeMCU: "); 
      Serial.print("http://");                          
      Serial.println(WiFi.localIP());                   
      
  // ---- Escreve na tela Oled o IP recebido da rede sem fio (AUTOMÁTICO) ---- //
       
      display.setCursor(0,25);
      display.print("IP:");
      display.print(WiFi.localIP());
      display.print(":");
      display.println(porta);   
      display.display(); 
}

void loop() {

      WiFiClient client = server.available();           		// Verifica se algum cliente está conectado ao servidor
      if (!client) { 							// Cliente não conectado, reexecuta processo  
          delay(10);
          return;                                       
      }    
 
      // --- lê sensor DHT11 - temperatura e umidade --- //
    
      float h = dht.readHumidity();           			// Temperatura em Celsius
      float t = dht.readTemperature();        			// Temperatura em Fahrenheit (isFahrenheit = true)
      float f = dht.readTemperature(true);  

      Serial.println("Novo cliente se conectou!");      
      Serial.print(" Temperatura: ");
      Serial.print(t);        
      Serial.print(" Umidade: ");
      Serial.println(h);
        
      display.fillRect(0,40,128,64,BLACK); 			// fillRect(x,y,width,height,color)       
      display.setCursor(11,42);             			// Posição do cursor na tela
      display.print("Temperatura:");         			// Escreve texto no display
      display.setCursor(85,42);            				// Posição do cursor na tela
      display.print(t);                    				// Escreve texto no display
    
      display.setCursor(24,52);             			// Posição do cursor na tela
      display.print("Umidade:");           				// Escreve texto no display
      display.setCursor(76,52);            				// Posição do cursor na tela
      display.print(h);                    				// Escreve texto no display

      display.display();                   				// Mostra texto no display

 // ---- Enquanto cliente estiver conectado aguarda 1 milisegundo ---- // 
 
      while(!client.available()){                       
          delay(1);                                     
      }  
      
      String request = client.readStringUntil('\r');    	//  Faz leitura da primeira linha da requisição Web
      Serial.println(request);                          		// Escreve requisição na Serial
      client.flush();                                   			// Aguarda até todos dados serem enviados ao cliente

 // ---- Monta protocolo de comunicação HTTP e conteúdo HTML para cliente ---- //
       
      client.println("HTTP/1.1 200 OK");                
      client.println("Content-Type: text/html");       
      client.println("");
      client.println("<!DOCTYPE HTML>");                
      client.println("<html>");           
      client.println("<HEAD>"); 
      client.println("<TITLE>Leitura da temperatura</TITLE>"); 
      client.println("<META http-equiv=Content-Type content='text/html; charset=iso-8859-1'>");
      client.println("<META HTTP-EQUIV='refresh' CONTENT='5'>");
      client.println("</HEAD>");      
      client.println("<body>"); 
      client.println("<h1><center>Bom-dia!</center></h1>"); 
      client.println("<h2><center>Data e Hora</center></h2>"); 
      client.println("<p><center id='datetime'></center></p>"); 
      client.println("<script>");
      client.print("var dt = new Date();");
      client.print("document.getElementById('datetime').innerHTML = (('0'+dt.getDate()).slice(-2))+'/'+");
      client.print("(('0'+(dt.getMonth()+1)).slice(-2))+'/'+(dt.getFullYear())+'  -  "); 
      client.print("'+(('0'+dt.getHours()).slice(-2))+':'+(('0'+dt.getMinutes()).slice(-2));"); 
      client.println("</script>");  
      
      client.println("<h2><center>Temperatura</center></h2>");      
      client.println("<p><center>");  
      client.println(t);
      
      client.println("Celsius</center></p>");
      client.println("<p><center>");  
      client.println(f);
      client.println("Fahrenheit </center></p>");

      client.println("<h2><center>Umidade</center></h2>");    
      client.println("<p><center>");          
      client.println(h);
      client.println("</center></p>");    

      client.println("</body>"); 
      client.println("</html>"); 
      
      Serial.println("Cliente desconectado    ");     
      Serial.println("");          
      delay(20);
}


 

[Voltar]

[Avançar]