ESP32 Control LED con servidor web

En este proyecto utilizarmos el ESP32 junto por medio de una pagina web encenderemos y apagaremos un LED.

Hardware

Utilizaremos  nuestro ESP32 
Una Resistencia de 330ohms
Un LED 

Conexión




















sketch

//Power by: One line
#include <WiFi.h>

//------------------Servidor Web en puerto 80---------------------

WiFiServer server(80);

//---------------------Credenciales de WiFi-----------------------

const char* ssid     = "nombre de red";
const char* password = "contraseña";

//---------------------VARIABLES GLOBALES-------------------------
int contconexion = 0;

String header; // Variable para guardar el HTTP request

String estadoSalida = "off";

const int salida = 2;

//------------------------CODIGO HTML------------------------------
String pagina = "<!DOCTYPE html>"
"<html>"
"<head>"
"<meta charset='utf-8' />"
"<title>Servidor Web ESP32</title>"
"</head>"
"<body>"
"<center>"
"<h1>Servidor Web ESP32</h1>"
"<p><a href='/on'><button style='height:50px;width:100px'>ON</button></a></p>"
"<p><a href='/off'><button style='height:50px;width:100px'>OFF</button></a></p>"
"</center>"
"</body>"
"</html>";

//---------------------------SETUP--------------------------------
void setup() {
  Serial.begin(115200);
  Serial.println("");
  
  pinMode(salida, OUTPUT); 
  digitalWrite(salida, LOW);

  // Conexión WIFI
  WiFi.begin(ssid, password);
  //Cuenta hasta 50 si no se puede conectar lo cancela
  while (WiFi.status() != WL_CONNECTED and contconexion <50) { 
    ++contconexion;
    delay(500);
    Serial.print(".");
  }
  if (contconexion <50) {
      //para usar con ip fija
      IPAddress ip(192,168,1,180); 
      IPAddress gateway(192,168,1,1); 
      IPAddress subnet(255,255,255,0); 
      WiFi.config(ip, gateway, subnet); 
      
      Serial.println("");
      Serial.println("WiFi conectado");
      Serial.println(WiFi.localIP());
      server.begin(); // iniciamos el servidor
  }
  else { 
      Serial.println("");
      Serial.println("Error de conexion");
  }
}

//----------------------------LOOP----------------------------------

