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