Développer avec PlatformIO. Problèmes et solutions • Domotique et objets connectés à faire soi-même

Le développement et la mise au point de projets Arduino, ESP32, ESP8266 ou STM32 est un peu différent entre PlatformIO et l’IDE Arduino que l’on connait très bien. Dans cet article liste les principaux problèmes que l’on peut rencontrer ainsi que (quelques) solutions pour y remédier. Erreurs de compilation, problème d’installation des librairies, impossible de téléverser, menu PIO vide…

Vous connaissez d’autres problèmes avec PIO, n’hésitez pas à me signaler d’autres problèmes (et éventuellement la solution) dans les commentaires. Vous ferrez certainement des heureux !

Erreurs de compilation après migration d’un projet depuis l’IDE Arduino vers PlatformIO

La compilation du code C++ est légèrement différente de celle réalisée par l’IDE Arduino.

Lorsqu’on migre du code depuis l’IDE Arduino vers un projet PlatformIO, on peut rencontrer des problèmes de compilation que l’on n’avait pas avant.

La fonction existe dans le code mais génère une erreur lors du build

Si vous migrez le code source du projet MQ-2

vous allez obtenir ce message d’erreur à la première compilation

Building in release mode
Compiling .pio/build/uno/src/main.cpp.o
src/main.cpp: In function 'int MQGetGasPercentage(float, int)':
src/main.cpp:131:49: error: 'MQGetPercentage' was not declared in this scope
      return MQGetPercentage(rs_ro_ratio,LPGCurve);
                                                 ^
src/main.cpp:133:48: error: 'MQGetPercentage' was not declared in this scope
      return MQGetPercentage(rs_ro_ratio,COCurve);
                                                ^
src/main.cpp:135:51: error: 'MQGetPercentage' was not declared in this scope
      return MQGetPercentage(rs_ro_ratio,SmokeCurve);
                                                   ^
*** [.pio/build/uno/src/main.cpp.o] Error 1
============================== [FAILED] Took 1.16 seconds ==============================

On pourrait croire à une erreur dans le code mais en fait il n’en est rien. Le compilateur trouve une erreur car la méthode MQGetPercentage est appelée dans le code avant qu’elle ne soit déclarée.

Deux solutions dans ce cas

  • Conseillé  déclarer la méthode au début du programme. Ici par exemple, il suffira d’ajouter en début de programme
int MQGetPercentage(float rs_ro_ratio, float *pcurve)
  • Déconseillé  déplacer la méthode au début du programme pour qu’elles soient trouvées par le compilateur

Fatal error… No such file or directory, il manque une librairie

Si vous obtenez cette erreur lors de la compilation du projet Arduino

fatal error: xxx.h: No such file or directory

C’est qu’une librairie n’est pas installée

Building in release mode
Compiling .pio/build/d1_mini_lite/src/main.cpp.o
Compiling .pio/build/d1_mini_lite/lib887/ESP8266WiFi/ESP8266WiFiAP.cpp.o
src/main.cpp:4:17: fatal error: DHT.h: No such file or directory

*************************************************************
* Looking for DHT.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:DHT.h"
* Web  > https://platformio.org/lib/search?query=header:DHT.h
*
*************************************************************

Pour corriger ce problème, il faut déclarer manuellement les librairies au niveau du fichier platformio.ini du projet.

Tout est expliqué en détail dans ce tutoriel

platformio-ide upload not found, impossible de compiler ou téléverser (VSCode)

L’erreur platformio-ide upload not found survient lorsqu’on lance un build (compilation) ou un upload (téléverser) alors que le plugin de PlatformIO est encore en cours de démarrage sur VSCode. L’erreur doit aussi se produire sur d’autres éditeurs.

Ce n’est pas vraiment une erreur. Il suffit juste d’attendre le démarrage complet du plugin PIO avant de pouvoir compiler et / ou téléverser le code Arduino.

Le processus de démarrage se déroule comme ceci

Les extensions sont activées (Activating extensions…)

Le plugin PlatformIO pour VSCode est lancé et vérifie automatiquement s’il existe une mise à jour (Checking PlatformIO Core installation…)

Enfin l’index IntelliSense qui permet l’auto-completion est reconstruit, c’est l’opération la plus longue. Bien évidemment, la durée de l’opération va dépendre de la puissance de votre ordinateur.

Problème d’installation d’une librairie

PlatformIO se charge d’installer lui même les librairies indiquées par l’option lib_deps dans le fichier de configuration platformio.ini du projet

Si vous obtenez ce message d’erreur

[API] ConnectionError: HTTPSConnectionPool(host='api.registry.platformio.org', port=443): Max retries exceeded with url...

ou celui-ci

