Dans ce guide, nous allons créer un serveur Web avec l’ESP32 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’ESP32 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’ESP32 :
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 ESP32
Nous allons programmer l’ESP32 à l’aide de l’IDE Arduino. Vous devez donc avoir installé le module complémentaire ESP32. Suivez le tutoriel suivant 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’ESP32 :
3) 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’ESP32 à l’aide d’un pilote de moteur L298N.
Vous n’êtes pas familier avec le pilote de moteur L298N ? Suivez d’abord ce tutoriel : Serveur Web de servomoteur ESP32 avec 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’ESP32. Suivez le diagramme schématique suivant pour câbler le moteur à courant continu et le pilote de moteur L298N à l’ESP32.

| Pilote de moteur LN298N | Entrée 1 | Entrée 2 | Activer | GND |
| ESP32 | GPIO27 | GPIO26 | GPIO14 | 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 ESP32 : Guide de référence du brochage ESP32.
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’ESP32. 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’ESP32 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 plus de simplicité, nous enregistrerons le HTML et le CSS pour créer la page Web sur une variable du croquis Arduino.
Serveur Web ESP32 : contrôler un moteur à courant continu – Arduino Sketch
Le code suivant crée un serveur Web qui dessert une page Web avec trois boutons différents qui vous permettent de contrôler un moteur à courant continu à distance via votre serveur Web.
/*********
Rui Santos & Sara Santos - Raspberryme.com
Complete instructions at https://Raspberryme.com/esp32-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
// Motor A pins
int motor1Pin1 = 27;
int motor1Pin2 = 26;
int enable1Pin = 14;
// 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);
//HTML and CSS to build the web page
const char index_html[] PROGMEM = R"rawliteral(
ESP IOT DASHBOARD
)rawliteral";
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(){
Serial.print("Motor Stopped");
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();
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(200, "text/html", index_html);
});
server.on("/forward", HTTP_GET, [](AsyncWebServerRequest *request) {
moveForward();
request->send(200, "text/html", index_html);
});
server.on("/backward", HTTP_GET, [](AsyncWebServerRequest *request) {
moveBackward();
request->send(200, "text/html", index_html);
});
// Route to set GPIO state to LOW (inverted logic for ESP8266)
server.on("/stop", HTTP_GET, [](AsyncWebServerRequest *request) {
stopMotor();
request->send(200, "text/html", index_html);
});
server.begin();
}
void loop() {
}
Afficher le code brut
Il vous suffit d’insérer vos informations d’identification réseau dans le code et cela 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 et créer le serveur Web.
#include
#include
#include
#include
Broches du moteur
Définissez les GPIO qui contrôleront le moteur.
// Motor A pins
int motor1Pin1 = 27;
int motor1Pin2 = 26;
int enable1Pin = 14;
Informations d’identification réseau
Insérez vos informations d’identification réseau sur les variables suivantes afin que l’ESP32 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);
Page web
La variable index_html contient le texte avec le HTML et le CSS pour créer la page Web.
//HTML and CSS to build the web page
const char index_html[] PROGMEM = R"rawliteral(
ESP IOT DASHBOARD
)rawliteral";
Ici, nous créons trois boutons qui feront une requête sur les chemins URL suivants :
- AVANT : /avant
- ARRIÈRE : /en arrière
- ARRÊTER : /arrêter
FORWARD
BACKWARD
STOP
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();
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(200, "text/html", index_html);
});
Lorsque vous cliquez sur le bouton Suivant, vous effectuez une requête sur le chemin /forward. Lorsque l’ESP32 reçoit cette demande, il appellera la fonction moveForward() pour faire avancer le moteur.
server.on("/forward", HTTP_GET, [](AsyncWebServerRequest *request) {
moveForward();
request->send(200, "text/html", index_html);
});
De même, lorsque vous cliquez sur le bouton Backward, l’ESP32 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(200, "text/html", index_html);
});
Lorsque vous cliquez sur le bouton Stop, l’ESP32 reçoit une requête sur le chemin /stop et appelle la fonction stopMotor().
// Route to set GPIO state to LOW (inverted logic for ESP8266)
server.on("/stop", HTTP_GET, [](AsyncWebServerRequest *request) {
stopMotor();
request->send(200, "text/html", index_html);
});
Initialiser le serveur
Enfin, appelez la méthode Begin() sur l’objet serveur pour initialiser le serveur.
server.begin();
Démonstration
Après avoir inséré vos informations d’identification réseau, téléchargez le code sur la carte ESP32. Après le téléchargement, ouvrez le moniteur série à un débit en bauds de 115 200 et appuyez sur le bouton ESP32 RST.

L’adresse IP de l’ESP32 sera imprimée sur le moniteur série.

Avec le moteur connecté à l’ESP32 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’ESP32. 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 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’ESP32 à partir de zéro, nous vous recommandons de consulter notre eBook exclusif :
Merci d’avoir lu.
Cette vidéo vous emmène dans l’histoire de Raspberry Pi :

-
ELEGOO Carte Starter Kit de Démarrage ESP-32 Compatible avec Arduino IDE
-
KEYESTUDIO ESP32 Smart Home IoT Kit Compatible avec Arduino IDE, avec ESP32 Board, Python C, Musical Project, etc.
