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

[Voltar]

[Avançar]

9.3. Servidor Web que controle LED RGB


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]