Comment programmer une carte Raspberry Pi Pico et son RP2040, par l'exemple

Comment programmer une carte Raspberry Pi Pico et son RP2040, par l’exemple

Vous êtes plutôt C(++) ou MicroPython ?

Avatar de l'auteur
David Legrand

Publié dans

Hardware

18/02/2021 5 minutes
16

Comment programmer une carte Raspberry Pi Pico et son RP2040, par l'exemple

Fin janvier, la fondation Raspberry Pi annonçait un produit d'un nouveau genre : le micro-contrôleur RP2040. Il était intégré à une première carte maison, la Pico. Ici, pas de distribution Linux à installer, la programmation se veut plus directe. On vous explique comment cela fonctionne.

Les Raspberry Pi font partie de la famille des SBC (Single Board Computer), des ordinateurs aux caractéristiques minimales, reposant sur un SoC en général sur architecture ARM, au fonctionnement assez classique avec son système d'exploitation et des applications. Chacun peut en développer via différents langages de programmation. 

Avec un micro-contrôleur c'est différent, puisqu'il intègre tout ce qui fait un ordinateur, même quelques centaines de Ko de mémoire et parfois du stockage. Visant une très faible empreinte énergétique et des usages basiques, leur système l'est aussi. Il faut donc les programmer directement, de manière plus ou moins simple selon les cas.

Le RP2040 de la fondation Raspberry Pi et la carte Pico laissent pour cela accès à un port micro USB et 40 broches GPIO. Tout a néanmoins été fait pour faciliter une approche par les débutants. Voici comment entrer en matière.

Raspberry Pi RP2040
Le RP2040 intègre 2x cœurs Cortex ARM M0+ et 264 Ko de mémoire, la Pico ajoute 2 Mo de stockage via le bus QSPI

Langage C(++), binaires et simple transfert USB pour commencer

La première possibilité est une chaîne d'outils C(++) fournie sous la forme d'un script d'installation sous Linux, nécessitant une compilation via CMake avant l'envoi d'un fichier au RP2040 au format UF2. Développé par Microsoft, ce dernier permet la programmation d'un micro-contrôleur depuis un fichier envoyé via USB MSC (Mass Storage Class).

Sur son site dédié à la carte Pico, la fondation livre une documentation complète pour ceux qui voudraient sauter le pas. Les outils Arduino, appréciés car simple à prendre en main et connus des bidouilleurs, seront prochainement adaptés au RP2040. Une carte Arduino Nano Connect l'utilisant, avec Wi-Fi,  a d'ailleurs été annoncée.

Quelques exemples clé en main sont livrés pour ceux voulant un premier aperçu. Ainsi, il suffit de télécharger ce fichier UF2 et de connecter la Pico à un ordinateur. La première fois elle sera reconnue comme un périphérique de stockage USB. Sinon, il faut presser le bouton BOOTSEL au moment de la connexion pour que ce soit le cas.

Raspberry Pi Pico
La composition de la Raspberry Pi Pico, sa diode (broche 25) et le bouton BOOTSEL

Placez le fichier UF2 dans le dossier racine de la carte, elle le détectera puis redémarrera afin de l'initialiser. Dans l'exemple donné, il permet de faire clignoter la diode intégrée de la carte (broche 25) à un rythme prédéfini. Le code source du projet est, comme d'autres, distribué dans ce dépôt GitHub

Un second exemple hello_world.uf2 permet, une fois le fichier en place, d'envoyer le classique « Hello, world! » via le protocole série auquel on accède en USB (voir le code source), sous Linux via le périphérique virtuel /dev/ttyACM0 (possible via WSL). Dans une distribution Linux dérivée de Debian, il est conseillé d'utiliser Minicom :

sudo apt install minicom
minicom -b 115200 -o -D /dev/ttyACM0

MicroPython pour se simplifier la vie

Si vous ne voulez pas vous mettre à C(++) ou installer le SDK dédié, vous pouvez vous rabattre sur une implémentation minimale de Python pouvant être utilisée avec le RP2040 : MicroPython. Il faut pour cela télécharger ce fichier UF2 puis le placer dans le micro-contrôleur.

MicroPython sera alors directement exploitable via le protocole série. Il utilise pour cela un mécanisme nommé REPL (Read Evaluate Print Loop) consistant à attendre que l'utilisateur envoie des commandes à exécuter. Là aussi, Linux est recommandé, même si Minicom est installable depuis macOS comme indiqué dans la documentation.

Il suffit ensuite de taper la commande suivante :

minicom -o -D /dev/ttyACM0

On accède alors à l'interpréteur de MicroPython où l'on peut par exemple allumer et éteindre la LED :

from machine import Pin
led = Pin(25, Pin.OUT)
led.value(1)
led.value(0)

On peut également envoyer un script complet à travers un fichier .py, de manière plus classique. Mais si c'est ce que vous souhaitez faire, il y a une solution plus graphique et simple à prendre en main. 

Thonny comme IDE multiplateforme

