mardi 16 juillet 2019

Programmer l'ESP32 avec l'IDE Arduino (premiers pas)

Puisque je me suis beaucoup amusé avec l'ESP8266 au cours des derniers mois, il était inévitable que je fasse un jour ou l'autre la connaissance de son cousin, l'ESP32.

En bref, l'ESP32, c'est la même chose que l'ESP8266: un microcontrôleur 32 bits avec WiFi intégré.  Sauf que l'ESP32 est plus rapide et dispose de plus de mémoire, de Bluetooth intégré, de broches GPIO deux fois plus nombreuses, de beaucoup plus d'entrées analogiques, de deux sorties analogiques, d'un capteur à effet Hall intégré... et même s'il est un tout petit peu plus cher que l'ESP8266, l'ESP32 est quand même offert à un prix inexplicablement dérisoire.

Je me suis procuré sur eBay le module de développement photographié ci-dessus (l'annonce était intitulée "ESP-32S ESP32 NodeMCU Development Board").

Le présent billet constitue une marche à suivre pour programmer ce module au moyen de l'IDE Arduino.

Préparation de l'IDE Arduino

Si l'IDE Arduino n'est pas déjà installé sur votre ordinateur, la première étape consiste à l'installer!

Il faut ensuite ajouter des fichiers supplémentaires qui permettent d'utiliser l'IDE Arduino afin de programmer l'ESP32. Pour ce faire, on accède d'abord au dialogue de préférences de l'IDE, grâce au menu Fichier / Préférences.

Au bas du dialogue de Préférences, dans le champ intitulé "URL de gestionnaire de cartes supplémentaires", vous écrivez cette adresse:

https://dl.espressif.com/dl/package_esp32_index.json


S'il y a déjà d'autres adresses dans ce champ, vous pouvez les séparer par des virgules.
On clique évidemment sur le bouton "OK" pour enregistrer les changements.

On se dirige ensuite vers le gestionnaire de carte, en passant par le menu "Outils / Type de carte / Gestionnaire de cartes"


À l'intérieur du gestionnaire de carte, on localise "esp32 by Espressif Systems". Un clic dans cette zone fait apparaître le bouton "Installer", sur lequel nous allons évidemment cliquer.


Le message "Téléchargement des définitions de cartes" devrait s'afficher dans le bas de la fenêtre. Lorsque c'est terminé, la mention "INSTALLED" apparaît à gauche de "esp32 by Espressif Systems". Vous pouvez maintenant fermer le gestionnaire de carte.


Téléversement d'un premier sketch dans l'ESP32

Le temps est venu de brancher le module ESP32 à un port USB de l'ordinateur. Sur ma carte, une LED rouge s'allume pour indiquer qu'elle est alimentée.

Le menu "Outils / Type de carte" nous donne maintenant accès à une rubrique "ESP32 Arduino" qui comporte près d'une soixantaine de cartes ESP32 différentes! Si vous reconnaissez le nom spécifique de votre carte dans la liste, sélectionnez-le, bien sûr, mais si votre carte vous a simplement été vendue sous le nom de ESP32, le premier choix du menu, intitulé "ESP32 Dev Module", fera parfaitement l'affaire.


Si vous êtes curieux de savoir ce qu'implique le choix d'un modèle de carte plutôt qu'un autre, vous pouvez aller jeter un oeil sur le gitHub d'Arduino core for ESP32. Le fichier boards.txt décrit le contenu du menu "Outils" pour chaque carte: certaines cartes offrent plus d'options avancées que d'autres. De plus, le répertoire "variants" comporte les définitions de broches pour chaque carte.

Par exemple, la plupart des cartes définissent la constante "LED_BUILTIN", qui contient le numéro de la broche permettant de contrôler la LED intégrée à la carte. Puisque cette LED n'est pas nécessairement associée à la même broche pour toutes les cartes, notre choix générique "ESP32 Dev Module" ne définit pas cette constante.


Ensuite, c'est la routine habituelle (en supposant que vous êtes déjà familier avec la programmation d'un Arduino): on sélectionne le port série correspondant à notre carte. Dans mon cas, j'ai dû appuyer sur le bouton "BOOT" de ma carte pour que le port devienne disponible dans le menu. J'ai aussi diminué un peu la vitesse de téléversement ("Upload Speed"), car la valeur par défaut de 921600 bauds semble trop optimiste pour la qualité douteuse de mon câble USB.


