ESP8266 - Serveur Web

Ce tutoriel vous explique comment programmer une carte ESP8266 pour en faire un serveur web. Vous pourrez accéder aux pages web hébergées sur l'ESP8266 en utilisant un navigateur web sur votre ordinateur ou smartphone, ce qui vous permettra de visualiser les données du ESP8266 et de le contrôler. Pour faciliter la démarche, nous avancerons de manière progressive, des étapes simples aux étapes plus complexes comme suit :

Navigateur web de relais ESP8266 NodeMCU

Préparation du matériel

1×ESP8266 NodeMCU
1×Micro USB Cable
1×(Optional) ESP8266 Screw Terminal Adapter

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

Lire la valeur du capteur depuis ESP8266 via le Web

C'est relativement simple. Le code ESP8266 effectue les tâches suivantes :

  • Création d'un serveur web qui écoute les requêtes HTTP provenant d'un navigateur web.
  • Lorsqu'une requête est reçue d'un navigateur web, l'ESP8266 répond avec un contenu HTML qui contient la valeur lue depuis le capteur.

Voici le code ESP8266 qui exécute les tâches mentionnées ci-dessus :

/* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp8266/esp8266-web-server */ #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> const char* ssid = "YOUR_WIFI_SSID"; // CHANGE IT const char* password = "YOUR_WIFI_PASSWORD"; // CHANGE IT ESP8266WebServer server(80); // Web server on port 80 void setup() { Serial.begin(9600); // Connect to Wi-Fi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // Print the ESP8266's IP address Serial.print("ESP8266 Web Server's IP address: "); Serial.println(WiFi.localIP()); // Define a route to serve the HTML page server.on("/", HTTP_GET, []() { Serial.println("ESP8266 Web Server: New request received:"); // for debugging Serial.println("GET /"); // for debugging server.send(200, "text/html", "<html><body><h1>Hello, ESP8266!</h1></body></html>"); }); // Start the server server.begin(); } void loop() { // Handle client requests server.handleClient(); // Your code here }

Étapes rapides

Pour commencer avec ESP8266 sur Arduino IDE, suivez ces étapes :

  • Consultez le tutoriel comment configurer l'environnement pour ESP8266 sur Arduino IDE si c'est votre première utilisation de ESP8266.
  • Câblez les composants comme indiqué dans le schéma.
  • Connectez la carte ESP8266 à votre ordinateur à l'aide d'un câble USB.
  • Ouvrez Arduino IDE sur votre ordinateur.
  • Choisissez la bonne carte ESP8266, comme (par exemple NodeMCU 1.0 (Module ESP-12E)), et son port COM respectif.
  • Copiez le code ci-dessus et ouvrez-le avec Arduino IDE
  • Modifiez les informations wifi (SSID et mot de passe) dans le code pour les vôtres
  • Cliquez sur le bouton Upload sur Arduino IDE pour charger le code sur ESP8266
  • Ouvrez le moniteur série
  • Consultez le résultat sur le moniteur série.
COM6
Send
Connecting to WiFi... Connected to WiFi ESP8266 Web Server's IP address: 192.168.0.5
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Prenez note de l'adresse IP affichée, et saisissez cette adresse dans la barre d'adresse d'un navigateur web sur votre smartphone ou PC.
  • En conséquence, vous verrez le résultat suivant sur le moniteur série.
COM6
Send
Connecting to WiFi... Connected to WiFi ESP8266 Web Server's IP address: 192.168.0.5 ESP8266 Web Server: New request received: GET /
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Une fois que vous aurez accédé au navigateur web en utilisant l'adresse IP, vous verrez une page web très basique affichant "Bonjour, ESP8266 !". La page ressemblera à ce qui suit :
serveur web ESP8266 NodeMCU

Lecture de la valeur du capteur depuis ESP8266 via le Web

Voici le code ESP8266 qui affiche la valeur de la température sur une page web :

/* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp8266/esp8266-web-server */ #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> const char* ssid = "YOUR_WIFI_SSID"; // CHANGE IT const char* password = "YOUR_WIFI_PASSWORD"; // CHANGE IT ESP8266WebServer server(80); // Web server on port 80 float getTemperature() { // YOUR SENSOR IMPLEMENTATION HERE // simulate the temperature value float temp_x100 = random(0, 10000); // a ramdom value from 0 to 10000 return temp_x100 / 100; // return the simulated temperature value from 0 to 100 in float } void setup() { Serial.begin(9600); // Connect to Wi-Fi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // Print the ESP8266's IP address Serial.print("ESP8266 Web Server's IP address: "); Serial.println(WiFi.localIP()); // Define a route to serve the HTML page server.on("/", HTTP_GET, []() { Serial.println("ESP8266 Web Server: New request received:"); // for debugging Serial.println("GET /"); // for debugging // get temperature from sensor float temperature = getTemperature(); // Format the temperature with two decimal places String temperatureStr = String(temperature, 2); String html = "<!DOCTYPE HTML>"; html += "<html>"; html += "<head>"; html += "<link rel=\"icon\" href=\"data:,\">"; html += "</head>"; html += "<p>"; html += "Temperature: <span style=\"color: red;\">"; html += temperature; html += "&deg;C</span>"; html += "</p>"; html += "</html>"; server.send(200, "text/html", html); }); // Start the server server.begin(); } void loop() { // Handle client requests server.handleClient(); // Your code here }

Étapes rapides

  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino
  • Changez les informations wifi (SSID et mot de passe) dans le code pour les vôtres
  • Téléversez le code sur ESP8266
  • Une fois que vous accédez au navigateur web en utilisant l'adresse IP, vous verrez une page web très basique affichant des informations sur la carte ESP8266. La page ressemblera à ce qui suit :
Serveur web de température ESP8266 NodeMCU

Pour rendre la page web fantastique avec une interface graphique utilisateur (UI), consultez la section finale de ce tutoriel.

※ NOTE THAT:

Avec le code fourni ci-dessus, pour obtenir la mise à jour de la température, vous devez recharger la page dans le navigateur web. Dans une partie suivante, nous apprendrons à faire en sorte que la page web mette à jour la valeur de la température en arrière-plan sans recharger la page.

Contrôler l'ESP8266 via le Web

Contrôler quelque chose connecté à un ESP8266 est un peu plus compliqué que de lire simplement une valeur. Cela est dû au fait que l'ESP8266 doit comprendre la demande qu'il reçoit du navigateur web pour savoir quelle action entreprendre.

Pour un exemple plus complet et détaillé, je recommande de consulter les tutoriels listés ci-dessous :

Séparer le contenu HTML dans un autre fichier sur l'IDE Arduino

Si vous souhaitez créer une page web simple avec un contenu minimal, vous pouvez intégrer directement le HTML dans le code ESP8266, comme expliqué précédemment.

Cependant, si vous souhaitez créer une page web plus sophistiquée et impressionnante avec un contenu plus volumineux, il devient peu pratique d'inclure tout le HTML, CSS et Javascript directement dans le code ESP8266. Dans cette situation, vous pouvez utiliser une approche différente pour gérer le code :

  • Le code ESP8266 sera placé dans un fichier .ino, comme auparavant.
  • Le code HTML (HTML, CSS, Javascript) sera placé dans un fichier .h séparé. Cela vous permet de garder le contenu de la page web séparé du code ESP8266, facilitant ainsi sa gestion et sa modification.

Pour ce faire, nous devons franchir deux étapes majeures :

  • Préparation de contenu HTML
  • Programmation d'ESP8266

Préparation du contenu HTML

  • Créez un fichier HTML sur votre PC local qui contient le contenu HTML (HTML, CSS et Javascript) pour votre conception d'interface utilisateur.
  • Dans le fichier HTML, là où les données de l'ESP8266 doivent être affichées, utilisez une valeur arbitraire.
  • Testez et modifiez-le jusqu'à ce que vous soyez satisfait.
  • Nous mettrons le contenu HTML dans le fichier .h sur l'IDE Arduino. Voir l'étape suivante.

Programmation ESP8266

  • Ouvrez l'IDE Arduino et créez un nouveau sketch. Donnez-lui un nom, par exemple, newbiely.fr.ino.
  • Copiez le code fourni ci-dessous et collez-le dans le fichier créé.
/* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp8266/esp8266-web-server */ #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include "index.h" // Include the index.h file const char* ssid = "YOUR_WIFI_SSID"; // CHANGE IT const char* password = "YOUR_WIFI_PASSWORD"; // CHANGE IT ESP8266WebServer server(80); // Web server on port 80 float getTemperature() { // YOUR SENSOR IMPLEMENTATION HERE // simulate the temperature value float temp_x100 = random(0, 10000); // a ramdom value from 0 to 10000 return temp_x100 / 100; // return the simulated temperature value from 0 to 100 in float } void setup() { Serial.begin(9600); // Connect to Wi-Fi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // Print the ESP8266's IP address Serial.print("ESP8266 Web Server's IP address: "); Serial.println(WiFi.localIP()); // Serve the HTML page from the file server.on("/", HTTP_GET, []() { Serial.println("ESP8266 Web Server: New request received:"); // for debugging Serial.println("GET /"); // for debugging server.send(200, "text/html", webpage); }); // Define a route to get the temperature data server.on("/temperature", HTTP_GET, []() { Serial.println("ESP8266 Web Server: New request received:"); // for debugging Serial.println("GET /temperature"); // for debugging float temperature = getTemperature(); // Format the temperature with two decimal places String temperatureStr = String(temperature, 2); server.send(200, "text/plain", temperatureStr); }); // Start the server server.begin(); } void loop() { // Handle client requests server.handleClient(); // Your code here }
  • Changez les informations WiFi (SSID et mot de passe) dans le code pour les vôtres
  • Créez le fichier index.h sur Arduino IDE en :
L'IDE Arduino 2 ajoute un fichier
  • Cliquez soit sur le bouton juste en dessous de l'icône du moniteur série et choisissez Nouvel Onglet, soit utilisez les touches Ctrl+Maj+N.
  • Nommez le fichier index.h et cliquez sur le bouton OK.
L'IDE Arduino 2 ajoute le fichier index.h
  • Copiez le code ci-dessous et collez-le dans le index.h.
/* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp8266/esp8266-web-server */ #ifndef WEBPAGE_H #define WEBPAGE_H const char* webpage = R"=====( REPLACE_YOUR_HTML_CONTENT_HERE )====="; #endif
  • Remplacez la ligne REPLACE_YOUR_HTML_CONTENT_HERE par votre contenu HTML que vous avez préparé auparavant. Il n'y a aucun problème avec le caractère de nouvelle ligne. Voici un exemple de fichier index.h :
/* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp8266/esp8266-web-server */ #ifndef WEBPAGE_H #define WEBPAGE_H const char* webpage = R"=====( <!DOCTYPE html> <html> <head> <title>ESP8266 Temperature</title> </head> <body> <h1>ESP8266 Temperature</h1> <p>Temperature: <span style="color: red;"><span id="temperature">Loading...</span> &#8451;</span></p> <script> function fetchTemperature() { fetch("/temperature") .then(response => response.text()) .then(data => { document.getElementById("temperature").textContent = data; }); } fetchTemperature(); setInterval(fetchTemperature, 4000); // Update temperature every 4 seconds </script> </body> </html> )====="; #endif
  • Vous avez maintenant le code dans deux fichiers : newbiely.fr.ino et index.h
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour téléverser le code sur l'ESP8266
  • Accédez à la page web de la carte ESP8266 via un navigateur web comme auparavant. Vous la verrez comme ci-dessous :
Navigateur Web de température ESP8266 NodeMCU

※ NOTE THAT:

Dans les codes ci-dessus :

  • Le code HTML est conçu pour mettre à jour la température en arrière-plan à intervalles réguliers, actuellement réglé sur toutes les 4 secondes dans le code. Cela signifie que la valeur de la température est automatiquement rafraîchie sans avoir besoin de recharger manuellement la page web. Vous pouvez ajuster l'intervalle de mise à jour dans le code selon vos préférences.
  • Le code ESP8266 traite deux requêtes du navigateur web.
    • Une requête pour retourner le contenu HTML de la page web
    • L'autre pour retourner la valeur de la température demandée par la page web en arrière-plan.

Pour une illustration plus complète et détaillée, veuillez consulter le tutoriel ESP8266 - Capteur de température DS18B20 via le Web.

※ NOTE THAT:

  • Si vous apportez des modifications au contenu HTML dans le fichier index.h mais que vous ne modifiez rien dans le fichier newbiely.fr.ino, l'IDE Arduino ne rafraîchira ni ne mettra à jour le contenu HTML lorsque vous compilerez et téléverserez le code sur l'ESP8266.
  • Pour forcer l'IDE Arduino à mettre à jour le contenu HTML dans cette situation, vous devez effectuer une modification dans le fichier newbiely.fr.ino. Par exemple, vous pouvez ajouter une ligne vide ou insérer un commentaire. Cette action déclenche la reconnaissance par l'IDE qu'il y a eu des changements dans le projet, garantissant que votre contenu HTML mis à jour soit inclus dans le téléversement.

Serveur Web ESP8266 - Pages Multiples

Découvrez ce tutoriel ESP8266 - Serveur Web Multiples Pages.

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!