serveur-web.ino

ESP32-C6 · 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-C6 (RISC-V 160 MHz, Wi-Fi 6 + BLE 5 + 802.15.4) type DevKitC-1, 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 récent), choisissez « ESP32C6 Dev Module » puis Téléverser ; pour Zigbee/Thread utilisez ESP-IDF (idf.py set-target esp32c6).

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