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

[Voltar]

[Avançar]

Wifi ESP8266 NodeMCU

Descrição

É uma placa de desenvolvimento que combina o chip ESP8266, uma interface usb-serial e um regulador de tensão 3.3V. A programação pode ser feita usando a linguagem LUA ou a IDE do Arduino, utilizando a comunicação via cabo micro-usb. 

Especificações

  • Módulo: NodeMcu Lua ESP-12.
  • Wifi: Wireless padrão 802.11 b/g/n com antena embutida.
  • Conector: micro-usb.
  • Modos de operação: STA/AP/STA+AP.
  • Conexões TCP/IP: suporta 5 conexões.
  • Portas GPIO: 11 (Com funções de PWM, I2C, SPI, etc.)
  • Tensão de operação: 4,5 ~ 9V.
  • Taxa de transferência: 110-460800bps.
  • Firmware: suporta upgrade remota.
  • Distância entre pinos: 2,54mm.
  • Dimensões: 49 x 25,5 x 7 mm.

Pinagem

Biblioteca

O Módulo Wifi ESP8266 NodeMCU pode ser programado usando Lua ou na linguagem padrão do Arduino com a mesma IDE. Para tanto, a partir de 2016 a Arduino IDE foi adaptada para o ESP8266. Hoje existem inúmeras bibliotecas que já foram adaptadas e muitas aplicações já estão disponíveis. O link GitHub ESP8266 Arduino é o Repositório para ESP8266/Arduino, onde estão as Bibliotecas, códigos de exemplos e todos outros arquivos necessários para usar a Arduino IDE com o ESP8266.

Configuração da IDE do Arduino para o NodeMCU

Na Arduino IDE altere as preferências do sistema adicionando a URL "http://arduino.esp8266.com/stable/package_esp8266com_index.json" aos Gerenciadores de Placas da IDE. Após, é necessário instalar a placa através do Gerenciador de Placas (Menu » Ferramenta » Placa ... » Gerenciador de Placas). Procure na lista o título "esp8266 by ESP8266 Community" e instale.


Projeto(s) relacionado(s)


Projeto localizando Redes WiFi

O projeto usa WeMos D1 Wifi ESP8266 ou ESP8266 NodeMCU para detectar Redes Wifi. Quanto utilizar a placa WeMos D1 Wifi ESP8266 configurar no  Arduino IDE a placa como WebMos D1 R1. Quanto utilizar a placa ESP8266 NodeMCU configurar no Arduino IDE a placa como NodeMCU 0.9 (ESP-12 Modulo).

// Projeto: Localiza redes WiFi 
// Autor: André Silveira
// Data: 22/08/2019

#include "ESP8266WiFi.h"

void setup() {
      Serial.begin(115200);  
      WiFi.mode(WIFI_STA);      		// Defina o WiFi para o modo estação
      WiFi.disconnect();        		// Desconecta se o sistema estiver conectado
      delay(100);
      Serial.println("Configuração pronta");
}

void loop() {
  Serial.println("Inicia escaneamento");

  int n = WiFi.scanNetworks();     	//  Retorna número de redes localizadas
  Serial.println("Escaneamento terminou");
  
  if (n == 0) {
      	Serial.println("Nenhuma Rede foi localizada");
  } else {
            Serial.print(n);
            Serial.println("Redes localizadas");
            
            for (int i = 0; i < n; ++i) {        
                 Serial.print(i + 1);
                 Serial.print(": ");
                 Serial.print(WiFi.SSID(i));    // Imprime Nome da Rede Wifi
                 Serial.print(" (");
                 Serial.print(WiFi.RSSI(i));    // Imprime Intensidade do sinal
                 Serial.print(")");
                 Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*");
                 delay(10);
            }
          }
   Serial.println("");
   delay(5000);
}



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);
}



Servidor Web que controla cor de LED RGB

O projeto usa WeMos D1 Wifi ESP8266 ou ESP8266 NodeMCU para controlar a cor de um LED RGB 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).

/* 
Programa: Servidor Web Servidor Web que controla cor de LED RGB 
Autor: André Luis Marques da Silveira
Data: 22/09/2019
*/

#include <ESP8266WiFi.h>             
 
const char* ssid = "NOME DO SERVIDOR";
const char* password = "SENHA DO SERVIDOR";

int PinoLedRed   = D3;            				// Pino do Led vermelho
int PinoLedGreen = D2;            				// Pino do Led verde
int PinoLedBlue  = D1;            				// Pino do Led azul

int StatusRed = 0;
int StatusGreen = 0;
int StatusBlue = 0;

WiFiServer server(80);    

void setup() {
  
    Serial.begin(9600);      
    Serial.print("Conectando a ");  
    Serial.println(ssid);             

    pinMode(PinoLedRed, OUTPUT);
    pinMode(PinoLedGreen, OUTPUT);
    pinMode(PinoLedBlue, OUTPUT);

    analogWrite(PinoLedRed, 0);
    analogWrite(PinoLedGreen, 0);
    analogWrite(PinoLedBlue, 0);            

    int a = 0;    
    WiFi.begin(ssid, password);                           // Informa nome servidor e senha para acessar Rede
    while (WiFi.status() != WL_CONNECTED) {     // Testa status da conexão
           a = a + 1;
           if (a < 60) {
               Serial.print(".");
           } else {
                   Serial.println(".");
                   a = 0;
                  }
           delay(10);        
    }

    Serial.println("");
    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());
}

void loop() {

    // ---- Verifica se algum cliente está conectado ao servidor ---- //
  
    WiFiClient client = server.available();              
    if (!client) {              					
        delay(1);
        return;                                       
    }
    
    // ---- Enquanto cliente estiver conectado aguarda 1 milisegundo ---- // 
 
    while(!client.available()){                       
        delay(1);                                     
    }  

    // ---- Le primeira linha do pedido ---- // 
 
    String request = client.readStringUntil('\r'); 
    Serial.println(request); 
    client.flush();
       
    // ---- Processa pedido do LED VERMELHO ---- //

    if (request.indexOf("/LedRed=ON") != -1)  {
        Serial.println("LedRed=on"); 
        StatusRed = 255;
    }     
    if (request.indexOf("/LedRed=OFF") != -1)  {
        Serial.println("LedRed=off"); 
        StatusRed = 0;
     }     
    
    // ---- Processa pedido do LED VERDE ---- //
     
    if (request.indexOf("/LedGreen=ON") != -1)  {
        Serial.println("LedGreen=on"); 
        StatusGreen = 255;    
    }     
    if (request.indexOf("/LedGreen=OFF") != -1)  {
        Serial.println("PinoLedGreen=off"); 
        StatusGreen = 0;    
     }   

    // ---- Processa pedido do LED AZUL ---- //
    
    if (request.indexOf("/LedBlue=ON") != -1)  {
        Serial.println("LedBlue=on"); 
        StatusBlue = 255;    
    }     
    if (request.indexOf("/LedBlue=OFF") != -1)  {
        Serial.println("LedBlue=off"); 
        StatusBlue = 0;    
     }  
   
    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>Controla LED RGB pela WEB</TITLE>"); 
    client.println("<META http-equiv=Content-Type content='text/html; charset=iso-8859-1'>");
    client.println("</HEAD>");      
    client.println("<body>");

    client.println("<center>");
    client.println("<h1>Olá cliente!</h1>");           
    client.println("<p>Seja bem vindo!</p>");  

    client.print("<p><br>Estado dos LEDs: ");  
    if (StatusRed == 255) { 
        client.print("vermelho On / ");
        analogWrite(PinoLedRed, 255);
    } else {
            client.print("vermelho Off / ");
            analogWrite(PinoLedRed, 0);
            }  
                      
    if (StatusGreen == 255) { 
        client.print("verde On / ");
        analogWrite(PinoLedGreen, 255);
    } else {
            client.print("verde Off / ");
            analogWrite(PinoLedGreen, 0);
            }  

    if (StatusBlue == 255) { 
        client.print("azul On<br></p>");
        analogWrite(PinoLedBlue, 255);
    } else {
            client.print("azul Off</p>");
            analogWrite(PinoLedBlue, 0);
            }  
    
    client.println("<p><br>Pino D3 - Vermelho ");
    client.println("<a href=\"/LedRed=ON\"\"><button>On</button></a>");         
    client.println("<a href=\"/LedRed=OFF\"\"><button>Off</button></a></p>");                      

    client.println("<p>Pino D2 - Verde ");
    client.println("<a href=\"/LedGreen=ON\"\"><button>On</button></a>");         
    client.println("<a href=\"/LedGreen=OFF\"\"><button>Off</button></a></p>"); 

    client.println("<p>Pino D1 - Azul ");
    client.println("<a href=\"/LedBlue=ON\"\"><button>On</button></a>");         
    client.println("<a href=\"/LedBlue=OFF\"\"><button>Off</button></a></p>"); 
            
    client.println("</center>");
    client.println("</html>"); 
    
    Serial.println("Cliente desconectado");                             
    Serial.println("");                                                 
}


 

[Voltar]

[Avançar]