serveur-web.ino

ESP32-S2 · Fichier : serveur-web.ino · Langage : Arduino · Usage : Allumer une LED depuis un navigateur sur le réseau local

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-S2 (simple cœur Xtensa, Wi-Fi, USB-OTG natif sur GPIO19/20, 14 touches capacitives) type DevKitC-1 ou QT Py, 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 « ESP32S2 Dev Module » ; le S2 se flashe directement par son USB natif (double reset sur certaines cartes pour entrer en bootloader).

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(); }

← Retour à la fiche