serveur-web.ino
El clásico conectado: la placa sirve una página HTML en la red local, dos enlaces conmutan el LED y un ADC aparece en directo. Sin infraestructura externa: el servidor corre dentro de la placa.
Hardware necesario
Una placa ESP32 clásica (módulo ESP32-WROOM-32, doble núcleo Xtensa a 240 MHz, Wi-Fi + Bluetooth) tipo DevKitC / DOIT V1, alimentada por micro-USB. Acceso Wi-Fi 2,4 GHz (no WPA3 de empresa); potenciómetro opcional en un ADC.
Cableado
LED en GPIO2 por 330 Ω; cursor del potenciómetro en GPIO34 (solo entrada, 3,3 V máx) entre 3,3 V y GND.
Funcionamiento
WiFi.begin se une al punto de acceso, WebServer registra las rutas /, /on, /off y handleClient() atiende peticiones a medida llegan. La etiqueta refresh mantiene la página fresca cada 5 s. En el Arduino IDE, instale el paquete « esp32 » (Gestor de placas), elija « Dev Module », el puerto y Subir (mantenga BOOT si falla la detección). GPIO34-39 son solo entrada; evite GPIO6-11 y GPIO12.
Para ir más lejos
Añada una contraseña (server.authenticate), o publique los mismos valores a un broker MQTT en vez de mostrarlos.
serveur-web.ino
// Serveur web embarque : page de controle LED GPIO2 + etat analogique.
#include <WiFi.h>
#include <WebServer.h>
const char *SSID = "votre-wifi";
const char *CLE = "votre-cle";
const int LED = 2;
WebServer serveur(80);
void page() {
String h = "<h1>ESP32 locale</h1>"
"<p><a href=on>LED ON</a> | <a href=off>LED OFF</a></p>"
"<p>GPIO34 : " + String(analogRead(34)) + "</p>"
"<meta http-equiv=refresh content=5>";
serveur.send(200, "text/html", h);
}
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(SSID, CLE);
while (WiFi.status() != WL_CONNECTED) { delay(300); Serial.print("."); }
Serial.printf("\nhttp://%s/\n", WiFi.localIP().toString().c_str());
serveur.on("/", page);
serveur.on("/on", []() { digitalWrite(LED, HIGH); page(); });
serveur.on("/off", []() { digitalWrite(LED, LOW); page(); });
serveur.begin();
}
void loop() { serveur.handleClient(); }