Développement Arduino avec VSCode et programmation ISP
J’ai travaillé sur plusieurs projets Arduino au fil des ans, ce qui m’a amenée à mettre en place un bon workflow pour écrire mon code dans Visual Studio Code plutôt que dans l’IDE Arduino, puis le programmer directement sur le microcontrôleur à l’aide d’un connecteur ISP (in-circuit programming).
Pourquoi Visual Studio Code?
L’IDE Arduino fait le travail pour des petits projets, mais il lui manque plusieurs outils de productivité auxquels je suis habituée dans Visual Studio Code, comme l’autocomplétion ou l’intégration avec git.
L’extension Arduino Community Edition (un fork de l’ancienne extension Arduino de Microsoft, maintenant abandonnée) fait l’essentiel du travail pour un workflow Arduino standard. On y retrouve des menus dans la barre de statut pour choisir le type de carte de développement et le programmeur, un peu comme dans l’IDE Arduino, et il est aussi possible de télécharger des librairies directement depuis VS Code.
La seule chose à ajuster, c’est l’autocomplétion : lorsqu’on importe une librairie externe, il faut parfois modifier les chemins dans le champ includePath du fichier c_cpp_properties.json généré par l’extension, afin qu’ils pointent vers le dossier où se trouve la librairie.
Astuce : si vous aviez une ancienne version de l’extension, celle-ci utilisait Arduino IDE 2.0, alors que la version plus récente utilise une version intégrée d’Arduino CLI. Quand j’ai mis à jour mon Arduino IDE vers la version 3.0 et ensuite l’extension, celle-ci a cessé de fonctionner parce qu’elle pointait encore vers l’ancienne version. Il faut alors modifier les paramètres de l’extension pour utiliser l’Arduino CLI intégré.
Pourquoi ISP (in-circuit programming)?
Avec Arduino, j’aime bien passer rapidement à un PCB sur mesure une fois que le design de base est validé. C’est plus stable qu’un montage rempli de fils, et ça rapproche tout de suite le prototype de la réalité du produit final.
À ce stade, programmer via ISP est souvent plus simple que d’ajouter un connecteur USB, puisqu’il n’y a pas besoin d'ajouter une puce pour convertir le USB en format port série: c'est seulement un connecteur de plus sur le PCB à la place. L’expérience de débogage est un peu moins conviviale, mais pour des projets simples c'est suffisant. On peut toujours exposer des pins supplémentaires au besoin, surtout si le projet n’a pas d’écran pour afficher de l’information de debug.
De mon côté, quand je conçois un prototype, je m’assure toujours d’exposer au minimum les pins I2C et série, au cas où j’en aurais besoin plus tard lorsque le design évolue. Elles peuvent être retirées dans une version ultérieure, une fois le design stabilisé et prêt pour une optimisation en vue d’une production à plus grande échelle.

Programmation avec ISP
La programmation via ISP est un peu moins transparente que celle d’une carte Arduino de développement. VS Code ne supporte que la programmation via port série, qui est la méthode standard pour les cartes de développement avec un connecteur USB.
J’ai aussi essayé d’utiliser l’IDE Arduino uniquement pour la programmation, en parallèle avec VS Code pour l’édition du code, mais l’IDE Arduino ne détecte pas les fichiers modifiés. Il fallait recharger le projet au complet à chaque fois, ce qui devenait rapidement trop lourd.
Pour contourner le problème, j’ai installé Arduino CLI, ce qui permet de tout faire directement depuis le terminal de VS Code.
La toute première fois qu’on utilise un microcontrôleur, il faut programmer le bootloader avec la commande suivante. Cette étape est généralement déjà faite si vous achetez un Arduino, mais pas si vous utilisez vos propres microcontrôleurs.
Dans mon cas, j’utilise le même microcontrôleur qu’un Arduino Uno, donc j’indique ce modèle comme carte cible, et j’utilise un programmeur USBTinyISP pour la programmation. Vous pouvez évidemment remplacer ces valeurs par celles correspondant à votre matériel (Arduino Uno est incluse par défaut, mais certaines cartes doivent être installées séparément).
arduino-cli burn-bootloader --fqbn arduino:avr:uno -P usbtinyisp -vUne fois le bootloader installé, j’utilise les deux commandes suivantes pour compiler le sketch, puis le télécharger sur le microcontrôleur. J’aime utiliser le mode verbose afin de voir ce qui se passe pendant l’exécution. Assurez-vous d’avoir sauvegardé vos fichiers avant de compiler pour être certain d’envoyer la version la plus récente.
arduino-cli compile --fqbn arduino:avr:uno -v
arduino-cli upload --fqbn arduino:avr:uno --programmer usbtinyisp -vVoici donc un workflow simple pour développer dans Visual Studio Code et programmer vos microcontrôleurs via ISP.