serveur-web.ino
Le grand classique connecté : la carte sert une page HTML sur le réseau local, deux liens allument la LED, et un ADC apparaît en direct. Aucune infrastructure externe — le serveur tourne dans la carte.
Matériel requis
Une carte ESP32-S3 (double cœur Xtensa avec instructions vectorielles, Wi-Fi + BLE 5, USB natif) type DevKitC-1, XIAO ou T-Display-S3, alimentée par USB. Accès Wi-Fi 2,4 GHz (pas de WPA3 d'entreprise) ; potentiomètre optionnel sur un ADC.
Branchement
LED sur GPIO2 via 330 Ω ; potentiomètre curseur sur GPIO34 (entrée seule, 3,3 V max) entre 3,3 V et GND.
Fonctionnement
WiFi.begin rejoint le point d'accès, WebServer enregistre les routes /, /on, /off et handleClient() traite les requêtes au fil de l'eau. La balise refresh garde la page fraîche toutes les 5 s. Dans l'Arduino IDE (paquet esp32), choisissez « ESP32S3 Dev Module », activez « USB CDC On Boot », puis Téléverser. Beaucoup de cartes placent un WS2812 sur GPIO48.
Pour aller plus loin
Ajouter un mot de passe (server.authenticate), ou publier les mêmes valeurs vers un broker MQTT au lieu de les afficher.
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(); }