Dans ce guide, nous allons créer un serveur Web avec le NodeMCU ESP8266 pour contrôler un moteur à courant continu à distance. Le serveur Web servira une page Web avec des boutons pour faire tourner le moteur en avant, en arrière et à l’arrêt. Pour contrôler les moteurs, nous utiliserons le pilote de moteur L298N et l’ESP8266 sera programmé à l’aide de l’IDE Arduino.

Pour mieux comprendre le fonctionnement de ce projet, nous vous recommandons de consulter notre guide de démarrage du moteur à courant continu avec l’ESP8266 :
Conditions préalables
Avant de poursuivre le didacticiel, assurez-vous de vérifier les prérequis suivants.

1) Pièces requises
Pour suivre ce tutoriel, vous avez besoin des pièces suivantes :
Vous pouvez utiliser les liens précédents ou vous rendre directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

2) Module complémentaire de cartes Arduino IDE et ESP8266
Nous allons programmer l’ESP8266 à l’aide de l’IDE Arduino. Vous devez donc avoir les cartes ESP8266 installées sur votre Arduino ÎDE si ce n’est pas déjà fait.
Si vous souhaitez utiliser VS Code avec l’extension PlatformIO, suivez plutôt le tutoriel suivant pour apprendre à programmer l’ESP8266 :
3) Plugin de téléchargement du système de fichiers
Pour télécharger les fichiers HTML et CSS nécessaires à la construction de ce projet sur le système de fichiers ESP8266 (LittleFS), nous utiliserons un plugin pour l’IDE Arduino : LittleFS Filesystem Uploader. Suivez le didacticiel suivant pour installer le plugin de téléchargement du système de fichiers sur Arduino 2 si vous ne l’avez pas déjà fait :
Si vous utilisez VS Code avec l’extension PlatformIO, lisez le didacticiel suivant pour savoir comment télécharger des fichiers sur le système de fichiers :
4) Installer les bibliothèques
Pour construire ce projet, vous devez installer les bibliothèques suivantes :
Les bibliothèques ESPAsyncWebServer et AsynTCP ne peuvent pas être installées via Arduino Library Manager. Vous devez cliquer sur les liens précédents pour télécharger les fichiers de la bibliothèque. Ensuite, dans votre IDE Arduino, accédez à Sketch> Inclure la bibliothèque> Ajouter une bibliothèque .zip et sélectionnez les bibliothèques que vous venez de télécharger.
4) Diagramme schématique
Le diagramme schématique suivant montre comment connecter un moteur à courant continu à l’ESP8266 à l’aide d’un pilote de moteur L298N.
Vous n’êtes pas familier avec le pilote de moteur L298N ? Suivez d’abord ce tutoriel : ESP8266 NodeMCU avec moteur à courant continu et pilote de moteur L298N – Contrôle de la vitesse et de la direction (Arduino IDE)
Le moteur que nous allons contrôler est connecté aux broches de sortie du moteur A, nous devons donc câbler les broches ENABLEA, INPUT1 et INPUT2 du pilote de moteur à l’ESP8266. Suivez le diagramme schématique suivant pour câbler le moteur à courant continu et le pilote de moteur L298N à l’ESP8266.

| Pilote de moteur LN298N | Entrée 1 | Entrée 2 | Activer | GND |
| ESP8266 | GPIO12 (D6) | GPIO14 (D5) | GPIO13 (D7) | GND |
Nous utilisons les GPIO du tableau précédent pour nous connecter au pilote du moteur. Vous pouvez utiliser n’importe quel autre GPIO approprié à condition de modifier le code en conséquence. En savoir plus sur les GPIO ESP8266 : Référence de brochage ESP8266 : Quelles broches GPIO devez-vous utiliser ?
Alimentation du pilote de moteur LN298N
Le moteur à courant continu nécessite une forte augmentation du courant pour se déplacer, les moteurs doivent donc être alimentés à l’aide d’une source d’alimentation externe provenant de l’ESP8266. A titre d’exemple, nous utilisons 4 piles AA, mais vous pouvez utiliser n’importe quelle autre alimentation appropriée. Dans cette configuration, vous pouvez utiliser une alimentation de 6V à 12V.

