🛠 Serveur web embarqué pour piloter une LED
Objectifs
Héberger un serveur HTTP directement sur l'ESP32-S2 avec la bibliothèque WebServer : servir une page de contrôle, piloter une LED par requêtes GET et afficher l'état. Le S2 ne possède pas de Bluetooth : le WiFi 2,4 GHz est le seul canal réseau, ce qui rend ce serveur d'autant plus central.
Matériel
- Carte ESP32-S2
- 1 LED + résistance de 330 Ω sur GPIO2
- Réseau WiFi 2,4 GHz (pas de 5 GHz)
- Ordinateur/smartphone sur le même réseau
Code complet
// Serveur web de pilotage LED sur ESP32-S2
#include <WiFi.h>
#include <WebServer.h>
const char *SSID = "VOTRE_WIFI";
const char *PASS = "VOTRE_MOT_DE_PASSE";
const uint8_t LED_PIN = 2;
bool etatLed = false;
WebServer serveur(80);
const char *PAGE =
"<!doctype html><html lang='fr'><head><meta charset='utf-8'>"
"<meta name='viewport' content='width=device-width,initial-scale=1'>"
"<title>ESP32-S2</title></head><body style='font-family:sans-serif;"
"text-align:center;padding-top:40px'>"
"<h1>LED ESP32-S2</h1><p>État : %s</p>"
"<a href='/on'><button style='font-size:1.4em;padding:10px 24px'>ALLUMER</button></a> "
"<a href='/off'><button style='font-size:1.4em;padding:10px 24px'>ETEINDRE</button></a>"
"</body></html>";
void pageAccueil {
String html; html.reserve(600);
html.printf(PAGE, etatLed ? "ALLUMEE" : "ETEINTE");
serveur.send(200, "text/html", html);
}
void setup {
pinMode(LED_PIN, OUTPUT);
Serial.begin(115200);
WiFi.begin(SSID, PASS);
Serial.print("Connexion WiFi");
while (WiFi.status != WL_CONNECTED) { delay(300); Serial.print("."); }
Serial.printf("\nAdresse : http://%s\n", WiFi.localIP.toString.c_str);
serveur.on("/", pageAccueil);
serveur.on("/on", [] { etatLed = true; digitalWrite(LED_PIN, HIGH); serveur.send(303, "text/plain", "ok"); pageAccueil; });
serveur.on("/off", [] { etatLed = false; digitalWrite(LED_PIN, LOW); serveur.send(303, "text/plain", "ok"); pageAccueil; });
serveur.begin;
}
void loop { serveur.handleClient; }
Vérification attendue
La console affiche l'IP attribuée par la box (ex. http://192.168.1.42). Depuis un navigateur du même réseau, la page s'affiche avec l'état courant ; le bouton ALLUMER allume la LED physique et met la page à jour, ETEINDRE l'éteint. Le pilotage fonctionne depuis plusieurs appareils simultanément.
Erreurs fréquentes
- Réseau 5 GHz : la radio du S2 est 2,4 GHz uniquement, la connexion échoue en boucle sur un SSID 5 GHz.
- Oublier
serveur.handleClientdansloop: la page ne répond jamais ou gèle le navigateur. - Utiliser une broche ADC2 pour un capteur dans le même projet : l'ADC2 est bloqué dès que le WiFi est actif ; restez sur ADC1 (GPIO1-14).
- Bloquer dans
loop(delays longs) : le serveur ne répond plus ; gardez la boucle légère ou utilisezdelay(1)pour céder la main.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht22.inoArduinooled-i2c.inoArduinoserveur-web.inoArduino