void loop(){
  WiFiClient client = server.available();   // Escucha a los clientes entrantes

  if (client) {                             // Si se conecta un nuevo cliente
    Serial.println("New Client.");          // 
    String currentLine = "";                //
    while (client.connected()) {            // loop mientras el cliente está conectado
      if (client.available()) {             // si hay bytes para leer desde el cliente
        char c = client.read();             // lee un byte
        Serial.write(c);                    // imprime ese byte en el monitor serial
        header += c;
        if (c == '\n') {                    // si el byte es un caracter de salto de linea
          // si la nueva linea está en blanco significa que es el fin del 
          // HTTP request del cliente, entonces respondemos:
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
            // enciende y apaga el GPIO
            if (header.indexOf("GET /on") >= 0) {
              Serial.println("GPIO on");
              estadoSalida = "on";
              digitalWrite(salida, HIGH);
            } else if (header.indexOf("GET /off") >= 0) {
              Serial.println("GPIO off");
              estadoSalida = "off";
              digitalWrite(salida, LOW);
            }
            
            // Muestra la página web
            client.println(pagina);
            
            // la respuesta HTTP temina con una linea en blanco
            client.println();
            break;
          } else { // si tenemos una nueva linea limpiamos currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // si C es distinto al caracter de retorno de carro
          currentLine += c;      // lo agrega al final de currentLine
        }
      }
    }
    // Limpiamos la variable header
    header = "";
    // Cerramos la conexión
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

*notas: Cambiar el nombre y contraseña de la red
             No se utilizara tarjeta SD.


Resultado

ESP32 control de 5 LEDS con servidor web

Tomando de referencia el código anterior conectaremos 5 leds de igual manera tomaremos de referencia el esquema anterior y conectaremos los leds, al pin 13, pin 12, pin 14, pin 27 y pin 26.


Hardware

Utilizaremos  nuestro ESP32 
5- Resistencias de 330ohms (naranja, naranja, café)
5- LEDs

Conexión




sketch


//Power by: One line
#include <WiFi.h>

//------------------Servidor Web en puerto 80---------------------

WiFiServer server(80);

//---------------------Credenciales de WiFi-----------------------

const char* ssid     = "TURBONETT_9843AB";
const char* password = "antony.95.";

//---------------------VARIABLES GLOBALES-------------------------
int contconexion = 0;

String header; // Variable para guardar el HTTP request

String estadoSalida = "off";

const int salida = 2;
 int led1= 13;
 int led2= 12;
 int led3= 14;
 int led4= 27;
 int led5= 26;

//------------------------CODIGO HTML------------------------------
String pagina = "<!DOCTYPE html>"
"<html>"
"<head>"
"<meta charset='utf-8' />"
"<title>Servidor Web ESP32</title>"
"<style type=text/css>.auto-style2 {text-align: center;}"
"</style>"
"</head>"
"<body>"
"<center>"
"<h1 class='auto-style2'>ESP32 Control LED</h1>"
"<a href='/on1'><button style='height:50px;width:100px'>"
"<div class='auto-style2'>LED1<br>ON</div></button></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href='/on2'><button style='height:50px;width:100px'>LED2<br>ON</button></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href='/on3'><button style='height:50px;width:100px'>LED3<br>ON</button></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href='/on4'><button style='height:50px;width:100px'>LED4<br>ON</button></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href='/on5'><button style='height:50px;width:100px'>LED5<br>ON</button></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href='/on6'><button style='height:50px;width:100px'>ALL LEDS<br>ON</button></a>"
"<p class='auto-style2'><a href='/off1'><button style='height:50px;width:100px'>LED1<br>OFF</button></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href='/off2'><button style='height:50px;width:100px'>LED2<br>OFF</button></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href='/off3'><button style='height:50px;width:100px'>LED3<br>OFF</button></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href='/off4'><button style='height:50px;width:100px'>LED4<br>OFF</button></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href='/off5'><button style='height:50px;width:100px'>LED5<br>OFF</button></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href='/off6'><button style='height:50px;width:100px'>ALL LEDS<br>OFF</button></a></p>"
"<p>Power by: One line</p>"
"</center>"
"</body>"
"</html>";

//---------------------------SETUP--------------------------------
void setup() {
  Serial.begin(115200);
  Serial.println("");
  
  pinMode(salida, OUTPUT); 
  digitalWrite(salida, LOW);

  pinMode(led1, OUTPUT); 
  digitalWrite(led1, LOW);
  pinMode(led2, OUTPUT); 
  digitalWrite(led2, LOW);
  pinMode(led3, OUTPUT); 
  digitalWrite(led3, LOW);
  pinMode(led4, OUTPUT); 
  digitalWrite(led4, LOW);
  pinMode(led5, OUTPUT); 
  digitalWrite(led5, LOW);


  // Conexión WIFI
  WiFi.begin(ssid, password);
  //Cuenta hasta 50 si no se puede conectar lo cancela
  while (WiFi.status() != WL_CONNECTED and contconexion <50) { 
    ++contconexion;
    delay(500);
    Serial.print(".");
  }
  if (contconexion <50) {
      //para usar con ip fija
      IPAddress ip(192,168,1,180); 
      IPAddress gateway(192,168,1,1); 
      IPAddress subnet(255,255,255,0); 
      WiFi.config(ip, gateway, subnet); 
      
      Serial.println("");
      Serial.println("WiFi conectado");
      Serial.println(WiFi.localIP());
      server.begin(); // iniciamos el servidor
  }
  else { 
      Serial.println("");
      Serial.println("Error de conexion");
  }
}

//----------------------------LOOP----------------------------------

void loop(){
  WiFiClient client = server.available();   // Escucha a los clientes entrantes

  if (client) {                             // Si se conecta un nuevo cliente
    Serial.println("New Client.");          // 
    String currentLine = "";                //
    while (client.connected()) {            // loop mientras el cliente está conectado
      if (client.available()) {             // si hay bytes para leer desde el cliente
        char c = client.read();             // lee un byte
        Serial.write(c);                    // imprime ese byte en el monitor serial
        header += c;
        if (c == '\n') {                    // si el byte es un caracter de salto de linea
          // si la nueva linea está en blanco significa que es el fin del 
          // HTTP request del cliente, entonces respondemos:
          if (currentLine.length() == 0) {
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();

            // enciende y apaga led1
            if (header.indexOf("GET /on1") >= 0) {
              Serial.println("GPIO on");
                digitalWrite(led1, HIGH);

            } else if (header.indexOf("GET /off1") >= 0) {
              Serial.println("GPIO off1");
                digitalWrite(led1, LOW);
            }
            
            // enciende y apaga led2
            if (header.indexOf("GET /on2") >= 0) {
              Serial.println("GPIO on2");
                digitalWrite(led2, HIGH);

            } else if (header.indexOf("GET /off2") >= 0) {
              Serial.println("GPIO off2");
                digitalWrite(led2, LOW);
            }
            
            // enciende y apaga led3
            if (header.indexOf("GET /on3") >= 0) {
              Serial.println("GPIO on3");
                digitalWrite(led3, HIGH);

            } else if (header.indexOf("GET /off3") >= 0) {
              Serial.println("GPIO off3");
                digitalWrite(led3, LOW);
            }
            // enciende y apaga led4
            if (header.indexOf("GET /on4") >= 0) {
              Serial.println("GPIO on4");
                digitalWrite(led4, HIGH);

            } else if (header.indexOf("GET /off4") >= 0) {
              Serial.println("GPIO off4");
                digitalWrite(led4, LOW);
            }

            // enciende y apaga led5
            if (header.indexOf("GET /on5") >= 0) {
              Serial.println("GPIO on5");
                digitalWrite(led5, HIGH);

            } else if (header.indexOf("GET /off5") >= 0) {
              Serial.println("GPIO off5");
                digitalWrite(led5, LOW);
            }
            
          // enciende y apaga los todos leds
            if (header.indexOf("GET /on6") >= 0) {
              Serial.println("GPIO on");
              estadoSalida = "on";
              digitalWrite(salida, HIGH);
                digitalWrite(led1, HIGH);
                digitalWrite(led2, HIGH);
                digitalWrite(led3, HIGH);
                digitalWrite(led4, HIGH);
                digitalWrite(led5, HIGH);

            } else if (header.indexOf("GET /off6") >= 0) {
              Serial.println("GPIO off");
              estadoSalida = "off";
              digitalWrite(salida, LOW);
                digitalWrite(led1, LOW);
                digitalWrite(led2, LOW);
                digitalWrite(led3, LOW);
                digitalWrite(led4, LOW);
                digitalWrite(led5, LOW);
            }
            
            // Muestra la página web
            client.println(pagina);
            
            // la respuesta HTTP temina con una linea en blanco
            client.println();
            break;
          } else { // si tenemos una nueva linea limpiamos currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // si C es distinto al caracter de retorno de carro
          currentLine += c;      // lo agrega al final de currentLine
        }
      }
    }
    // Limpiamos la variable header
    header = "";
    // Cerramos la conexión
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

Resultado






Comentarios