esp-idf vs arduino,
Contexte#
J’ai récemment acheté un esp32-c6 pour faire un petit projet maison, en utilisant quelques capteurs et un servomoteur. J’avais déjà eu quelques expériences avec des esp32, en utilisant l’IDE arduino. Avec le nouveau modèle que j’ai prit, j’ai vu que les outils esp-idf étaient bien plus puissant que l’IDE avec lequel j’avais l’habitude de travailler. J’ai donc décidé de tester tout ça.
Galère de l’esp-idf#
Dur départ#
Pour commencer, il fallait installer l’installateur des outils, et c’est la que la merde à commencer. Déjà, il n’existe pas s’installateur dans un format simplement utilisable sur les distrubutions linux basé sur arch (maudit système de puriste), par chance un format appimage existe sur le site officiel. Ensuite, certaines dépendances manquaient pour l’installation. Après avoir rajouté tout ça, les plusieurs giga d’outillage ont enfin pu s’installer. J’ai aussi décider de directement passer par l’extension officielle sur codium, malgré l’existance d’un format ligne de commande, en partant du principe que la majorité des forums allaient se baser comme d’habitude sur l’interface visuelle. Jusqu’à là, une installation un peu boîteuse, mais uniquement par ma faute. Pour ma défense, je faisais ça en tranche de 15 minutes pendant mes pauses entre des révisions d’examen, ma concentration n’était peut-être pas totalement là.
le mauvais mal oculaire#
C’est maintenant que commence vraiment le calvaire de l’esp-idf, en tout cas pour un débutant en systèmes embarqués comme moi. Pour commencer, j’ai décider de suivre un des projets exemples directement donnés par l’extension : l’allumage de la LED intégrée à la puce ESP. En gros, ce projet est le hello world le plus basique qui puisse exister pour ce genre de puce. j’ai donc copié le projet, configuré les bonnes entrés de la puce pour connecter la LED, compilé et flashé. C’est à ce moment que j’ai découvert 2 choses, la LED ne s’allume pas, et le code est beaucoup plus grand que ce à quoi je m’attendais. En soit, des fonctionnalités tierces ont été rajoutés à ce programme pour contrôler d’autres types de lumière, comme des bandes de LED, donc la taille n’est peut-être pas très représentative. Mais il reste quand même le problème de la LED qui ne s’allume pas. Après quelques longues minutes à manger de la documentation et des discussions de forum, je pars du principe que ma LED intégrée est défectueuse, peut-être pour ne pas avoir à visiter la documentation affreuse plus longtemps. Bref, je décide de tester mes capteurs, deux capteurs de mouvement classiques. Je décide d’ouvrir le projet exemple montrant comment intéragir avec les bornes GPIO de la puce pour contrôler les capteurs et … bordel. Je fais quelques petits changements pour lier les bonnes bornes, je rajoute quelques print pour voir les valeurs de mes capteurs et après m’être désinfecté la rétine devant l’horrible documentation, je lis les valeurs de mes deux capteurs. Miracle. Je commence donc la même méthode pour connecter mon petit servomoteur, je découvre le projet d’exemple pour les servo, plus long que certains de mes projets à l’uni. Je frôle la cécité en traversant la documentation pour les ondes PWM pour gèrer la position du servo, et de nouveau j’arrive à faire tourner mon programme “sans trop de problème”. Tout à l’air de bien aller jusqu’à là, mais je dois encore lier le tout pour que mon petit projet fonctionne comme prévu. Je reprend donc mon projet test des capteurs, je copie-colle le code du projet servo, je vérifie que toutes les librairies nécessaires soient là, je compile. ESP-IDF ne reconnait plus la librairie du servo, et après un passage dans la documentation qui va sûrement me faire aller chez l’ophtalmologue dans les prochaines semaines, je ne trouve pas d’information utile. Je décide donc de faire l’inverse, partir du projet test du servo, y copier le code des capteurs (ce qui donne exactement le même code que l’essai précedent), je compile, et cette fois tout est reconnu. Je flash donc le programme sur la puce. C’est tristement à ce moment que je découvre que ni mes capteurs ni mon servo ne font ce qu’ils étaient capable de faire juste avant. J’en ai marre.
le bon mal oculaire#
Après les quelques heures de barbottage avec l’ESP-IDF, ma patience rend finalement l’âme. J’hésite entre ranger le projet dans mon tiroir, où il rejoindra la pile gigantesque de projets non finis, ou bien rapidement installer l’IDE arduino que j’avais déjà tester par le passer. Par fierté (et aussi parce que j’ai quand même du payer la puce et les composants), j’installe vite l’IDE, ajoute en quelques secondes les librairies qu’il me faut, et lance le projet exemple pour allumer la LED intégrée que je pensais défectueuse. Pendant quelques instants, j’ai cru me retrouver devant l’affreuse documentation ESP-IDF, alors que je regardais la LED de mon ESP32 briller à quelques centimêtres de mes yeux. Sans même réfléchir, je programme mon petit programme avec les capteurs et le servo, le compile et flash, et découvre qu’en 2 minutes et 6 lignes de code, j’avais pu accomplir ce que plusieurs heures et centaines de lignes sur ESP-IDF ne m’avait pas permit de faire. Maintenant que tout fonctionne, il me reste encore à apprendre à faire de la modélisation de pièce pour m’imprimer un petit boîtier pour tout ça, en espérant que la documentation du logiciel que je vais choisir sera meilleure.