platformio (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available."))

PIO n’arrive pas à se connecter aux serveurs et installer la (les) librairie(s).

C’est probablement à cause d’une erreur liée à une librairie du Core de PlatformIO qui n’arrive pas à (ré)intinialiser la connexion.

Solution il n’y a pas grand chose à faire dans ce cas. Le mieux est de tout simplement redémarrer l’ordinateur !

Quoi faire en cas d’échec de compilation ?

Contrairement à l’IDE Arduino, PlatformIO propose une option qui permet de supprimer les fichiers temporaires créés lors de la compilation du fichier binaire.

En cas de difficulté pour téléverser ou si vous rencontrez des erreurs de compilation (et que votre code source ne retourne pas d’erreur), il suffit de supprimer le dossier de travail de PlatformIO à l’aide de l’option Clean.

Tous les builds et les fichiers temporaires sont supprimés d’un clic de souris !

Impossible de téléverser

PlatformIO n’arrive pas à se connecter à la carte de développement pour téléverser le fichier binaire.

Looking for upload port...
Auto-detected: /dev/cu.usbserial-1420
Uploading .pio/build/esp12e/firmware.bin
esptool.py v2.8
Serial port /dev/cu.usbserial-1420
Connecting........_____....._____....._____....._____....._____....._____....._____

A fatal error occurred: Failed to connect to ESP8266: Timed out waiting for packet header
*** [upload] Error 2
============================= [FAILED] Took 27.38 seconds ===================

Voici une liste des causes les plus courants et quelques remèdes possibles

Cause possible Remèdes à tester
La carte n’est pas connectée Vérifier que le connecteur (micro-USB par exemple) sur la carte de développement n’est pas défectueux. Il arrive (rarement) qu’il puisse être dessoudé.

Si d’autres cartes de développement sont branchées à l’ordinateur, déconnectez toutes les cartes.

Changer de port USB

Le module n’est pas en mode booltload Faire un reset

Débrancher / rebrancher / recommencer l’upload

Idem en changeant la câble USB

Idem sur un autre port USB

Effacer la mémoire flash

Vérifier si la carte est détectée dans les devices

Tester avec un autre module…si ça ne toujours pas après plusieurs tentatives, envisager de remplacer le module

Impossible de téléverser sur un ESP01

A chaque fois que l’on souhaite téléverser un projet sur l’ESP01, il est nécessaire de mettre celui-ci en Flash Mode (ou mode Boot Load).

Pour cela, il faut réaliser ce montage (ou un équivalent) qui peut vite devenir fastidieux.

Plus de détail en lisant cet article.

Je vous conseille plutôt d’opter pour un programmateur dédié au module ESP01. Le module combine une alimentation 3V3 et un convertisseur UART (port série) USB pour la communication.

Problème avec le moniteur série

Vous rencontrez des problèmes de communications ou vous n’arrivez pas à téléverser votre projet Arduino.

Voici une liste des principales causes et quelques remèdes possibles.

Cause possible Remèdes à tester
La carte n’est pas connectée

L’ESP01 n’est pas en Flash Mode

Vérifier que le connecteur (micro-USB par exemple) sur la carte de développement n’est pas défectueux. Il arrive (rarement) qu’il puisse être dessoudé.

Si d’autres cartes de développement sont branchées à l’ordinateur, déconnectez toutes les cartes.

Changer de port USB

Looking for upload port...
Auto-detected: /dev/cu.usbserial-1410
Uploading .pio/build/esp01_1m/firmware.bin
esptool.py v2.8
Serial port /dev/cu.usbserial-1410
Connecting........_____....._____....._____....._____....._____....._____....._____

A fatal error occurred: Failed to connect to ESP8266: Timed out waiting for packet header
*** [upload] Error 2
=========================== [FAILED] Took 13.47 seconds =========================
Le port série renvoi des caractères incompréhensibles Par défaut PlatformIO se connecte à 9600 bauds. Probablement que la vitesse spécifiée dans le programme est différente.

Trouvez la commande Serial.begin(vitesse) pour trouver la vitesse

Ajoutez l’option serial_speed = vitesse dans le fichier platformio.ini et téléverser de nouveau

rl␀l�r␂$␒�n␌␌␌�␌l�␌b|��␂␇␒�r␒bl␌b␄�nn␂lnn␒b␌b␜p�$b␎lrlp�n�

Mauvais affichage du Moniteur Série = mauvaise vitesse

Par défaut, le port série est configuré à 9600 bauds sur l’extension officielle. Jun Han a ajouté un paramètre permettant de définir la vitesse. Pour utiliser un vitesse différente, ouvrez le

Si vous utilisez le CLI de PlatformIO, ouvrez le Terminal et exécutez la commande suivante

pio device monitor -b 115200

Vous pouvez aussi spécifier la vitesse dans le fichier plaformio.ini à l’aide de l’option monitor_speed.

La barre d’outils de PlatformIO est vide

Si le menu Project Tasks de la barre d’outils de PlatformIO est vide

C’est que vous n’avez pas ouvert le projet dans le workspace de Visual Studio Code correctement. On a cette souvent cette erreur lorsqu’on ouvre un dossier contenant plusieurs projets.

Pour construire la liste des tâches (Project Tasks), PIO recherche un fichier platformio.ini à la racine du dossier. S’il n’en trouve pas, la barre d’outil reste vide même lorsqu’on ouvre un sous-dossier.

Deux solutions :

  • Ouvrir chaque projet individuellement  
  • Créer un fichier platformio.ini à la racine du dossier pour faire croire à PIO que c’est un projet. Ensuite, à chaque fois qu’on ouvre un projets, la liste des tâches est actualisée pour tenir compte de la configuration.
On ajoute un fichier platformio.ini à la racine des projets Le menu PIO est correctement construit

Mises à jour

19/11/2020 Erreur platformio-ide upload not found

14/09/2020 Publication de l’article

Avez-vous aimé cet article ?