ESP32, ESP-IDF, CMake & CLion

Cela fait un moment que je travaille avec les processeurs ESP8266 et ESP32. Jusque maintenant, j’utilisais par le framework Arduino, surtout par facilité : il fournit pas mal de services et de librairies me permettant d’aller droit au but et d’écrire rapidement mon propre code.

Mais j’aime bien aller au fond des choses, me rapprocher du métal, des transistors, des périphériques et des registres. Pour cela, Espressif fournit un SDK qui semble bien documenté, et pour lequel on trouve énormément de ressources en lignes.

Ce framework, nommé ESP-IDF (« Espressif IoT Development Framework ») fournit des toolchains, API et outils permettant le développement d’applications pour les processeurs ESP32. Le framework Arduino intègre, emballe, ce SDK pour fournir un API d’un peu plus haut niveau, et surtout compatible pour d’autres plateformes.

Losque j’ai installé l’IDF, quelle ne fut pas ma (bonne) surprise de trouver des fichiers CMake ?! CMake est un outil opensource permettant de gérer le processus de build d’un projet, notamment des projets C++. Et CMake est supporté nativement par mon IDE préféré : CLion.

Du coup, il devrait être possible de créer, éditer, compiler et exécuter un projet utilisant l’ESP-IDF dans CLion, non? C’est ce que nous allons voir (TL;DR : la réponse est ‘oui’!).

Installation de ESP-IDF

Je ne vais pas rentrer dans les détails, tout cela est très bien expliqué dans la documentation officielle. Toute une section est consacrée à l’utilisation du SDK via CMake (toujours en ‘preview’ dans la version 3.3 et +, et deviendra l’option par défaut à partir de la version 4.0). Pour info, j’ai effectué le git clone sur la branche master, et j’ai obtenu la version suivante:

v3.3-beta1-177-g456efd3d5

Ouvrir un projet CMake ESP-IDF avec CLion

En fait, une fois l’installation de ESP-IDF terminée, c’est très simple d’ouvrir un projet CMake dans CLion, car les exemples fournit avec l’IDF sont déjà compatibles.

Nous pouvons par exemple partir du projet « hello_world » fournit avec les sources de l’IDF (<IDF_PATH>/examples/get-started/hello_world). Il suffit de copier ce répertoire dans le répertoire où vous avez décompressé la toolchain et l’IDF (la documentation préconise d’utilier le répertoire /home/<vous>/esp). Dans mon cas:

$ cp -R ~/esp/esp-idf/examples/get-started/hello_world ~/esp/

Démarrez ensuite CLion et ouvrez le projet (File -> Open… et sélectionnez soit le répertoire du projet (~/esp/hello_world), soit le fichier CMake principal (~/esp/hello_world/CMakeLists.txt).

CLion va lancer l’analyse du projet par CMake. Malheureusement, dans mon cas, cela n’a pas fonctionné du premier, car CMake ne trouvait pas les répertoires de l’IDF et de la toolchain, malgré le fait que les variables d’environnement étaient bien définies.

La solution que j’ai mise en place consiste à définir ces variables d’environnement dans le projet CLion, via File -> Settings -> Build, Execution, Deployment -> CMake -> Environment (remplacez /home/jf/esp par le répertoire d’installation de l’IDF et de la toolchain) :

  • PATH = /home/jf/esp/esp-idf/tools:/home/jf/esp/xtensa-esp32-elf/bin
  • IDF_PATH = /home/jf/esp/esp-idf

Après un petit « Clear cache and reload CMake project », CLion devrait avoir détecté toutes les targets nécessaires pour compiler le projet et envoyer le binaire dans votre ESP:

On retrouve dans la liste des targets l’équivalent des target ‘Makefile’ de l’IDF : app, flash,… ‘Builder’ la target flash, par exemple, va recompiler toute l’application et l’uploader dans la mémoire du MCU.

Compiler et uploader

Il s’agit ensuite d’utiliser ces targets pour compiler et envoyer le binaires dans votre ESP32. Petit détail: ces targets ne fonctionne qu’avec le bouton ‘Build‘ et non avec le bouton ‘Run’. En effet, il n’est pas possible d’exécuter le binaire destiné à fonctionner sur l’ESP. Ces targets sont exécutées via le bouton ‘Build’ et appellent en fait les scripts de l’IDF pour faire tout le boulot.

Aller plus loin

Il devrait être possible de ne pas devoir redéfinir les variables d’environnement dans CLion. J’ai peut-être fais une erreur lors de la définition des variables, il ne me reste qu’à trouver ce qui cloche.

Concernant le projet CMake, j’ai trouvé un autre exemples dans la liste des exemples fournit par l’IDF (IDF_PATH/examples/build_system/cmake, qui ont l’air d’aller plus loin, mais je n’ai pas encore eu le temps de m’y intéresser).

N’hésitez pas à partager vos découvertes concernant l’intégration de CMake dans l’IDF!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *