serveur-web.ino

ESP32-C3 · 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-C3 (RISC-V 160 MHz, Wi-Fi + BLE 5) type DevKitM-1 ou SuperMini, alimentée par USB (native sur C3). 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 « ESP32C3 Dev Module », activez « USB CDC On Boot » si besoin, puis Téléverser. GPIO9 sert souvent de bouton BOOT ; GPIO8 doit rester libre au boot.

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