C'est là qu'intervient Thonny, un environnement de développement Python disponible pour Linux, macOS et Windows, en français. C'est celui fourni par défaut au sein de Raspberry Pi OS. Il nécessitait au départ un plugin pour se connecter à la carte Pico, ce n'est plus le cas depuis la version 3.3.3 de l'outil qui le propose nativement.

Dans ses options, il faut sélectionner l'interpréteur MicroPython pour Raspberry Pi Pico et son RP2040. Vous serez alors invité à démarrer la carte en mode BOOTSEL pour y placer la dernière version compatible du firmware. Ensuite, vous pourrez soit accéder à l'interpréteur de commandes, soit développer un script puis l'exécuter.

Là aussi les exemples et possibilités sont nombreux. MicroPython vous permet même de profiter des différents protocoles et E/S du RP2040 comme ses broches GPIO, PWM, I2C, UART, etc. Sa documentation complète se trouve par ici. N'oubliez d'ailleurs pas que cette puce est dotée de deux cœurs, qui peuvent être exploités en parallèle

Thonny Raspberry Pico Le même programme exécuté sous la forme d'un script (en haut) ou commande par commande (en bas)

Écrit par David Legrand

Tiens, en parlant de ça :

Sommaire de l'article

Introduction

Langage C(++), binaires et simple transfert USB pour commencer

MicroPython pour se simplifier la vie

Thonny comme IDE multiplateforme

Fermer

Commentaires (16)


Votre tournure de phrase peut laisser penser que le script d’installation ou cmake serait l’œuvre de microsoft, ce qui n’est bien entendu pas le cas : je me permets donc de préciser que seul le format UF2 est ici la création de Redmond.
Et là la question logique qui se pose est de savoir si l’UF2 a été libéré ou non, parce que si ce n’est pas le cas, et que demain microsoft demande des royalties aux usagers, ou commence à trier ceux qui ont le droit ou non d’utiliser SON format, je vous laisse imaginer les conséquences.


J’ai apporté une modification pour éviter toute mauvaise lecture :chinois: Il suffit de cliquer sur le lien pour voir que l’UF2 est sous licence MIT qui est plutôt considérée comme permissive (comme la plupart des solutions du genre développée par MS).


La question de hansi est pertinente. La licence MIT ne protège pas des brevets (comme beaucoup de licences open source d’ailleurs).
Donc MS ou n’importe quelle autre boite peut demander des royalties si le code “viole” un de ses brevets.


Je n’ai rien lu allant dans ce sens, et je ne vois pas ce qui pourrait être soumis à royalties/brevet dans l’utilisation d’un tel format, mais si vous avez des infos pertinentes allant dans le sens d’une telle analyse concernant l’UF2 n’hésitez pas à le partager :chinois:


circuitpython le fork micropython d’adafruit a été porté sur le pico aussi
https://circuitpython.org/board/raspberry_pi_pico/


Et quelques utilisations (émulation) peut-être plus complètement basiques :
https://www.youtube.com/channel/UCu2LJxnuCy-BrSUNJuNp5QA/videos (BBC Micro et ZX Spectrum, …)


Perso, j’aime bien picocom pour parler aux ports série. Minicom c’est un peu overkill :)


Le python tourne directement sur le raspberry ou il y’a quand même une compilation ?



fofo9012 a dit:


Le python […] compilation ?




:keskidit:



fofo9012 a dit:


Le python tourne directement sur le raspberry ou il y’a quand même une compilation ?




Heu …. Python est un langage interprété, pas compilé …


Oui mais c’est du C plus du Python et pas vraiment le sujet ici ;)


C’est pas la peine de bâcher hein :)
Techniquement n’importe quel langage peut-être compilé !



Python est bon exemple mon disque dur est rempli de “*.pyc” qui à ma connaissance sont le résultat de la compilation des sources python. Tout python est compilé en .pyc, si la source a changé depuis la dernière compilation le pyc est régénéré à a volée puis exécuter, sinon le pyc est exécuté directement.
C’est exactement pareil en java entre “.java” “.class” (sauf qu’il faut explicitement compiler avec “javac” alors que python le fait tout seul à l’exécution).



Ma question était sur le déploiement de python sur de l’embedded. Faut-il “préparer” (pour ne pas employer le verbe polémique) les sources “.py” avant de les déployer sur le rasperberry ?
Ou on installe micropython, la source “.py” et il se charge “d’interpreter” les sources ?


Non, sinon ça aurait été précisé dans l’article


David, ton article est très bien écrit et démystifie bien le sujet et ça me donne vraiment envie d’essayer de jouer avec ça. Merci pour ça !



Par contre, comme la dernière fois que j’ai fait de l’électronique, c’était il y a bien 15 ans en cours de techno en 3eme, j’ai absolument aucun outil / composant pour m’amuser. J’ai même pas de fer à souder, c’est dire si ma vie est triste. Quelqu’un a une bonne référence de “kit” complet pour commencer à jouer avec ça ?


regarde du côte des kits pour Arduino, tu devrais trouver ton bonheur selon ce que tu veux faire et ton budget :chinois: