samedi 8 septembre 2018

Servomoteur contrôlé par Wi-Fi (ESP8266 ou ESP32)

(N.B.: cet article a été mis à jour le 8 août 2019, pour assurer une compatibilité avec l'ESP32).

Il fallait s'y attendre: après avoir contrôlé un moteur à courant continu et un moteur pas à pas, je vous explique aujourd'hui comment j'ai procédé pour contrôler un servomoteur par Wi-Fi, à partir d'une page web.

Matériel

Nous utiliserons un petit servomoteur de type Tower Pro SG90 et un module ESP8266 ou ESP32. Sur la photographie ci-contre, vous pouvez constater qu'en fait j'ai utilisé une carte de développement Wemos D1 (dont je vous parlerai avec enthousiasme dans un futur billet) mais puisque le servomoteur n'occupera qu'une seule sortie de l'ESP8266, n'importe quel module ESP8266 devrait convenir (même le modeste ESP-01!).

Préparation de l'IDE Arduino

Dans l'hypothèse où il s'agirait de votre première occasion de programmer un module ESP8266 avec l'IDE Arduino, je vous réfère à un précédent billet qui vous fournit les instructions nécessaires à l'installation des fichiers requis. Pour l'ESP32, les informations pertinentes se trouvent plutôt ici.

Pour l'ESP32: installation d'une bibliothèque

Si vous utilisez un ESP8266, vous n'avez pas de bibliothèque à installer: la bibliothèque "Servo"  conventionnelle, installée par défaut dans l'IDE Arduino, fait parfaitement l'affaire. Si vous utilisez un ESP32, toutefois, vous devez installer une version de la bibliothèque Servo qui a été spécialement conçue pour l'ESP32. Heureusement, la syntaxe est la même peu importe la bibliothèque utilisée.

Circuit

Nous avons choisi d'utiliser la broche GPIO4 pour contrôler le servomoteur. Pour un seul petit servomoteur, on peu utiliser l'alimentation 3,3 V de la carte. Pour plusieurs servomoteurs, ou pour un servomoteur plus gros, il devient important d'utiliser une alimentation distincte (auquel cas, n'oubliez pas de relier une broche GND de la carte à la borne négative de l'alimentation du servomoteur).

Schéma du circuit pour une carte ESP32 (mais elles ne sont pas toutes identiques):


Schéma du circuit pour une carte Wemos D1 mini (la broche D2 de cette carte correspond à GPIO4):



Si vous utilisez plutôt un module ESP8266 et un convertisseur USB-TTL, 3 broches de votre module ESP8266 sont connectées à 3,3 V: VCC, RST et CH_PD (aussi appelée "EN" sur certains modules), et deux broches 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.

Il n'est évidemment pas nécessaire que la sortie utilisée pour le contrôle du servomoteur soit GPIO 04, puisque toutes les sorties de l'ESP8266 peuvent produire un signal PWM.

Sketch

Le contrôle du servomoteur se limite à l'utilisation de la fonction attach(), au démarrage, pour indiquer à quelle broche on l'a connecté, et la fonction write() pour modifier sa position. 

La fonction "construitPage()" retourne une chaîne de caractères contenant la totalité de la page web, en langage html.  Cette page comporte 3 boutons radio qui permettent à l'utilisateur de sélectionner 3 positions différentes du servomoteur.

Avant d'utiliser le sketch, vous devrez remplacer les astérisques par le nom de votre réseau Wi-Fi et le mot de passe qui permet d'y accéder.



Résultat

Il est utile d'afficher le moniteur série lors du démarrage du sketch, car vous y trouverez l'adresse IP du module ESP8266.



Il s'agit de coller cette adresse dans un navigateur web ayant accès à votre réseau Wi-Fi pour afficher la page web qui permet de contrôler le servomoteur.

Pour un contrôle plus fin de la position du servomoteur, vous pouvez bien sûr ajouter des boutons supplémentaires,  les remplacer par un champ texte dans lequel l'utilisateur entrera directement l'angle désiré en degrés ou encore les remplacer par un contrôle qu'on fait glisser avec la souris.

Yves Pelletier   (TwitterFacebook)

7 commentaires:

  1. Bonjour Mr Pelletier,
    Merci pour toutes ces infos, mais est il possible d'avoir le code svp ?. En vous remerciant. Bricolus88.

    RépondreSupprimer
  2. Bonsoir,
    merci pour votre réponse, mais désolé je ne vois pas.Je parle du sketche complet bien sur, la je ne vois que quelques lignes de code apparaissant sur le moniteur série ! Merci de m'eclairer. Bricolus88.

    RépondreSupprimer
    Réponses
    1. Le sketch complet se trouve à la fin de la section "sketch". Peut-être avec un navigateur différent?

      Supprimer
  3. Bonjour Mr Pelletier,
    J'ai suivi vos conseils et changé de navigateur, NICKEL .Je vous remercie beaucoup pour votre travail et votre patience. Blog tres interessant. A bientôt sur celui ci. BRICOLUS88

    RépondreSupprimer
  4. Jai un probleme'server' was not declared in this scope

    RépondreSupprimer
  5. Merci pour ce tuto qui m'a permis de me remettre en selle sur le code arduino de connaitre le ESP32 et de commencer le code html .. je suis en train de de faire une maquette de voilier statique "animée" et et j'ai du mal avec le Html !! pour plus de précision j'ai ajouter des points de positions du servo et je voudrais enlever le bouton "appliquer" ; que le servo change de position dés l'appui sur le "rond" de position de la page web .. et je ne comprend pas comment faire .. si vous pouviez me donner une piste ;) .. merci de vôtre aide

    RépondreSupprimer