L’interrupteur entre le support de batterie et le pilote du moteur est facultatif, mais il est très pratique pour couper et appliquer l’alimentation. De cette façon, vous n’avez pas besoin de connecter puis de déconnecter les fils pour économiser de l’énergie en permanence.
Nous recommandons de souder un condensateur céramique de 0,1 uF aux bornes positives et négatives du moteur à courant continu, comme indiqué dans le schéma, pour aider à atténuer les pics de tension. (Remarque : les moteurs fonctionnent également sans condensateur.)

Aperçu du projet
L’image suivante montre la page Web que vous allez créer pour ce projet.
La page Web comporte trois boutons pour contrôler le moteur à courant continu. Chaque bouton effectue une requête sur une URL différente afin que l’ESP8266 sache quel bouton a été enfoncé et agit en conséquence.

- Bouton Suivant : effectue une requête sur l’URL /forward – le moteur tournera vers l’avant
- Bouton Retour : effectue une requête sur l’URL /backward – le moteur tournera vers l’arrière
- Bouton Stop : fait une requête sur l’URL /stop – le moteur s’arrêtera
Pour construire cette page Web, nous allons créer un fichier HTML (index.html) et un fichier CSS (style.css) qui seront enregistrés sur le système de fichiers ESP8266 (LittleFS).
Organiser vos fichiers
Les fichiers que vous souhaitez télécharger sur le système de fichiers ESP doivent être placés dans un dossier appelé data sous le dossier du projet. Nous allons déplacer deux fichiers vers ce dossier :
- index.html pour construire la page Web ;
- style.css pour styliser la page Web ;

