Ce tutoriel vous explique comment programmer l'ESP8266 pour en faire un serveur web, vous permettant d'accéder aux données de température via une interface web. En utilisant un capteur de température DS18B20 connecté, vous pouvez facilement vérifier la température actuelle en utilisant votre smartphone ou PC pour visiter la page web servie par l'ESP8266. Voici un bref aperçu de son fonctionnement :
ESP8266 est programmé en tant que serveur web.
Vous entrez l'adresse IP de l'ESP8266 dans un navigateur web sur votre smartphone ou PC.
L'ESP8266 répond à la demande du navigateur web avec une page web qui affiche la température lue par le capteur DS18B20.
Nous passerons en revue deux exemples de code :
Code ESP8266 qui fournit une page web très simple affichant la température du capteur DS18B20. Cela facilite la compréhension de son fonctionnement. Le contenu HTML est intégré dans le code ESP8266.
Code ESP8266 qui fournit une page web graphique affichant la température du capteur DS18B20, le contenu HTML est séparé du code ESP8266.
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.
Note d'achat: De nombreux capteurs DS18B20 sur le marché sont de faible qualité. Nous recommandons vivement d'acheter le capteur de la marque DIYables en utilisant le lien ci-dessus. Nous l'avons testé et il a bien fonctionné.
À propos du serveur Web ESP8266 et du capteur de température DS18B20
Si vous ne connaissez pas le serveur Web ESP8266 et le capteur de température DS18B20 (brochage, fonctionnement, programmation...), renseignez-vous dans les tutoriels suivants :
/* * 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-temperature-via-web*/#include <ESP8266WiFi.h>#include <ESP8266WebServer.h>#include <OneWire.h>#include <DallasTemperature.h>#define SENSOR_PIN D7 // The ESP8266 pin connected to DS18B20 sensor's DATA pinconst char* ssid = "YOUR_WIFI_SSID"; // CHANGE ITconst char* password = "YOUR_WIFI_PASSWORD"; // CHANGE ITOneWire oneWire(SENSOR_PIN); // setup a oneWire instanceDallasTemperature DS18B20(&oneWire); // pass oneWire to DallasTemperature libraryESP8266WebServer server(80); // Web server on port 80floatgetTemperature() { DS18B20.requestTemperatures(); // send the command to get temperaturesfloat temperature_C = DS18B20.getTempCByIndex(0); // read temperature in °Creturn temperature_C;}voidsetup() {Serial.begin(9600); DS18B20.begin(); // initialize the DS18B20 sensor// Connect to Wi-FiWiFi.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 debuggingSerial.println("GET /"); // for debugging// get temperature from sensorfloat temperature = getTemperature();// Format the temperature with two decimal placesString 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 += "°C</span>"; html += "</p>"; html += "</html>"; server.send(200, "text/html", html); });// Start the server server.begin();}voidloop() {// Handle client requests server.handleClient();// Your code here}
Étapes rapides
Pour commencer avec l'ESP8266 sur l'Arduino IDE, suivez ces étapes :
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.
Sélectionnez la bonne carte ESP8266, telle que (par exemple, NodeMCU 1.0 (Module ESP-12E)), et son port COM respectif.
Cliquez sur l'icône Libraries dans la barre gauche de l'Arduino IDE.
Tapez "Dallas" dans la boîte de recherche, puis recherchez la bibliothèque DallasTemperature de Miles Burton.
Cliquez sur le bouton Install pour installer la bibliothèque DallasTemperature.
Vous serez invité à installer la dépendance. Cliquez sur le bouton Install All pour installer la bibliothèque OneWire.
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.
Vérifiez le résultat sur le Moniteur Série.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
Connecting to WiFi...
Connected to WiFi
ESP8266 Web Server's IP address: 192.168.0.5
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2
Vous trouverez une adresse IP. Saisissez cette adresse IP dans la barre d'adresse d'un navigateur web sur votre smartphone ou PC.
Vous verrez l'affichage suivant sur le moniteur série.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
Connecting to WiFi...
Connected to WiFi
ESP8266 Web Server's IP address: 192.168.0.5
ESP8266 Web Server: New request received:
GET /
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2
Vous verrez une page web très simple de la carte ESP8266 sur le navigateur web comme ci-dessous :
※ Note:
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 prochaine partie, 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.
Code ESP8266 - Page Web Graphique
Étant donné qu'une page web graphique contient une grande quantité de contenu HTML, l'intégration dans le code ESP8266 comme auparavant devient peu pratique. Pour résoudre cela, nous devons séparer le code ESP8266 et le code HTML dans différents fichiers :
Le code ESP8266 sera placé dans un fichier .ino.
Le code HTML (y compris HTML, CSS et Javascript) sera placé dans un fichier .h.
Pour savoir comment séparer le code HTML du code ESP8266, veuillez consulter le tutoriel ESP8266 - Serveur Web..
Étapes rapides
Ouvrez l'IDE Arduino et créez un nouveau sketch, donnez-lui un nom, par exemple, newbiely.fr.ino
Copiez le code ci-dessous et ouvrez-le avec l'IDE Arduino
/* * 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-temperature-via-web*/#include <ESP8266WiFi.h>#include <ESP8266WebServer.h>#include"index.h"// Include the index.h file#include <OneWire.h>#include <DallasTemperature.h>#define SENSOR_PIN D7 // The ESP8266 pin connected to DS18B20 sensor's DATA pinconst char* ssid = "YOUR_WIFI_SSID"; // CHANGE ITconst char* password = "YOUR_WIFI_PASSWORD"; // CHANGE ITOneWire oneWire(SENSOR_PIN); // setup a oneWire instanceDallasTemperature DS18B20(&oneWire); // pass oneWire to DallasTemperature libraryESP8266WebServer server(80); // Web server on port 80floatgetTemperature() { DS18B20.requestTemperatures(); // send the command to get temperaturesfloat temperature_C = DS18B20.getTempCByIndex(0); // read temperature in °Creturn temperature_C;}voidsetup() {Serial.begin(9600); DS18B20.begin(); // initialize the DS18B20 sensor// Connect to Wi-FiWiFi.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 debuggingSerial.println("GET /"); // for debugging server.send(200, "text/html", webpage); // webpage is from index.h file });// Define a route to get the temperature data server.on("/temperature", HTTP_GET, []() {Serial.println("ESP8266 Web Server: New request received:"); // for debuggingSerial.println("GET /temperature"); // for debuggingfloat temperature = getTemperature();// Format the temperature with two decimal placesString temperatureStr = String(temperature, 2); server.send(200, "text/plain", temperatureStr); });// Start the server server.begin();}voidloop() {// Handle client requests server.handleClient();// Your code here}
Modifiez 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 :
Cliquant soit sur le bouton juste en dessous de l'icône du moniteur série et choisissez Nouvel Onglet, ou utilisez les touches Ctrl+Shift+N.
Nommez le fichier index.h et cliquez sur le bouton OK.
Copiez le code ci-dessous et collez-le dans 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-temperature-via-web*/#ifndef WEBPAGE_H#define WEBPAGE_Hconst char* webpage = R"=====(<!DOCTYPE html><html><head><title>ESP8266 - Web Temperature</title><meta name="viewport" content="width=device-width, initial-scale=0.7, maximum-scale=0.7"><meta charset="utf-8"><link rel="icon" href="https://diyables.io/images/page/diyables.svg"><style>body { font-family: "Georgia"; text-align: center; font-size: width/2pt;}h1 { font-weight: bold; font-size: width/2pt;}h2 { font-weight: bold; font-size: width/2pt;}button { font-weight: bold; font-size: width/2pt;}</style><script>var cvs_width = 200, cvs_height = 450;function init() { var canvas = document.getElementById("cvs"); canvas.width = cvs_width; canvas.height = cvs_height + 50; var ctx = canvas.getContext("2d"); ctx.translate(cvs_width/2, cvs_height - 80); fetchTemperature(); setInterval(fetchTemperature, 4000); // Update temperature every 4 seconds}function fetchTemperature() { fetch("/temperature") .then(response => response.text()) .then(data => {update_view(data);});}function update_view(temp) { var canvas = document.getElementById("cvs"); var ctx = canvas.getContext("2d"); var radius = 70; var offset = 5; var width = 45; var height = 330; ctx.clearRect(-cvs_width/2, -cvs_height + 80, cvs_width, cvs_height + 50); ctx.strokeStyle="blue"; ctx.fillStyle="blue";//5-step Degree var x = -width/2; ctx.lineWidth=2;for (var i = 0; i <= 100; i+=5) { var y = -(height - radius)*i/100 - radius - 5; ctx.beginPath(); ctx.lineTo(x, y); ctx.lineTo(x - 20, y); ctx.stroke(); }//20-step Degree ctx.lineWidth=5;for (var i = 0; i <= 100; i+=20) { var y = -(height - radius)*i/100 - radius - 5; ctx.beginPath(); ctx.lineTo(x, y); ctx.lineTo(x - 25, y); ctx.stroke(); ctx.font="20px Georgia"; ctx.textBaseline="middle"; ctx.textAlign="right"; ctx.fillText(i.toString(), x - 35, y); }// shape ctx.lineWidth=16; ctx.beginPath(); ctx.arc(0, 0, radius, 0, 2 * Math.PI); ctx.stroke(); ctx.beginPath(); ctx.rect(-width/2, -height, width, height); ctx.stroke(); ctx.beginPath(); ctx.arc(0, -height, width/2, 0, 2 * Math.PI); ctx.stroke(); ctx.fillStyle="#e6e6ff"; ctx.beginPath(); ctx.arc(0, 0, radius, 0, 2 * Math.PI); ctx.fill(); ctx.beginPath(); ctx.rect(-width/2, -height, width, height); ctx.fill(); ctx.beginPath(); ctx.arc(0, -height, width/2, 0, 2 * Math.PI); ctx.fill(); ctx.fillStyle="#ff1a1a"; ctx.beginPath(); ctx.arc(0, 0, radius - offset, 0, 2 * Math.PI); ctx.fill(); temp = Math.round(temp * 100) / 100; var y = (height - radius)*temp/100.0 + radius + 5; ctx.beginPath(); ctx.rect(-width/2 + offset, -y, width - 2*offset, y); ctx.fill(); ctx.fillStyle="red"; ctx.font="bold 34px Georgia"; ctx.textBaseline="middle"; ctx.textAlign="center"; ctx.fillText(temp.toString() + "°C", 0, 100);}window.onload = init;</script></head><body><h1>ESP8266 - Web Temperature</h1><canvas id="cvs"></canvas></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 sur votre PC ou smartphone comme auparavant. Vous la verrez comme ci-dessous :
※ Note:
Si vous modifiez le contenu HTML dans le index.h et que vous ne touchez à rien dans le fichier newbiely.fr.ino, lorsque vous compilez et téléchargez le code sur ESP8266, l'Arduino IDE ne mettra pas à jour le contenu HTML.
Pour que l'Arduino IDE mette à jour le contenu HTML dans ce cas, apportez une modification dans le fichier newbiely.fr.ino (par exemple, ajouter une ligne vide, ajouter un commentaire....)
N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !