ESP8266 - Contrôle de relais via le Web

Ce tutoriel vous explique comment contrôler un relais via une interface web en utilisant un navigateur sur un PC ou un smartphone, en utilisant l'ESP8266. En détail, l'ESP8266 sera programmé pour fonctionner comme un serveur web. Supposons que l'adresse IP de l'ESP8266 soit 192.168.0.3. Voici les détails de son fonctionnement :

Navigateur Web de relais ESP8266 NodeMCU

Nous apprendrons à travers deux exemples de codes :

Le tutoriel offre les bases que vous pouvez facilement et de manière innovante personnaliser pour atteindre les objectifs suivants :

Préparation du matériel

1×ESP8266 NodeMCU
1×Micro USB Cable
1×Relay
1×Jumper Wires
1×Breadboard
1×(Optional) Solenoid Lock
1×(Optional) 12V Power Adapter
1×(Optional) DC Power Jack
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.

À propos des relais et de l'ESP8266

Si vous ne connaissez pas le relais et l'ESP8266 (brochage, fonctionnement, programmation...), renseignez-vous à leur sujet dans les tutoriels suivants :

Diagramme de câblage

Schéma de câblage du relais ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Voir plus dans l'agencement des broches de l'ESP8266 et comment alimenter l'ESP8266 et d'autres composants.

Le code ESP8266 - Le contenu HTML est intégré dans le code ESP8266

/* * 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-controls-relay-via-web */ #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #define RELAY_PIN D8 // The ESP8266 pin connected to Relay const char *ssid = "YOUR_WIFI_SSID"; // CHANGE IT const char *password = "YOUR_WIFI_PASSWORD"; // CHANGE IT ESP8266WebServer server(80); // Web server on port 80 int relay_state = LOW; String getHTML() { String html = "<!DOCTYPE HTML>"; html += "<html>"; html += "<head>"; html += "<link rel='icon' href='data:,'>"; html += "</head>"; html += "<p>Relay state: <span style='color: red;'>"; if (relay_state == LOW) html += "OFF"; else html += "ON"; html += "</span></p>"; html += "<a href='/relay1/on'>Turn ON</a>"; html += "<br><br>"; html += "<a href='/relay1/off'>Turn OFF</a>"; html += "</html>"; return html; } void setup() { Serial.begin(9600); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, relay_state); // 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()); // home page server.on("/", HTTP_GET, []() { Serial.println("ESP8266 Web Server: New request received:"); Serial.println("GET /"); server.send(200, "text/html", getHTML()); }); // Route to control the Relay server.on("/relay1/on", HTTP_GET, []() { Serial.println("ESP8266 Web Server: New request received:"); Serial.println("GET /relay1/on"); relay_state = HIGH; digitalWrite(RELAY_PIN, relay_state); server.send(200, "text/html", getHTML()); }); server.on("/relay1/off", HTTP_GET, []() { Serial.println("ESP8266 Web Server: New request received:"); Serial.println("GET /relay1/off"); relay_state = LOW; digitalWrite(RELAY_PIN, relay_state); server.send(200, "text/html", getHTML()); }); // Start the server server.begin(); } void loop() { // Handle client requests server.handleClient(); // Your code here }

