Développer avec PlatformIO. Problèmes et solutions

Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

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.

A LIRE AUSSI :
Migrer un projet de l'IDE Arduino vers PlatformIO. ESP32, ESP8266 ou autre

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

A LIRE AUSSI :
MQ-2. Débuter avec le détecteur de gaz et fumées avec du code Arduino. Calibration, concentration en ppm

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

A LIRE AUSSI :
Platformio.ini, astuces et paramètres utiles. data_dir, monitor_speed, upload_port...

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.

vscode platformio-ide upload not found error pio

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…)

vscode platformio activating extensions pio

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

vscode platformio checking pio 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.

vscode platformio intellisense index rebuild

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 !

Nettoyer le dossier de compilation de PIO

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.

ESP-01 ESP8266 cablage wiring flashing mode_

 

Plus de détail en lisant cet article.

A LIRE AUSSI :
ESP-01. Comment réinstaller le firmware d'origine NodeMCU (ESP8266)

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.

Attention, tous les modèles n’intègrent pas un sélecteur permettant de mettre l’ESP01 en Flash Mode.

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.

platformio visual studio code vscode package

La barre d’outils de PlatformIO est vide

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

Le menu Project Task 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
add fake platformio ini file folder pio fake platformio ini file menu correctly build

Mises à jour

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

14/09/2020 Publication de l’article

Avez-vous aimé cet article ?
[Total: 0 Moyenne: 0]

Vous rencontrez un problème avec ce sujet ?

Peut-être que quelqu’un a déjà trouvé la solution, visitez le forum avant de poser votre question

Vous avez aimé ce projet ? Ne manquez plus aucun projet en vous abonnant à notre lettre d’information hebdomadaire!

2 Commentaires
  1. Bonjour,

    Je rencontre un problème avec un projet platformio.
    J’ai voulu ‘éclater’ mon programme principal pour avoir du code plus lisible.

    Dans le dossier src de PIO, j’ai mon main.cpp, un fichier config.h, et les nouveaux fichiers OTGWhttp.h et OTGWhttp.cpp
    En tete de main.cpp, j’ai un include “config.h” et un include “OTGWhttp.h”

    Pour le moment, OTGWhttp.h expose 2 fonctions : void setupHttp(void) et void setupHttp(void); elles sont bien implémentées dans OTGWhttp.cpp
    Dans l’IDE PIO, il n’y a pas d’erreur de référence.

    Problème : quand je lance le build, PIO compile bien main.cpp, mais ne compile pas OTGWhttp.cpp.
    Donc, au moment du link, il y a ces erreurs :
    Linking .pio\build\nodemcuv2\firmware.elf
    …\src\main.cpp.o: undefined reference to setupHttp()'
    ...\src\main.cpp.o: in function
    setup’: main.cpp: undefined reference to setupHttp()'
    ...\src\main.cpp.o: undefined reference to
    http_handleClient()’
    …\src\main.cpp.o:(.text.loop+0x46): undefined reference to `http_handleClient()’

    Voici mon fichier platformio.ini :
    [env:nodemcuv2]
    platform = espressif8266
    board = nodemcuv2
    framework = arduino

    Comment faire pour que PIO prenne en compte le fichier OTGWhttp.cpp ?

    Merci

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Sondage

Vous avez la parole. Quels sont les thèmes qui vous intéressent en 2021.

Résultats du sondage début janvier.

Merci pour votre confiance. Prenez soin de vous et passez de bonnes fêtes !

Jusqu’à 8 réponses possibles. Vous pouvez faire d’autres propositions.

Les thèmes qui vous intéressent en 2021
  • Proposer une autre réponse
Publicité
Partager
Partager sur facebook
Partager sur twitter
Partager sur linkedin
Partager sur pinterest
Partager sur email
Partager sur telegram

Table des matières

S'équiper
À Lire aussi
Publicité
Domotique et objets connectés à faire soi-même
Vous avez aimé ce tutoriel

Ne manquez plus les prochains projets

Recevez chaque semaine le récapitulatif des tutoriels et projets.

Vous pouvez vous désabonner à tout moment.