J009 Servidor Web Local con ESP32

Descripción 
El objetivo es transformar tu placa ESP32 en un Servidor Web local. Al conectar la placa a la red Wi-Fi de tu casa, esta obtendrá una dirección IP.

Cuando entres a esa dirección IP desde el navegador de tu móvil o PC (por ejemplo, introduciendo http://192.168.1.50/P13), el ESP32 procesará la solicitud, buscará la palabra "P13" y cambiará el estado del LED (encendiéndolo si está apagado, o apagándolo si está encendido). Adicionalmente, el programa imprimirá en el Monitor Serie todo lo que ocurra en tiempo real.

Materiales
Placa ESP32 NodeMCU Formato Arduino Uno.
1 Resistencia 330
1 LED 5mm
1 Smartphone
Protoboar, cables para conexiones y un cable USB para conectar ESP32 al PC y que sirve además de alimentación

Esquema

El LED marcado con la letra L (o el LED azul de desarrollo) está conectado internamente al Pin Digital 2 del ESP32.

El LED externo se conecta el Pin digital 13  con una resistencia 330 ohmios y el otro extremo de la resistencia al pin GND de la placa.

Montaje


Código 
Este código reemplaza la lógica de los comandos AT por la librería nativa WiFi.h. Levanta el servidor en el puerto 80 y analiza de forma automática las peticiones buscando el comando "P13".

#include <WiFi.h>

// =======================================================
// CONFIGURACIÓN DE TU RED WI-FI (REEMPLAZA ESTOS DATOS)
// =======================================================
const char* ssid     = "El Nombre de tu Wifi";
const char* password = "la contraseña de tu Wifi";

// Definimos los pines de los LEDs
const int ledIntegrado = 2;   // LED integrado en la placa ESP32
const int ledExterno = 13;    // Pin 13 por si conectas un LED en protoboard

// Creamos el servidor Web en el puerto 80 (estándar HTTP)
WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);

  // Configurar los pines de los LEDs como salidas
  pinMode(ledIntegrado, OUTPUT);
  pinMode(ledExterno, OUTPUT);
  digitalWrite(ledIntegrado, LOW);
  digitalWrite(ledExterno, LOW);

  Serial.println();
  Serial.println("=== SERVIDOR WEB ESP32 ===");
  Serial.print("Conectando a la red: ");
  Serial.println(ssid);

  // Iniciar la conexión Wi-Fi
  WiFi.begin(ssid, password);

  // Esperar a que se conecte
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("[ÉXITO] Wi-Fi Conectado.");
 
  // Iniciar el servidor web
  server.begin();
  Serial.println("[ÉXITO] Servidor Web iniciado.");

  // Mostrar la dirección IP asignada
  Serial.print("Introduce esta URL en tu navegador: http://");
  Serial.println(WiFi.localIP());
}

void loop() {
  // Comprobar si hay un cliente (navegador web o Putty) conectado
  WiFiClient client = server.available();
 
  if (client) {                            
    Serial.println("\n-----------------------------------------");
    Serial.println("Nuevo cliente web conectado.");          
    String currentLine = "";                // Cadena para almacenar los datos entrantes del cliente
   
    while (client.connected()) {            // Loop mientras el cliente esté conectado
      if (client.available()) {             // Si hay bytes por leer del cliente
        char c = client.read();             // Leer un byte
        Serial.write(c);                    // Imprimirlo en el Monitor Serie (vuelca la petición HTTP)
       
        if (c == '\n') {                    // Si el byte es un carácter de nueva línea
         
          // Si la línea actual está vacía, significa que recibiste dos caracteres de nueva línea
// seguidos.
          // Ese es el fin de la petición HTTP del cliente, por lo que enviamos una respuesta:
          if (currentLine.length() == 0) {
            // Cabeceras HTTP estándar de respuesta
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();

            // Página web de control simple que se le muestra al usuario
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta charset=\"utf-8\"><title>Control ESP32</title></head>");
            client.println("<body style=\"text-align: center; font-family: Arial;\">");
            client.println("<h1>Control de LEDs vía Web (ESP32)</h1>");
            client.println("<p><a href=\"/P13\"><button style=\"padding:15px 30px; font-size:20px;
\">Invertir LED Pin 13 / Pin 2</button></a></p>");
            client.println("</body></html>");
           
            // La respuesta HTTP termina con otra línea en blanco:
            client.println();
            break;
          } else {    // Si recibiste una nueva línea, limpia la variable de línea actual
            currentLine = "";
          }
        } else if (c != '\r') {  // Si recibiste cualquier otra cosa menos un retorno de carro,
          currentLine += c;      // añádelo al final de la línea actual
        }

        // --- COMPROBACIÓN DE COMANDOS (Equivalente a tu texto) ---
        // Si la petición contiene "GET /P13", invertimos el estado de los LEDs
        if (currentLine.endsWith("GET /P13")) {
          Serial.println("\n\n>>> [ACCION] Detectado comando P13. Invirtiendo LEDs... <<<");
          digitalWrite(ledIntegrado, !digitalRead(ledIntegrado));
          digitalWrite(ledExterno, !digitalRead(ledExterno));
        }
      }
    }
    // Cerrar la conexión con el cliente
    client.stop();
    Serial.println("Cliente desconectado.");
  }
}

Configura tu entorno: Asegúrate de tener seleccionada la tarjeta ESP32 Dev Module en el menú Herramientas > Placa de tu Arduino IDE.

Edita tus credenciales: Modifica las líneas de ssid y password con los datos exactos de tu Wi-Fi.

Sube el código: Conecta la placa por USB al ordenador y presiona el botón de subir en el IDE de Arduino.

Abre el Monitor Serie: Configúralo estrictamente a 115200 baudios.

Apunta la dirección IP: Cuando la placa se conecte, verás en la pantalla algo como:



Pruébalo en el navegador:
Abre el navegador de tu móvil o PC.
Escribe la dirección IP exacta que te dio el monitor (ej. 192.168.1.53).

Verás una interfaz con un botón interactivo. Cada vez que hagas clic en él (o si escribes directamente http://192.168.1.45/P13 en la barra de direcciones), verás cómo el LED de tu placa cambia de estado instantáneamente y los datos se vuelcan de forma limpia en tu pantalla.


No hay comentarios:

Publicar un comentario