Créer un projet ESP32 avec PlatformIO: guide d'introduction pour débutants
sur
L'utilisation de PlatformIO avec Visual Studio Code crée un environnement de développement pour microcontrôleurs à la fois puissant, flexible et accessible. Cet article décrit un exemple d'intégration de PlatformIO et de VSC pour créer une solution permettant de mesurer les valeurs d'humidité et de température avec un capteur numérique et un module ESP32.
PlatformIO
PlatformIO est un environnement de développement intégré (EDI) open-source qui gagne en popularité non seulement auprès des amateurs mais aussi parmi les professionnels. Un environnement de développement intégré est un logiciel qui fournit aux développeurs une suite complète d'outils destinés à l'écriture, au test et au débogage de code. Un EDI intègre plusieurs outils et fonctionnalités essentiels pour simplifier le processus de développement de logiciels, améliorer la productivité et assurer une cohérence tout au long du cycle de vie d'un projet. Il intègre généralement :
- Un éditeur de texte avancé qui prend en charge la syntaxe du langage de programmation utilisé, avec des fonctionnalités telles que la coloration syntaxique, l'autocomplétion et l'indentation.
- Des outils pour compiler le code source en langage machine exécutable.
- Un débogueur intégré pour détecter et corriger les erreurs dans le code pendant l'exécution du programme.
- Un système qui facilite l'ajout, la gestion et la mise à jour des bibliothèques et des dépendances du projet.
- Un environnement d'exécution contrôlé pour tester le logiciel en cours de développement.
- Des systèmes d'intégration avec des outils de contrôle de version (tels que SVN, Git, Mercurial, etc.), des fonctions de gestion de projet et une interface utilisateur simple et intuitive.
Visual Studio Code (VSC), par exemple, est un EDI couramment utilisé.
Toutefois, il est important de noter que PlatformIO n'est pas un véritable EDI autonome, mais fonctionne comme un plugin (c'est-à-dire un logiciel complémentaire) qui peut être intégré dans divers environnements de développement, notamment Visual Studio Code (VSC), Atom et Eclipse. Actuellement, Visual Studio Code est l'EDI principal pris en charge par PlatformIO, et est probablement aussi le plus adopté par les développeurs professionnels.
En intégrant PlatformIO dans Visual Studio Code, les développeurs peuvent bénéficier de plusieurs fonctionnalités ; en effet, PlatformIO est conçu pour faciliter et améliorer le processus de développement de micrologiciels pour microcontrôleurs. Il supporte une vaste gamme de microcontrôleurs y compris les différentes versions d'Arduino ainsi que d'autres microcontrôleurs et des cartes basées sur ESP8266/ESP32.
L'une des caractéristiques distinctives de PlatformIO est sa compatibilité avec diverses plateformes, notamment Arduino, Espressif IoT Development Framework (ESP-IDF) et bien d'autres. Cela permet aux développeurs de choisir la plateforme la plus adaptée à leurs besoins, tout en utilisant le même EDI.
PlatformIO prend en charge plusieurs langages de programmation, notamment C, C++ et Python, et est compatible avec les bibliothèques conçues pour Arduino. Il simplifie grandement la gestion des dépendances des projets et des différentes versions des bibliothèques (développées par l'utilisateur ou par des tiers). Grâce à ses outils de compilation avancés, les développeurs peuvent aisément intégrer des bibliothèques externes à leurs projets sans se préoccuper des détails d'installation.
De plus, PlatformIO gère les versions des bibliothèques, renforçant ainsi la robustesse du processus de développement. L'EDI offre un support complet pour le débogage et fournit des outils avancés pour la surveillance et le contrôle des appareils pendant l'exécution du micrologiciel. En conclusion, PlatformIO offre un environnement unifié, flexible, intuitif et relativement simple à maîtriser, qui optimise le processus de développement et contribue à une gestion de projet plus efficace.
Dans ce guide, nous allons explorer comment développer et gérer un projet PlatformIO basé sur le microcontrôleur ESP32. Ce projet consistera à connecter un capteur DHT22, utilisé pour mesurer les valeurs instantanées de température et d'humidité ambiantes en temps reel. Nous verrons ensuite comment configurer le système pour afficher ces mesures en temps réel sur la console de PlatformIO.
Module ESP32
ESP32 est un microcontrôleur à basse consommation développé par Espressif Systems, connu pour sa polyvalence et sa puissance de calcul. Basé sur l'architecture Xtensa LX6 de Tensilica, l'ESP32 intègre plusieurs fonctionnalités avancées, le rendant idéal pour diverses applications dans l'Internet des objets (IoT) et l'informatique embarquée.
Les principales caractéristiques techniques de l'ESP32 sont les suivantes :
- Architecture double cœur : l'ESP32 intègre deux cœurs Xtensa LX6, qui permettent d'effectuer des opérations en parallèle, améliorant ainsi les performances globales du système.
- Fréquence d'horloge élevée : avec des fréquences d'horloge allant jusqu'à 240 MHz, l'ESP32 offre une puissance de traitement élevée pour gérer des applications complexes.
- Connectivité sans fil : avec Wifi et Bluetooth intégrés, il assure une communication fluide avec d'autres appareils et réseaux.
- Mémoire flash intégrée : L'ESP32 dispose d'une mémoire suffisante pour le chargement des micrologiciels et des données.
- Périphériques d'E/S nombreux et variés, tels que GPIO, UART, I2C, SPI et ports PWM, permettant une interaction aisée avec d'autres appareils.
- Unité de traitement du signal (DSP) : l'ESP32 est équipé d'un DSP qui améliore les capacités de traitement pour les applications audio et de traitement du signal.
- Mode basse consommation : prend en charge les modes basse consommation pour prolonger la durée de vie de la batterie dans les appareils alimentés par batterie (le fameux « deepsleep »).
- Environnement de développement open-source : Espressif supporte un environnement de développement open-source grâce à l'utilisation de frameworks tels qu'Arduino et PlatformIO, ce qui simplifie le processus de programmation et de développement.
- Sécurité : L'ESP32 intègre des fonctions de sécurité avancées, notamment le cryptage matériel, ce qui le rend adapté aux projets nécessitant un niveau de protection plus élevé.
Grâce à ces caractéristiques, l'ESP32 est largement utilisé pour développer des projets IoT, des capteurs intelligents, des dispositifs domotiques et bien plus encore. L'ESP32 est un processeur qui nécessite une partie électronique supplémentaire dont la fonction est de lui fournir l'alimentation électrique appropriée et de l'interfacer avec un port USB d'un ordinateur, afin de pouvoir le programmer (c'est-à-dire de transférer dans sa mémoire interne le micrologiciel qui sera écrit et compilé sur PlatformIO) et de communiquer avec lui via le port série (sur la console Serial Monitor de PlatformIO).
Comme le montre la figure A, il ne peut pas être utilisé immédiatement tel quel. Pour cela, il existe des petites cartes appelées NodeMCU qui comprennent, en plus du microprocesseur ESP32, l'électronique mentionnée ci-dessus. Ces cartes disposent de connecteurs permettant de les relier à l'environnement extérieur (capteurs, actionneurs et appareils divers).
Ce guide a été basé sur le dispositif NodeMCU ESP32 visible dans la figure B, qui montre clairement le microprocesseur, l'électronique périphérique et les connecteurs avec le monde extérieur.
Le capteur DHT22
Puisque nous allons l'utiliser dans ce mini-projet, explorons ce capteur, qui est bien connu des initiés. Le DHT22, également appelé AM2302, est un capteur numérique de température et d'humidité qui offre une solution fiable et précise pour la surveillance des conditions environnementales. Ce dispositif est largement utilisé dans les projets domotiques, la surveillance de l'environnement et les applications météorologiques. Le DHT22 mesure l'humidité relative à l'aide d'un capteur capacitif et la température avec une thermistance.
Voici quelques-unes de ses principales caractéristiques techniques :
- Précision et fiabilité : le DHT22 offre une grande précision dans la mesure de la température et de l'humidité.
- Large plage de mesure : le capteur peut détecter des températures comprises entre -40°C et +80°C et une humidité relative comprise entre 0 et 100%.
- Signal numérique : le DHT22 transmet directement des signaux numériques via une seule broche, ce qui simplifie l'interface avec les microcontrôleurs tels qu'Arduino ou ESP32, qui n'ont alors pas besoin d'acquérir et de numériser un signal analogique.
- Temps de réponse rapide : le capteur est connu pour son temps de réponse rapide d'environ 2 secondes.
- Haute résolution : il fournit des données avec une résolution de 0,1°C pour la température et de 0,1% pour l'humidité,permettant une grande précision des mesures.
- Haute immunité au bruit : grâce à sa technologie de mesure capacitive, le capteur est relativement insensible aux interférences externes.
L'interfaçage avec le DHT22 est généralement simple, nécessitant uniquement un microcontrôleur et une bibliothèque dédiée pour son utilisation.
Installation de Visual Studio Code et de PlatformIO
Comme mentionné précédemment, PlatformIO est un plugin pour l'EDI Visual Studio Code. Ainsi, la première étape consiste à installer cet EDI. Vous trouverez le lien direct vers la page de téléchargement à l'adresse indiquée. Comme le montre la figure 1, ce logiciel est disponible pour les principaux systèmes d'exploitation (Windows, diverses distributions de Linux, macOS). Après avoir téléchargé le fichier adapté à votre système d'exploitation, procédez à son installation.
Quelle que soit la version choisie, une page de bienvenue apparaît lors du premier lancement du programme. En fermant cette page, vous accéderez à la page principale de l'EDI. Sur la colonne de gauche, vous remarquerez plusieurs boutons, dont un marqué en rouge dans la figure 2. Celui-ci est utilisé pour rechercher et installer les plugins (aka extensions) dans VSC. En cliquant dessus, la fenêtre de recherche de la colonne de gauche s'ouvre.
Pour rechercher un plugin, il suffit d'entrer son nom dans la boîte de recherche en haut à gauche. En saisissant platformio le plugin apparaîtra dans la liste, il ne nous reste donc plus qu'à cliquer sur le bouton Install du plugin PlatformIO comme le montre la figure 3. L'installation prendra quelques minutes, après quoi la présence du plugin sera signalée par une nouvelle icône dans la colonne de gauche, visible sur l'image de la figure 4. À ce stade, PlatformIO est installé et prêt à être utilisé.
Création du projet sur PlatformIO
Tout d'abord, après avoir lancé VSC, nous devons cliquer sur l'icône PlatformIO. La page principale s'ouvre, où vous devrez cliquer sur le bouton Create New Project (figure 5). Une nouvelle page d'accueil s'ouvre (figure 6), et vous devrez cliquer sur le bouton + New Project. Cela lancera un assistant de projet simple qui nous demandera d'entrer le nom du projet, la plateforme et le framework utilisé, comme le montre la figure 7.
Le nom du projet peut être celui de votre choix (par exemple, testESP32), tandis que le choix du modèle de carte dépend de ce que vous possédez. En saisissant ESP32 dans le champ intitulé Board, vous verrez apparaître une liste de toutes les cartes basées sur ESP32 disponibles. Pour notre exemple, nous avons choisi la carte AZ-Delivery ESP-32 Dev Kit C V4. Comme framework, nous avons laissé l'entrée Arduino inchangée. La case Location est utilisée pour indiquer à PlatformIO si vous souhaitez utiliser le dossier par défaut comme espace de travail ou si vous préférez spécifier un dossier différent. Nous utilisons le dossier par défaut.
Le résultat de ces choix est illustré dans la figure 8. En cliquant sur le bouton Finish, le projet est créé. Après quelques secondes, l'écran présenté dans la figure 9 apparaît. PlatformIO affiche à gauche l'arborescence du projet, et dans l'espace de travail, le fichier platformio.ini (qui fait également partie du projet) est visible. Ce fichier regroupe les paramètres du projet, qui à ce stade, sont ceux définis uniquement lors de la configuration initiale avec l'assistant.
Dans l'arborescence du projet (à gauche), il y a quelques dossiers. L'un d'eux est nommé includes et est actuellement vide. Il regroupe tous les fichiers à inclure dans le projet (typiquement les fichiers .h ). Un autre dossier nommé src et contient le fichier main.cpp qui est le fichier principal du croquis dans lequel le programme sera écrit.
La figure 10 montre le contenu de ce fichier. Vous remarquerez la présence des deux fonctions principales utilisées dans les croquis Arduino apparaissent : setup et loop. Dans le système de fichiers, le projet apparaîtra organisé comme le montre la figure 11.
Remarque : Ce guide a été réalisé sous un système d'exploitation Linux. Il se peut que l'organisation des fichiers sous les systèmes Windows ou macOS diffère légèrement. Cependant, l'interface de PlatformIO reste identique, quel que soit le système d'exploitation utilisé.
Ajouter des bibliothèques au projet
L'ajout de bibliothèques au projet est une opération assez simple. Prenons l'exemple où nous souhaitons ajouter la bibliothèque DHT sensor library for ESP (utilisée pour lire les données transmises par le capteur de température et d'humidité DHT22). Pour ce faire, commençons par nous rendre dans la colonne de gauche de l'EDI et cliquons sur l'icône PlatformIO. Cela ouvrira la page principale de PlatformIO, où la section QUICK ACCESS devient accessible. Sélectionnez l'option Libraries ; un clic ici, ouvrira la fenêtre de recherche des bibliothèques, illustrée dans la figure 12.
En entrant "DHT22" dans la boîte de recherche, vous verrez apparaître plusieurs résultats. Sélectionnez la bibliothèque DHT sensor library for ESPx de Bernd Giesecke, comme illustré dans la figure 13. En cliquant dessus, vous accéderez à la page détaillée de la bibliothèque (figure 14). Pour installer la bibliothèque, cliquez sur le bouton Add to Project. Dans l'assistant qui s'ouvre ensuite, sélectionnez le projet qui vous intéresse (dans notre cas, testESP32), comme illustré dans la figure 15. Cliquez ensuite sur le bouton Add. PlatformIO chargera automatiquement la bibliothèque dans le dossier du projet et l'ajoutera également au fichier de configuration platformio.ini, comme le montre la figure 16.
Il s'agit de la procédure standard pour ajouter une bibliothèque au projet. Une alternative consiste à éditer directement le fichier platformio.ini en ajoutant l'entrée lib_deps = suivie de la liste des bibliothèques à ajouter. Dans notre cas, il aurait suffi d'ajouter la ligne :
lib_deps=beegee-tokyo/DHT sensor library for ESPx@^1.19
En conclusion, les bibliothèques peuvent être ajoutées avec la page de recherche ou, si vous connaissez le nom, avec le chemin, directement dans le fichier platformio.ini. Pour utiliser la bibliothèque qui vient d'être ajoutée au projet, il faudra l'inclure, par exemple, dans le fichier main.cpp, en ajoutant la ligne #include "DHTesp.h" immédiatement après la ligne #include "Arduino.h".
Dans le fichier platformio.ini, nous ajoutons également les lignes suivantes :
monitor_speed = 115200
upload_speed = 921600
pour ce qu'il apparaisse comme dans la figure 17. Ces deux commandes servent respectivement à régler la vitesse du port série pour la communication avec l'ordinateur et la vitesse à laquelle le croquis est chargé dans la mémoire du microcontrôleur.
Tester le projet
Pour tester le fonctionnement du projet nouvellement créé (donc vide), nous avons décidé de connecter le microcontrôleur à un capteur DHT22, de lire les valeurs mesurées de la température et de l'humidité ambiantes en temps réel, et de les afficher via le moniteur série de PlatformIO. En plus du microcontrôleur et du capteur, nous avons utilisé une résistance de 4,7 k, quelques fils de connexions, une plaque à essai pour monter le circuit simple visible sur la figure 18. Comme visible sur l'image, la taille du NodeMCU ESP32 ne permettait pas de le placer sur la plaque à essai, il a donc été laissé de côté.
Le croquis
Le listage 1 est contenu dans le fichier main.cpp. Le croquis commence par l'inclusion des bibliothèques nécessaires. Ensuite, l'objet dht de type DHTesp, qui est utilisé pour gérer le capteur, est instancié. Ensuite, le GPIO de l'ESP32 qui lira les données du capteur (dans notre cas 14) est assigné.
Les variables sont définies pour stocker les valeurs mesurées ainsi que pour gérer le timing des mesures. Dans ce cas, les lectures sont programmées pour avoir lieu toutes les 3 secondes. Il est conseillé de ne pas réduire cet intervalle, car le capteur DHT22 nécessite environ 2 secondes pour réaliser une mesure.
Ensuite, nous avons la fonction printData(), qui récupère les valeurs des variables de température et d'humidité et les affiche sur le moniteur série de PlatformIO, avec un formatage minimal. La fonction setup initialise le port série, utilisé pour transmettre les données vers le moniteur série, et connecte le GPIO 14 au capteur.
La fonction loop détecte, à intervalles définis par measureDelay en mms, les mesures réalisées par le capteur et les stocke dans les variables de température et d'humidité. Elle appelle ensuite la fonction printData() pour afficher les résultats. Ce processus se répète cycliquement. Pour charger le croquis sur la carte, il suffit de cliquer sur le bouton marqué du numéro 1 dans la figure 19.
Le croquis sera d'abord compilé puis, si aucune erreur de compilation ne survient, chargé dans la mémoire interne du microcontrôleur ESP32. Pour visualiser les résultats, il faut activer le moniteur série en cliquant sur le bouton indiqué par le numéro 2, toujours dans la figure 19. La figure 20 montre les résultats affichés dans le moniteur série.
Prêt pour le codage ?
Comme on peut le constater, la création d'un projet avec PlatformIO et l'ajout de bibliothèques se révèlent être des démarches assez simples et normalisées. PlatformIO combine une utilisation facile avec des fonctionnalités complètes, non abordées ici, car elles sortent du cadre de ce guide.
La gestion avancée des bibliothèques et l'installation aisée des dépendances simplifient encore le processus de développement, permettant de se concentrer davantage sur la création du projet, plutôt que sur la configuration de l'environnement. En outre, l'intégration native avec Arduino et sa large communauté de développeurs enrichissent la plateforme, offrant accès à un écosystème étendu de ressources et de solutions collaboratives.
L'utilisation de PlatformIO pour ESP32 constitue une étape importante vers un processus de développement plus efficace, organisé, évolutif et professionnel. La plateforme fournit les outils nécessaires pour explorer des idées innovantes, créer des conceptions complexes et accélérer le cycle de développement, rendant l'expérience de programmation plus intuitive et gratifiante.
Cet article (240370-04) paraît dans Elektor novembre/décembre 2024.
Notes de l'éditeur : Vous êtes intéressé par les projets ESP32, PlatformIO et autres ? Ce projet a été publié à l'origine dans Elettronica IN.
Discussion (0 commentaire(s))