N.B. Ce tutoriel a été mis à jour le 2 août 2019 (ajout d'informations concernant l'ESP32).
Il y a quelques semaines, nous nous sommes amusés à contrôler un moteur à courant continu par WiFi grâce à un ESP8266 ou un ESP32.
L'expérience d'aujourd'hui est dans le même ordre d'idées, sauf que nous contrôlerons cette fois-ci un moteur pas à pas.
Une page web nous permettra de choisir le nombre de pas effectués par le moteur, la direction de sa rotation (horaire ou antihoraire) ainsi que le temps écoulé entre deux pas consécutifs (ce qui influencera évidemment la vitesse de rotation du moteur).
Matériel nécessaire
Un moteur pas à pas (j'ai utilisé un moteur bipolaire provenant d'une vieille imprimante), une carte de développement munie d'un ESP8266 ou d'un ESP32, un double pont en H (j'ai utilisé un module L298N), et un accès à un réseau WiFi.
Préparation de l'IDE Arduino
L'IDE Arduino ne dispose pas par défaut des fichiers nécessaires pour programmer l'ESP8266 ou l'ESP32: si ce n'est pas déjà fait, vous pouvez consulter une marche à suivre détaillée pour l'ESP8266 ou pour l'ESP32.
Le circuit
Sans trop de surprise, le circuit est très similaire à celui que nous avions utilisé pour le contrôle d'un moteur électrique conventionnel, sauf que le moteur pas à pas accapare toutes les sorties du module L298N.
Dans le sketch (disponible un peu plus loin), j'ai supposé que le moteur pas à pas allait être contrôlé par les broches GPIO 4, GPIO5, GPIO 14 et GPIO 16.
Voici le schéma du circuit pour le module ESP32 que j'utilise (sur cette carte, la broche GPIO 16 est identifiée par "RX2"):
Avec une petite carte Wemos D1 Mini, ça donne ça (la numérotation sur la carte n'est pas le numéro de GPIO: on utilise D2, D1, D5 et D0):
Et voici sur le schéma et les instructions pour un module ESP-12 programmé au moyen d'un convertisseur USB-TTL:
L'ESP8266 nécessite une alimentation de 3,3 V, ce qui est trop faible pour la plupart des moteurs pas à pas, d'où les deux alimentations distinctes.
- 3 broches de l'ESP8266 sont connectées à 3,3 V: VCC, RST et CH_PD (aussi appelée "EN" sur certains modèles).
- 2 broches de l'ESP8266 sont connectées à la masse: GND et GPIO0.
- La broche RXD de l'ESP8266 est reliée à la broche TX du convertisseur USB-TTL, et la broche TXD de l'ESP8266 est reliée à la broche RX du convertisseur USB-TTL.
- Les broches GPIO4, GPIO5, GPIO14 et GPIO16 de l'ESP8266 sont branchées à IN1, IN2, IN3 et IN4 du module 298N, puisqu'elles sont responsables de contrôler le moteur.
- Toutes les masses sont reliées ensemble (GND de l'ESP8266, du convertisseur USB-TTL et du module L298N).
Le sketch
La fonction "construitPage()" retourne une chaîne de caractères contenant la totalité de la page web, en langage html. Cette page web contient un champ qui permettra à l'utilisateur de déterminer de combien de pas il veut faire tourner le moteur, une paire de boutons radio permettant de choisir le sens de rotation, un champ permettant de choisir le délai en millisecondes entre deux pas consécutifs, et finalement un bouton "appliquer" qu'on clique pour que les nouveaux paramètres soient pris en compte par le microcontrôleur.
La fonction "gestionPage()" est appelée lors d'un clic sur le bouton "Appliquer". Elle met à jour quelques variables globales en fonction des choix faits par l'utilisateur de la page web, et indique les paramètres choisis dans le moniteur série (ce qui sera surtout utile pour le débogage).
prochainStep() et gestionMoteur() sont responsable de faire tourner le moteur avec les paramètres spécifiés (j'ai choisi de ne pas utiliser la bibliothèque Stepper).
Le résultat
Au démarrage du programme, l'adresse de la page web construite par l'ESP8266 ou l'ESP32 est affichée dans le moniteur série. Il suffit de coller cette adresse dans un navigateur web pour accéder à la page.
La page web vous permet de choisir le nombre de pas de la prochaine rotation du moteur, le sens de cette rotation, et le délai en millisecondes entre chaque pas. Le moteur devrait se mettre à tourner lorsque vous cliquez sur le bouton "Appliquer".