Vous devez enregistrer les fichiers HTML, CSS et JavaScript dans un dossier appelé data dans le dossier de croquis Arduino, comme indiqué dans le diagramme précédent. Nous téléchargerons ces fichiers sur le système de fichiers ESP8266 (LittleFS).
Vous pouvez télécharger tous les fichiers du projet :
Fichier HTML
Créez un fichier appelé index.html avec le contenu suivant :
ESP IOT DASHBOARD
Afficher le code brut
Dans ce fichier HTML, nous créons trois boutons qui, une fois cliqués, feront une requête sur différentes URL.
- AVANT : /avant
- ARRIÈRE : /en arrière
- ARRÊTER : /arrêter
FORWARD
BACKWARD
STOP
Fichier CSS
Créez un fichier appelé style.css avec le contenu suivant pour styliser la page Web.
html {
font-family: Arial, Helvetica, sans-serif;
text-align: center;
}
h1 {
font-size: 1.8rem;
color: white;
}
.topnav {
overflow: hidden;
background-color: #0A1128;
}
body {
margin: 0;
}
.content {
padding: 50px;
}
.card-grid {
max-width: 800px;
margin: 0 auto;
display: grid;
grid-gap: 2rem;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
.card {
background-color: white;
box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5);
}
.card-title {
font-size: 1.2rem;
font-weight: bold;
color: #034078
}
.state {
font-size: 1.2rem;
color:#1282A2;
}
button {
border: none;
color: #FEFCFB;
padding: 15px 32px;
text-align: center;
font-size: 16px;
width: 150px;
border-radius: 4px;
transition-duration: 0.4s;
}
.button-on {
background-color:#034078;
}
.button-on:hover {
background-color: #1282A2;
}
.button-off {
background-color:#858585;
}
.button-off:hover {
background-color: #252524;
}
.button-stop {
background-color:#5e0f0f;
width: 100%;
}
.button-stop:hover {
background-color: #9b332c;
}
Afficher le code brut
Serveur Web ESP8266 : contrôler un moteur à courant continu – Arduino Sketch
Le code suivant crée un serveur Web qui dessert la page Web que vous avez créée précédemment pour contrôler un moteur à courant continu à distance à l’aide d’un navigateur Web sur le réseau local.
/*********
Rui Santos & Sara Santos - Raspberryme.com
Complete instructions at https://Raspberryme.com/esp8266-nodemcu-web-server-dc-motor-arduino/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/
#include
#include
#include
#include
#include
// Motor A pins
int motor1Pin1 = 12;
int motor1Pin2 = 14;
int enable1Pin = 13;
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
// Create AsyncWebServer object on port 80
AsyncWebServer server(80);
// Initialize LittleFS
void initFS() {
if (!LittleFS.begin()) {
Serial.println("An error has occurred while mounting LittleFS");
}
else {
Serial.println("LittleFS mounted successfully");
}
}
void initWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
}
void moveForward(){
Serial.println("Moving Forward");
digitalWrite(enable1Pin, HIGH);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
}
void moveBackward(){
Serial.println("Moving Backward");
digitalWrite(enable1Pin, HIGH);
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
}
void stopMotor(){
digitalWrite(enable1Pin, LOW);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
}
void setup() {
Serial.begin(115200);
// Set motor pins as outputs
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enable1Pin, OUTPUT);
initWiFi();
initFS();
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(LittleFS, "/index.html", "text/html");
});
server.serveStatic("/", LittleFS, "/");
server.on("/forward", HTTP_GET, [](AsyncWebServerRequest *request) {
moveForward();
request->send(LittleFS, "/index.html", "text/html", false);
});
server.on("/backward", HTTP_GET, [](AsyncWebServerRequest *request) {
moveBackward();
request->send(LittleFS, "/index.html", "text/html", false);
});
server.on("/stop", HTTP_GET, [](AsyncWebServerRequest *request) {
stopMotor();
request->send(LittleFS, "/index.html", "text/html", false);
});
server.begin();
}
void loop() {
}
Afficher le code brut
Il vous suffit d’insérer vos informations d’identification réseau et de télécharger l’image du système de fichiers et le code fonctionnera immédiatement.
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_SSID";
Comment fonctionne le code
Continuez à lire pour savoir comment fonctionne le code ou passez à la section Démonstration.
Y compris les bibliothèques
Tout d’abord, incluez les bibliothèques requises pour vous connecter au Wi-Fi, créez le serveur Web et utilisez le système de fichiers LittleFS.
#include
#include
#include
#include
#include
Broches du moteur
Définissez les GPIO qui contrôleront le moteur.
// Motor A pins
int motor1Pin1 = 12;
int motor1Pin2 = 14;
int enable1Pin = 13;
Informations d’identification réseau
Insérez vos informations d’identification réseau sur les variables suivantes afin que l’ESP8266 se connecte à votre réseau.
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_SSID";
Création d’un objet serveur
Créez un objet AsyncWebServer appelé serveur sur le port 80.
AsyncWebServer server(80);
Initialiser LittleFS
La fonction suivante initFS() initialise le système de fichiers LittleFS. Nous l’appellerons plus tard dans setup().
void initFS() {
if (!LittleFS.begin()) {
Serial.println("An error has occurred while mounting LittleFS");
}
else {
Serial.println("LittleFS mounted successfully");
}
}
Initialiser le Wi-Fi
La fonction initWiFi() se connecte au Wi-Fi en utilisant le SSID et le mot de passe que vous avez définis précédemment.
void initWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
}
Fonctions pour contrôler les moteurs à courant continu
Nous créons trois fonctions pour contrôler le moteur à courant continu.
La fonction moveForward() fera avancer le moteur.
void moveForward(){
Serial.println("Moving Forward");
digitalWrite(enable1Pin, HIGH);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
}
La fonction moveBackward() fait reculer le moteur.
void moveBackward(){
Serial.println("Moving Backward");
digitalWrite(enable1Pin, HIGH);
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
}
Enfin, la fonction stopMotor() arrête le moteur en réglant toutes les broches du moteur sur LOW.
void stopMotor(){
Serial.print("Motor Stopped")
digitalWrite(enable1Pin, LOW);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
}
installation()
Dans setup(), initialisez le Serial Monitor à des fins de débogage.
Serial.begin(115200);
Définissez les broches du moteur comme sorties.
// Set motor pins as outputs
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enable1Pin, OUTPUT);
Initialisez le Wi-Fi en appelant la fonction initWiFi().
initWiFi();
Initialisez le système de fichiers LittleFS en appelant la fonction initFS() que nous avons créée précédemment.
initFS();
Gérer les demandes
Ensuite, gérez le serveur Web. Lorsque vous recevez une requête sur l’URL root (/) (cela se produit lorsque vous accédez à l’adresse IP ESP), envoyez le texte HTML pour créer la page Web :
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(LittleFS, "/index.html", "text/html");
});
Lorsque le fichier HTML se charge sur votre navigateur, il fera une demande pour le fichier CSS. Il s’agit d’un fichier statique enregistré sur le même répertoire (LittleFS). Ainsi, nous pouvons simplement ajouter la ligne suivante pour servir les fichiers dans un répertoire lorsque l’URL root le demande. De cette façon, le fichier CSS sera servi automatiquement.
server.serveStatic("/", LittleFS, "/");
Lorsque vous cliquez sur le bouton Suivant, vous effectuez une requête sur le chemin /forward. Lorsque l’ESP8266 reçoit cette requête, il appellera la fonction moveForward() pour faire avancer le moteur.
server.on("/forward", HTTP_GET, [](AsyncWebServerRequest *request) {
moveForward();
request->send(LittleFS, "/index.html", "text/html", false);
});
De même, lorsque vous cliquez sur le bouton Backward, l’ESP8266 reçoit une requête sur le chemin /backward. Lorsque cela se produit, appelez la fonction moveBackward() pour faire bouger le moteur dans l’autre sens.
server.on("/backward", HTTP_GET, [](AsyncWebServerRequest *request) {
moveBackward();
request->send(LittleFS, "/index.html", "text/html", false);
});
Lorsque vous cliquez sur le bouton Stop, l’ESP8266 reçoit une requête sur le chemin /stop et appelle la fonction stopMotor().
server.on("/stop", HTTP_GET, [](AsyncWebServerRequest *request) {
stopMotor();
request->send(LittleFS, "/index.html", "text/html", false);
});
Initialiser le serveur
Enfin, appelez la méthode Begin() sur l’objet serveur pour initialiser le serveur.
server.begin();
Télécharger du code et des fichiers
Après avoir inséré vos informations d’identification réseau, enregistrez le code. Accédez à Sketch > Show Sketch Folder et créez un dossier appelé data.
Dans ce dossier, vous devez enregistrer les fichiers HTML et CSS.

Télécharger des fichiers sur le système de fichiers
Avec les fichiers HTML et CSS enregistrés dans le dossier de données, vous pouvez maintenant les télécharger sur le tableau. Assurez-vous que le plug-in Filesystem Uploader est installé.
Sélectionnez la carte ESP8266 que vous utilisez (Outils > Carte) et sélectionnez le bon port COM (Outils > Port).
Ensuite, téléchargez les fichiers sur la carte ESP8266. Presse [Ctrl] + [Shift] + [P] sous Windows ou [⌘] + [Shift] + [P] sur MacOS pour ouvrir la palette de commandes. Recherchez Télécharger LittleFS vers Pico/ESP8266/ESP32 et cliquez dessus.

Important : assurez-vous que le moniteur série est fermé. Sinon, le téléchargement échouera.
Après quelques secondes, vous devriez recevoir le message « Téléchargement terminé. « . Les fichiers ont été téléchargés avec succès sur le système de fichiers ESP8266.

Téléchargez le code
Ensuite, téléchargez le code sur votre carte ESP8266 (assurez-vous d’avoir ajouté vos informations d’identification réseau dans le code).

Démonstration
Lorsque tout est téléchargé avec succès, ouvrez le moniteur série à un débit en bauds de 115 200.

Appuyez sur le bouton ESP8266 RST et il devrait imprimer l’adresse IP de l’ESP8266.

Avec le moteur connecté à l’ESP8266 via le pilote de moteur L298N et alimenté par une alimentation externe, ouvrez n’importe quel navigateur sur votre réseau local et tapez l’adresse IP de l’ESP8266. La page Web suivante se chargera.

Cliquez sur les boutons pour contrôler le moteur à courant continu.

Le serveur peut gérer plusieurs clients simultanément. Vous pouvez également contrôler le moteur DC depuis votre smartphone à condition qu’il soit connecté à votre réseau local.

Conclusion
Dans ce didacticiel, vous avez appris à créer un simple serveur Web asynchrone avec l’ESP8266 pour contrôler un moteur à courant continu à distance depuis votre ordinateur ou votre smartphone. Vous pouvez désormais étendre ce projet pour contrôler plus de moteurs ou contrôler d’autres sorties ou même afficher les lectures des capteurs. Vous pouvez consulter les tutoriels suivants :
Si vous souhaitez en savoir plus sur la création de serveurs Web avec l’ESP8266 à partir de zéro, nous vous recommandons de consulter notre eBook exclusif :
Merci d’avoir lu.
Apprenez l’histoire de Raspberry Pi à travers cette vidéo :

-
AZDelivery D1 Mini NodeMCU Lua avec ESP8266-12F Module WLAN CH340G Compatible avec Arduino incluant Un E-Book!
-
AZDelivery 5X D1 Mini NodeMCU Lua avec ESP8266-12F Module WLAN CH340G Compatible avec Arduino incluant Un E-Book!
