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-S2 (núcleo único Xtensa, Wi-Fi, USB-OTG nativo en GPIO19/20, 14 pads táctiles capacitivos) tipo DevKitC-1 o QT Py, 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 « ESP32S2 Dev Module »; el S2 se programa directamente por su USB nativo (doble reset en algunas placas para entrar al bootloader).
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(); }