L'exemple "WiFiScan" (accessible par le menu "Fichier / Exemples / WiFi / WiFiScan" est un bon moyen de vérifier le fonctionnement correct de votre module ESP32, puisqu'aucune modification à ce sketch n'est nécessaire.


Ma première tentative de téléversement a échoué, avec le message d'erreur "A fatal error occured: Failed to connect to ESP32: Timed out waiting for packet header".


Pas de panique: ce problème très fréquent indique que le dispositif qui permettrait à ma carte de se mettre en mode programmable ne fonctionne pas correctement. Le remède consiste à appuyer sur le bouton "BOOT" de la carte ESP32 au moment où le messsage "Connecting....." apparaît au bas de la fenêtre, et de maintenir ce bouton enfoncé jusqu'à ce que d'autres messages soient affichés ("Chip is ESP32D0WDQ6 (revision 1)").

Cette fois, ça fonctionne...


Le moniteur série affiche la liste des réseaux WiFi détectés.


Essai d'une broche GPIO

Le premier essai d'un microcontrôleur ne pourrait pas être complet sans le clignotement d'une LED grâce à l'exemple Blink (menu "Fichier / Exemples / 01.Basics / Blink ).

Puisque cet exemple utilise la constante "LED_BUILTIN" qui n'est pas définie pour la carte générique "ESP32 Dev Module" que j'ai sélectionnée, j'ai remplacé dans le sketch l'expression "LED_BUILTIN" par le nombre 2 puisque la LED intégrée à ma carte est branchée à la broche GPIO 2.


Résultat: la LED bleue se met à clignoter sur la carte.


J'ai ensuite branché une LED à une broche choisie au hasard  (celle portant l'identification "D21" sur la carte) et je l'ai fait clignoter avec succès en écrivant "digitalWrite(21, HIGH);" dans le sketch.



Compatibilité des sketches écrits pour l'ESP8266

Un aspect important à considérer lorsqu'on a déjà fait quelques projets impliquant l'ESP8266: nos programmes écrits pour l'ESP8266 fonctionneront-ils sans problème sur l'ESP32?

Je n'ai fait qu'un seul test, mais il s'est avéré encourageant: j'ai fait l'essai de mon sketch qui sert à lire les flux RSS, et la seule modification nécessaire a consisté à remplacer l'instruction #include "ESP8266WiFi.h" par #include "WiFi.h". Pour d'autres sketches, je ne serais pas surpris de devoir modifier quelques numéros de broches de temps à autre mais, à première vue, les modifications requises ne semblent pas très nombreuses.

Yves Pelletier   (TwitterFacebook)

11 commentaires:

  1. Merci pour ce premier tutoriel... En attendant des exemples concrets plus précis pour exploiter les ressources de cette carte

    RépondreSupprimer
  2. Merci encore une fois pour ce tuto qui est très clair 😀

    RépondreSupprimer
  3. merci bien j'adore. ce travaille est très claire

    RépondreSupprimer
  4. Merci beaucoup pour ces explications, je découvre l'ESP32.

    RépondreSupprimer
  5. Merci pour ce tuto sur l'ESP32

    RépondreSupprimer
  6. Fonctionne pas, me met une erreur comme quoi j'ai pas la bonne carte alors que c'est bien une esp. Même en appuyant sur boot il téléverse pas

    RépondreSupprimer
  7. Un grand merci pour ce tutoriel. Je viens d'acheter une lolin32 lite, je suis complètement nouveau dans le domaine et je ne savais pas trop par où commencer. Grâce à ton tuto je viens de découvrir les fichiers d'exemple, et ça m'a totalement débloqué. Merci à toi !

    RépondreSupprimer
  8. Enfin ! Cela fait 2 jours que j’essaye de téléverser un programme sur un esp32 30gpio. J'ai regardé plein de tuto sur You... rien n'y a fait. Je me disait bon, il va falloir acheter une nouvelle carte et en quelques lignes, tout est clair, j'ai suivi vos indications (esp32 DEV Module 115200 bauds) et pris l'exemple Wifi. Un 1er téléversement sans appuyer sur boot, le 2ème en appuyant et eurêka ça fonctionne. Je viens de téléverser un autre programme pour rechercher les adresses des sondes DS18B20 et ça marche. Un grand merci.

    RépondreSupprimer
  9. Merci beaucoup 🤗🤗🤗

    RépondreSupprimer