Étapes rapides

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

  • Consultez le tutoriel comment configurer l'environnement pour ESP8266 sur Arduino IDE si c'est la première fois que vous utilisez ESP8266.
  • Câblez les composants comme indiqué dans le schéma.
  • Connectez la carte ESP8266 à votre ordinateur via un câble USB.
  • Ouvrez Arduino IDE sur votre ordinateur.
  • Choisissez la bonne carte ESP8266, telle que (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 dans Arduino IDE pour charger le code sur ESP8266
  • Ouvrez le moniteur série
  • Vérifiez 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.3
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Vous verrez une adresse IP, par exemple : 192.168.0.3. C'est l'adresse IP du serveur Web ESP8266.
  • Ouvrez un navigateur web et saisissez l'un des trois formats suivants dans la barre d'adresse :
192.168.0.3
192.168.0.3/relay1/on
192.168.0.3/relay1/off
  • Veuillez noter que l'adresse IP peut varier. Veuillez vérifier la valeur actuelle sur le moniteur série.
  • Vous verrez également la sortie ci-dessous sur le moniteur série.
COM6
Send
Connecting to WiFi... Connected to WiFi ESP8266 Web Server's IP address: 192.168.0.3 ESP8266 Web Server: New request recieved: GET / ESP8266 Web Server: New request recieved: GET /relay1/on ESP8266 Web Server: New request recieved: GET /relay1/off
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Vérifiez l'état du relais
  • Vous verrez la page web de la carte ESP8266 dans le navigateur web comme ci-dessous
Navigateur web relais ESP8266 NodeMCU
  • Vous pouvez désormais contrôler le relais marche/arrêt via l'interface web.

Code ESP8266 - Le contenu HTML est séparé du code ESP8266

Étant donné qu'une page web graphique contient une grande quantité de contenu HTML, l'intégration de celui-ci dans le code ESP8266 comme auparavant devient peu pratique. Pour remédier à cela, nous devons séparer le code ESP8266 et le code HTML dans des fichiers différents :

  • Le code ESP8266 sera placé dans un fichier .ino.
  • Le code HTML (incluant HTML, CSS et Javascript) sera placé dans un fichier .h.

É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-controls-relay-via-web */ #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include "index.h" // Include the index.h file #define RELAY_PIN D8 // The ESP8266 pin connected to relay const char *ssid = "YOUR_WIFI_SSID"; // CHANGE IT const char *password = "YOUR_WIFI_PASSWORD"; // CHANGE IT ESP8266WebServer server(80); // Web server on port 80 int relay_state = LOW; String getHTML() { String html = webpage; // Use the HTML content from the index.h file html.replace("%RELAY_STATE%", relay_state ? "ON" : "OFF"); // update the relay state return html; } void setup() { Serial.begin(9600); pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, relay_state); // 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()); // home page server.on("/", HTTP_GET, []() { Serial.println("ESP8266 Web Server: New request received:"); Serial.println("GET /"); server.send(200, "text/html", getHTML()); }); // Route to control the relay server.on("/relay1/on", HTTP_GET, []() { Serial.println("ESP8266 Web Server: New request received:"); Serial.println("GET /relay1/on"); relay_state = HIGH; digitalWrite(RELAY_PIN, relay_state); server.send(200, "text/html", getHTML()); }); server.on("/relay1/off", HTTP_GET, []() { Serial.println("ESP8266 Web Server: New request received:"); Serial.println("GET /relay1/off"); relay_state = LOW; digitalWrite(RELAY_PIN, relay_state); server.send(200, "text/html", getHTML()); }); // Start the server server.begin(); } void loop() { // 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, soit en utilisant les touches Ctrl+Maj+N.
    L'IDE Arduino 2 ajoute un fichier.
    • 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 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-controls-relay-via-web */ #ifndef WEBPAGE_H #define WEBPAGE_H const char* webpage = R"=====( <!DOCTYPE HTML> <html> <head> <link rel='icon' href='data:,'> </head> <p>Relay state: <span style='color: red;'>%RELAY_STATE%</span></p> <a href='/relay1/on'>Turn ON</a> <br><br> <a href='/relay1/off'>Turn OFF</a> </html> )====="; #endif
    • Maintenant, vous avez 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 verrez quelque chose de similaire au code précédent comme ci-dessous :
    Navigateur Web de relais ESP8266 NodeMCU

    ※ NOTE THAT:

    • Si vous modifiez le contenu HTML dans le fichier index.h et que vous ne touchez à rien dans le fichier newbiely.fr.ino, lors de la compilation et du téléchargement du code sur ESP8266, l'IDE Arduino ne mettra pas à jour le contenu HTML.
    • Pour que l'IDE Arduino 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...).

    Vous pouvez facilement et de manière innovante personnaliser le code ci-dessus pour obtenir ce qui suit :

    • Contrôler plusieurs relais via le web
    • Refonte de l'interface utilisateur (UI) du web

※ 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!