serveur-web.ino

ESP8266 (module ESP-12E) · Fichier : serveur-web.ino · Langage : Arduino · Usage : Serveur web embarqué pour piloter une sortie

Le sketch qui transforme le NodeMCU en objet connecté : page HTML servie en local, liens qui pilotent la LED, redémarrage à distance. Aucune infrastructure — tout tient dans les 4 Mo de flash.

Matériel requis

Un module ESP-12E (ESP8266EX, Wi-Fi 2,4 GHz) monté sur une carte NodeMCU / Wemos D1 mini, alimentée par micro-USB. Un point d'accès Wi-Fi 2,4 GHz (le 8266 ne voit pas le 5 GHz).

Branchement

Aucun câblage obligatoire ; LED sur D4. Alimentation par micro-USB suffisante (le Wi-Fi appelle ~200 mA en pointe).

Fonctionnement

ESP8266WebServer enregistre des routes lambda ; handleClient() sert les requêtes au rythme de loop(). ESP.restart() redémarre proprement, utile quand le module part en watchdog. Dans l'Arduino IDE, installez le paquet « esp8266 », choisissez « NodeMCU 1.0 (ESP-12E Module) » puis Téléverser (GPIO0 à LOW si le flash échoue). L'ADC A0 lit 0-1 V (diviseur NodeMCU : 0-3,3 V).

Pour aller plus loin

Ajoutez le DHT11 du sketch précédent à la page, ou passez en mode point d'accès pour un usage sans routeur.

serveur-web.ino

// Serveur web ESP8266 : page de controle LED D4 + bouton reboot.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

const char *SSID = "votre-wifi";
const char *CLE = "votre-cle";
const int LED = 2;

ESP8266WebServer serveur(80);

void page() {
  String h = "<h1>ESP8266</h1>"
    "<p>LED : " + String(digitalRead(LED) == LOW ? "ALLUMEE" : "eteinte") + "</p>"
    "<p><a href=/on>ALLUMER</a> | <a href=/off>ETEINDRE</a> | "
    "<a href=/reboot>reboot</a></p>";
  serveur.send(200, "text/html", h);
}

void setup() {
  pinMode(LED, OUTPUT); digitalWrite(LED, HIGH);  // LED eteinte (actif-bas)
  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, LOW);  page(); });
  serveur.on("/off", []() { digitalWrite(LED, HIGH); page(); });
  serveur.on("/reboot", []() { serveur.send(200, "text/plain", "bye");
                               ESP.restart(); });
  serveur.begin();
}

void loop() { serveur.handleClient(); }

← Retour à la fiche