Prise en main du Raspberry Pi Pico

Prise en main du Raspberry Pi Pico

La fondation Raspberry Pi qui a développé la fameuse carte de développement éponyme fait son entrée très remarquée dans le monde des micro contrôleurs avec sa nouvelle carte : le Raspberry Pi Pico. Annoncé à 4$, le Pico est donc un module comme un Arduino ou un nodeMCU équipé d'un micro contrôleur maison : le SoC RP2040 basé sur un ARM Cortex M0+ double coeur cadencé à 133 MHz.

La vraie annonce derrière le Pico c'est son SoC. En effet la fondation met la documentation à disposition de tout le monde et s'est même trouvé des partenaires pour utiliser son micro-contrôleur dans les solutions "concurrentes" : Arduino propose l'Arduino Nano RP2040 Connect, Adafruit propose le Feather RP2040 et le minuscule ItsyBits RP2040, Sparkfun s'y met aussi avec le SparkFun Thing Plus - RP2040 et deux autres modèles... Tout le monde y gagne : utiliser la même base permet de réduire les coûts, agrandir la communauté et faciliter la création de librairies. La documentation complète en accès libre permet l'accessibilité au plus grand nombre.

Les schematics sont disponibles sur le site de la fondation

La question qui m'a été posée quand je me suis précipité sur le Pico à été : "Mais il fait quoi de plus qu'un Raspberry Pi Zéro à 5$ ?". Mis à part leur taille, ce n'est pas tout à fait comparable. Un Pi Zéro est un nano-ordinateur qui a besoin d'un système d'exploitation et de plusieurs Watt pour fonctionner alors qu'un Pico est un micro-contrôleur qui est conçu pour faire démarrer son script quelques milli-secondes après la mise sous tension et qui sait se satisfaire de 0,7W en pleine charge (il est aussi possible de le passer en sommeil profond, pour réduire encore plus la consommation). Bien sûr, on peut faire tourner les scripts du Pico sur un Pi traditionnel, mais c'est comme vouloir écraser un moustique avec un missile sol-air. Le but d'un micro-contrôleur est de répondre à un besoin précis, on pourra même utiliser un Pico branché sur un Raspberry Pi 0/1/2/3/4 et bénéficier de ses entrées analogiques pour faire un oscilloscope par exemple !

On peut voir le Pico comme un concurrent des solutions que proposent Arduino et Espressif. Avec son port micro-USB, son SoC dual-core cadencé à 133MHz, ses 264KB de RAM et 2MB de mémoire flash, ses 26 GPIO / 2 SPI / 2 I2C / 2 ports série UART / 16 cannaux PWM, sa prise en charge de l'USB 1.1 OTG, son mode deep-sleep, son capteur de température et son horloge intégrée on est proche des prestations que peuvent fournir un  ESP8266 ou un Arduino Nano. Le RP2040 supporte le C et le MicroPython qui est une version de Python dédiée aux micro-contrôleurs. Personnellement ça me rend joie !

Des I/O complètes

Les dimensions de la carte restent cohérentes face à la concurrence, elle est plus grosse qu'un Arduino Nano mais plus complète niveau I/O, et on est plus petit qu'un ESP32.

Arduino Nano / ESP8266 / RPi Pico / ESP32

Il faudra juste souder soit même les headers pour pouvoir l'installer sur une plaque de prototypage.

Son empatement est adapté pour les breadboards de prototypage contrairement à l'ESP32 trop large. Une LED est intégrée et reliée à la Pin 25.

Une autre très bonne nouvelle est le support du multi-threading, qui est une plaie sur Arduino mais qui devient beaucoup plus accessible ici avec le SoC dual-core et des fonctionnalités déjà intégrés dans MicroPython.

Mais trève de blabla, j'ai reçu le mien ce weekend donc place à la démo !

Ce qui est appréciable c'est que le Pico est reconnu comme un stockage de masse USB par l'ordinateur, l'installation des firmware est donc facilité et ne necessite aucune compétence particulière, il suffit de faire glisser le firmware dans le navigateur de fichiers. Il suffit d'appuyer sur l'unique boutton "BOOTSEL" tout en branchant le câble micro-USB pour passer en stockage USB.

Le fichier INDEX.HTM redirige directement sur le site de la fondation, et le INFO_UF2.TXT est un fichier texte verrouillé qui nous indique la version du bootloader et le modèle de la carte.

