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-S3 (doble núcleo Xtensa con instrucciones vectoriales, Wi-Fi + BLE 5, USB nativo) tipo DevKitC-1, XIAO o T-Display-S3, alimentada por 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 (paquete esp32), elija « ESP32S3 Dev Module », active « USB CDC On Boot » y suba. Muchas placas ponen un WS2812 en GPIO48.
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(); }