On retrouve sur le site la procédure à suivre pour télécharger le firmware et le glisser-déposer à la racine du Pico. Une fois que le fichier "pico_micropython_20210121.uf2" est copié (si vous voulez coder en MicroPython, ce qui est mon cas), la carte va redémarrer et est prête à l'emploi. On peut installer un IDE comme Thonny qui est recommandé par la fondation et qui est assez simple d'utilisation.

Il devrait normalement reconnaitre votre Pico, il suffit de cliquer en bas à droite sur "Python 3.X.X" et de choisir "MicroPython" et votre carte.

Pour tester la carte et la connexion, je vous propose de tester le traditionnel Hello World :

print("Hello Pico!")

Recopiez le code dans l'IDE, puis lancez le script. Thonny va vous demander si vous préferez le lancer sur l'ordinateur ou sur le Pico, puis vous demande de l'enregistrer. Choisissez un nom simple et clair, se terminant par ".py" l'extension des scripts Python. On voit le script qui démarre dans le Shell en bas et qui affiche votre "Hello Pico!"

Si vous êtes un habitué des Arduino, vous pouvez aussi ouvrir l'IDE Arduino, sélectionner le bon port série (dans mon cas "dev/cu.usbmodem0000000000001") et la bonne vitesse (115200Bauds) et communiquer directement avec le Pico.

Si vous ne voulez pas utiliser Thonny pour coder et gérer les scripts, Adafruit à developpé un utilitaire en ligne de commande qui permet de lire, copier, lister, exécuter, supprimer, renommer les scripts de votre carte.

Sur macOS / Linux vous pouvez retrouver le port série avec la commande :

ls /dev/tty*

Vous pouvez ensuite lister les scripts de votre carte avec la commande :

sudo ampy --port /dev/tty.usbmodem0000000000001 ls

Comme afficher du texte c'est bien sympa mais pas très visuel, je vous propose d'intéragir avec les ports GPIO et en particulier avec la LED intégrée. Il va falloir appeller la librairie machine et time. Tout comme Python, MicroPython permet aussi de n'importer qu'une partie d'une librairie.

from machine import Pin
import time
led = Pin(25, Pin.OUT)
while True
    led.value(1)
    time.sleep(1.0)
    led.value(0)
    time.sleep(1.0)

Le résultat est sans appel, la LED clignotte !

Pour aller plus loin je vous conseille vivement de lire le Guide officiel de la fondation, disponible gratuitement (vous pouvez faire un don), très visuel, simple et compréhensible (mais en anglais).

Get Started with MicroPython on Raspberry Pi Pico — HackSpace magazine
Raspberry Pi Pico is a new low-cost, high-performance microcontroller board with flexible digital interfaces. Microcontrollers are computers stripped back to their bare essentials. You don’t use monitors or keyboards, but program them to take their input from, and send their output to the input/outp…

Si vous débutez, je vous conseille de vous pencher sur le PWM, cela vous permettra de jouer avec des LED RGB et de faire de beaux arcs-en-ciel.

Pour ma part : une LED RGB, une fibre optique qui traine, quelques jumper wire et paf, ça fait du caca de licorne :

Un bon achat ?

Le Raspberry Pi Pico se paie le luxe de faire une entrée fracassante dans le monde des micro-contrôleurs. La fondation veut populariser ce genre de cartes de développement et montrer que l'on est pas obligé d'avoir un ordinateur à 40$ et une distribution Linux relativement complexe pour faire des relevés de température. Avec ses 2Mo de mémoire flash on peut largement faire du log de données pendant plusieurs semaines voire plusieurs mois. Je regrette juste l'abscence de WiFi/BT, je continuerai à utiliser les ESP8266 pour des petits projets qui necessitent une connectivité mais je suis certain que les fabriquants vont s'empresser de nous trouver des solutions quasi Plug'n'Play comme les "Hat" pour Arduino. Le projet est prometteur mais accuse d'une certaine jeunesse, l'importation de librairies n'est pas aisée et on trouve à l'heure actuelle que peu de ressources, pour l'instant ! La fondation Raspberry Pi est très influente et sa communauté très active est un atout, maintenant qu'ils ont mis les pieds dans le plat j'ai hâte de voir la suite.