Je vous ai présenté récemment la carte XIAO RP2040 de Seeedstudio. Elle a l’avantage d’être équipée d’un RP2040, produit par la Fondation Raspberry Pi, le même qui équipe le Raspberry Pi PICO et le PICO W. On est donc en pays connu. Je vous propose de démarrer avec cette carte et de commencer à la prendre en main au travers de quelques programmes simples en microPython. Pour les tests j’utiliserai un Thonny sous Windows 11 qu’une majorité de débutants utilisent. J’utilise le même programme avec un Pi 4 ou un Pi 400, référez vous à mes précédents articles pour plus d’informations.
Au sommaire :
Carte miniature Seeedstudio Xiao RP2040
Cet article est en partie la traduction du Wiki de Seeedstudio sur la carte XIAO RP2040.
Présentation
Le XIAO RP2040 est aussi petit que le Seeeduino XIAO mais il est plus puissant :
Il embarque le puissant processeur double-cœur RP2040 qui peut fonctionner avec une horloge jusqu’à 133 MHz, et qui est un microcontrôleur à faible consommation. Le XIAO RP2040 dispose également de 264 Ko de SRAM et de 2 Mo de mémoire Flash embarquée, ce qui permet de sauvegarder et d’exécuter davantage de programmes.
Cette petite carte présente de bonnes performances en matière de traitement et consomme moins d’énergie. Elle a une taille minuscule (20×17.5mm) et peut être utilisée pour des dispositifs portables et des petits projets.
La carte XIAO RP2040 possède 14 broches GPIO qu’on peut configurer comme 11 broches numériques, 4 broches analogiques, 11 broches PWM, 1 interface I2C, 1 interface UART, 1 interface SPI, 1 interface SWD Bonding pad (débuggage série) selon les besoins.
La carte XIAO RP2040 est compatible avec la carte d’extension XIAO ci-dessus.
XIAO RP2040 supporte la programmation Arduino, MicroPython et CircuitPython, des exemples sont fournis pour chaque langage de programmation :
Cet article se base sur l’utilisation de microPython.
Caractéristiques
Un puissant microcontrôleur (MCU) : Processeur ARM Cortex M0+ à double cœur, horloge flexible pouvant atteindre 133 MHz.
Ressources sur la puce : 264 Ko de SRAM et 2 Mo de mémoire Flash embarquée.
Adaptable à de nombreux environnements : Prise en charge de Micropython/Arduino/CircuitPython
Facilite la réalisation de projets : Conception adaptée à la breadboard et au montage en surface (CMS/SMD), pas de composant présent à l’arrière de la carte.
Petite taille : Pas plus grande qu’un timbre : 20×17.5mm pour créer des dispositifs portables et des petits projets.
Interfaces multiples : 11 broches numériques, 4 broches analogiques, 11 broches PWM, 1 interface I2C, 1 interface UART, 1 interface SPI, 1 interface SWD Bonding pad.
Alimentation : 3,3 v / 5 v
Présentation du matériel¶
Note : Pour les broches d’E/S générales : La tension de fonctionnement du MCU est de 3,3 V. Une tension d’entrée connectée aux broches d’E/S générales peut endommager la puce si elle est supérieure à 3,3 V.
Pour les broches d’alimentation : Le circuit convertisseur DC-DC intégré est capable de transformer une tension de 5V en 3.3V. Il permet d’alimenter le dispositif avec une alimentation de 5V sur la pastille VIN (sous la carte) et la broche 5V VCC.
Veuillez faire attention de ne pas soulever le couvercle du blindage.
Entrer dans le mode Bootloader
Parfois, la connexion au XIAO RP2040 peut disparaître lorsque la programmation par l’utilisateur échoue ou qu’un programme ne rend pas la main. On peut résoudre ce problème par l’opération suivante :
Appuyez sur le bouton « B », maintenez le appuyé et connectez le XIAO RP2040 à votre ordinateur.
L’ordinateur fera apparaître un disque USB.
À ce stade, la puce entre en mode Bootloader et le port d’accès apparaît à nouveau. Le RP2040 possède deux partitions, l’une est le Bootloader et l’autre le programme utilisateur. Le produit contient un code de bootloader dans la mémoire du système lorsqu’il quitte l’usine. Il est possible de le modifier en procédant comme ci-dessus.
Vous verrez apparaître cette fenêtre RPI-RP2. Il suffira de faire un glisser déposer d’un bootloader en .UFO pour recharger microPython ou un autre système. Certains fabricants proposent leur propre mouture de microPython avec les librairies nécessaires pour gérer certains composants déjà intégrées.
Il m’arrive aussi, quand je mets des programmes en démarrage automatique sur le RP2040, de prévoir une « porte de sortie » pour arrêter le programme et reprendre la main avec Thonny. J’utilise parfois l’appui sur un ou 2 boutons poussoir, oui autre méthode. Le programme lorsqu’il détecte cet événement s’arrête et rend la main.
Reset – Réinitialisation
Si vous voulez réinitialiser le XIAO RP2040, effectuez les étapes suivantes :
- Connectez le XIAO RP2040 à votre ordinateur.
- Appuyez une fois sur le bouton « R ».
Remarque : le comportement des LEDs monochromes programmables intégrées (deux sont bleues, une est verte) est inversé par rapport à celui d’un Arduino. Sur le XIAO RP2040, la broche doit être tirée vers le bas (mise à 0) pour activer la LED.
Schéma de la carte
Ce schéma vos permet de repérer les éléments présents sur la carte.
Mise en œuvre de microPython
Introduction à MicroPython
MicroPython est un interpréteur Python doté d’une fonction de compilation partielle de code natif. Il fournit un sous-ensemble de fonctionnalités de Python 3.5, implémenté pour les processeurs embarqués et les systèmes contraints. Il est différent de CPython et vous pouvez lire plus sur les différences ici.
Mise en route
A son arrivée, lorsque je connecte la carte XIAO RP2040 au PC via USB, un programme interne anime la LED utilisateur et la LED RGB. Ce programme a été installé par Seeedstudio, sans doute pour tester le bon fonctionnement de la carte.
Ce programme tourne en boucle et ne rend pas la main. On va devoir mettre un nouveau microPython dans la carte avant de l’utiliser. Cela va la réinitialiser. En cas de carte récalcitrante, il existe une autre solution qui remet l’ensemble de la mémoire à zéro. C’est flash_nuke.uf2 qui est disponible ici. Il suffit de le télécharger et de le copier en suivant la procédure ci-dessous pour remettre le RP2040 comme à sa sortie d’usine.
Installer microPython
De plus cette procédure vous sera utile si vous décidez de changer de Bootloader par la suite.
Téléchargez microPython pour RP2040 en version .UF2. J’ai choisi la dernière version.
Comme vu plus haut, appuyez sur le bouton « B » et connectez le port USB-C. Cette fois la carte ne jour plus les arbres de Noël. La LED RGB reste éteinte et les LED PWR (rouge) et utilisateur (RVB) sont allumées. Une fenêtre RPI-RP2 s’ouvre sur le bureau.
Faites glisser le microPython…uf2 que vous avez téléchargé dans la fenêtre RPI-RP2. A la fin du transfert la fenêtre RPI-RP2 disparait et la carte reboote. Débranchez et rebranchez le port USB-C. La carte XIAO RP2040 démarre « normalement » et le programme d’origine n’est plus exécuté. On va pouvoir commencer à s’amuser 😉
Le matériel utilisé
Tout d’abord, il faut connecter la carte XIAO RP2040 à l’ordinateur et télécharger un code simple depuis MicroPython pour vérifier si la carte fonctionne bien.
Configuration matérielle utilisée :
- 1 x XIAO RP2040 x1
- 1 x Câble Type USB-A -USB-C
- 1 x PC ou Raspberry Pi
Installation de THonny
Étape 1. Téléchargez et installez la dernière version de l’éditeur Thonny en fonction de votre système d’exploitation. Sur Raspberry Pi, THonny est déjà installé si vous utilisez Raspberry Pi OS. Pour Windows la page de téléchargement de Thonny est ici pour la version 3.3 et là pour la version 4.0 (beta). Comme je fais ça pour le fun, j’ai choisi la version 4.0.
Étape 2. Lancez l’éditeur Thonny et Cliquez sur » Outils→Options » pour ouvrir les paramètres.
Étape 3. Choisissez l’onglet « Interpréteur » et sélectionnez « MicroPython (Raspberry Pi Pico) » et pour le port comme « Essayer de détecter le port automatiquement« .
Connexion de la carte XIAO RP2040 au PC
Connectez la carte XIAO RP2040 au port USB du PC ou du Raspberry Pi. Lancez Thonny.
La partie basse (Console) montre le résultat du démarrage de microPython sur le RP2040.
Copiez ce code dans la partie haute de la fenêtre :
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from machine import Pin, Timer led = Pin(25, Pin.OUT) Counter = 0 Fun_Num = 0 def fun(tim): global Counter Counter = Counter + 1 print(Counter) led.value(Counter%2) tim = Timer(-1) tim.init(period=1000, mode=Timer.PERIODIC, callback=fun) |
Vous devez obtenir ceci, cliquez sur l’icône d’exécution. La LED utilisateur (juste à côté de la prise USB) clignote et un compteur défile dans la console.
Vous venez de faire tourner votre premier programme sur la carte XIAO RP2040. Pour arrêter le programme, cliquez sur l’icône représentant un panneau STOP.
Note : Si vous utilisez un Raspberry Pi, le programme est enregistré avant d’être exécuté. Ce n’est pas le cas sur Windows. Pensez bien à enregistrer le programme si vous voulez le garder.
Dans les deux cas il faut choisir si vous enregistrez le programme sur le PC ou le Raspberry Pi (Cet ordinateur) ou sur le RP2040 (Raspberry Pi Pico). Pour les programmes en essai privilégiez le PC ou le Raspberry Pi. On enregistrera sur le RP2040 les librairies pour les composants et les programmes qui s’exécuteront en automatique sur la carte XIAO RP2040.
Conclusion provisoire
Si ce programme fonctionne, c’est bon signe. Allumer et éteindre une LED c’est le « Hello World » du maker. Ça veut dire que la carte fonctionne et que toute la chaine de programmation fonctionne également. Une fois ce premier résultat obtenu, on peu passer à des choses un peu plus élaborées.
Animer la LED RGB sur la carte XIAO RP2040
Principe
Le LED RGB (Rouge-Vert-Bleu) qui se trouve sur la carte (entre les deux boutons poussoirs) est une LED « adressable » . En fait on envoie des octets les uns derrière les autres en série. Le circuit de la première LED les reçoit sur Din, il prélève les 3 premiers octets qu’il utilise pour configurer les trois couleurs. Le premier octet règle la luminosité du rouge (0 à255), Le second octet règle la luminosité du vert (0 à255), Le troisième octet règle la luminosité du bleu (0 à255). Sur certains modèles les couleurs peuvent avoir un ordre différent.
Les 3 LED sont proches et l’œil va mélanger les couleurs émises pour créer une couleur qui n’existe que dans votre tête, comme un pixel sur un écran TV.
Pour gérer la LED, on peut : soit tout écrire soi-même, soit utiliser une bibliothèque écrite par quelqu’un d’autre, qui sait gérer les LED adressables. Je vous explique un truc. Un bon informaticien, c’est un bon fainéant. Je m’explique… Si un programme existe et qu’il fonctionne bien, pourquoi le réinventer ? Il vaut mieux l’utiliser, ça permet de gagner du temps et de se consacrer à apprendre autre chose. A moins que vous vouliez apprendre à gérer ce genre de LED vous même, auquel cas ce sera à vous de lire les docs et d’écrire le programme. Si c’est le cas, faites en une bibliothèque, elle vous servira une autre fois et pourra aussi servir à d’autres si vous la partagez. C’est bien sûr juste mon avis…
Utiliser la bibliothèque ws2812
Ici Seeedstudio a fait le travail pour nous en développant sa bibliothèque ws2812.py. On va
- Télécharger la librairie sur le PC (ou le Raspberry Pi)
- L’ouvrir dans Thonny
- L’enregistrer dans la carte Xiao RP2040
De ce fait, la bibliothèque de gestion de la LED RGB adaptée à la carte Xiao RP2040 sera présente sur notre carte Xiao et sera donc disponible pour notre programme.
Télécharger la bibliothèque
Cliquez sur ce lien qui lance le téléchargement de ws2812.py depuis le site de Seeedstudio.
Enregistrez le à un endroit conne (ici je le range avec mes programmes de la Xiao RP2040).
Ouvrir la bibliothèque dans Thonny
Dans Thonny cliquez sur Ouvrir…
Choisissez d’ouvrir un fichier situé sur votre PC ou Raspberry Pi
Allez dans le dossier où vous avez rangé la bibliothèque. Sélectionnez ws2812.py
Le fichier s’ouvre dans Thonny comme vous pouvez le vérifier dans l’onglet.
Enregistrer la bibliothèque dans le RP2040
Maintenant qu’on a ouvert la bibliothèque, on va l’enregistrer dans la carte Xiao RP2040. Cliquez sur Enregistrer sous…
Cette fois choisissez Raspberry Pi Pico, ce qui va enregistrer la bibliothèque dans le RP2040.
Thonny va enregistrer le code qui apparait dans la fenêtre mais c’est vous qui allez lui donner un nom. Tapez ws2812.py dans la zone Nom de fichier. Il faut nommer la bibliothèque de cette façon car les programmes utilisent la bibli sous ce nom ! Après vous êtes libre de changer le nom, mais il faudra adapter vos programmes…
Cliquez sur OK pour enregistrer dans le RP2040.
Utiliser la bibliothèque
Fermer l’onglet ws2812.py de Thonny et ouvrez un nouveau programme (Fichier > Nouveau)
Chargez le code suivant dans Thonny (copier/coller):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
from ws2812 import WS2812 import utime import machine power = machine.Pin(11,machine.Pin.OUT) power.value(1) BLACK = (0, 0, 0) RED = (255, 0, 0) YELLOW = (255, 150, 0) GREEN = (0, 255, 0) CYAN = (0, 255, 255) BLUE = (0, 0, 255) PURPLE = (180, 0, 255) WHITE = (255, 255, 255) COLORS = (BLACK, RED, YELLOW, GREEN, CYAN, BLUE, PURPLE, WHITE) led = WS2812(12,1)#WS2812(pin_num,led_count) while True: print("Beautiful color") for color in COLORS: led.pixels_fill(color) led.pixels_show() utime.sleep(0.2) |
Vous devriez obtenir ceci :
SI vous regardez le programme vous voyez les lignes
power = machine.Pin(11,machine.Pin.OUT)
qui correspond à la broche d’alimentation de la LED. C’est une sortie, sur le GPIO 11.
led = WS2812(12,1) #WS2812(pin_num,led_count)
Ici on utilise la bibliothèque ws2812 qu’on vient de mettre sur le RP2040, on lui passe les informations suivantes :
- La broche Din (Data IN de la LED est sur le GPIO 12 du RP2040 => 12
- Il y a 1 seule LED => 1
Il n’y a plus qu’à cliquer sur l’icône de lancement du programme et … admirer
Modifier le programme
A chaque boucle, le programme écrit … Beautiful color. (Vous me dites ça à moi qui suis daltonien 😀 ). Je voudrais qu’on modifie le programme pour qu’il affiche chaque couleur pendant 2 secondes, et affiche pendant ce temps la couleur de la LED à l’écran.
Si on regarde le programme, on voit que la boucle while commence par le print. Si on veut imprimer la couleur il faudra déplacer cette ligne sous le for (le for se charge de balayer la liste des couleurs). On voit aussi que le temps d’affichage est un sleep qui dure 0.2 secondes. On va le passer à 2 secondes !
Ce qui donne après modification :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
from ws2812 import WS2812 import utime import machine power = machine.Pin(11,machine.Pin.OUT) power.value(1) BLACK = (0, 0, 0) RED = (255, 0, 0) YELLOW = (255, 255, 0) GREEN = (0, 255, 0) CYAN = (0, 255, 255) BLUE = (0, 0, 255) PURPLE = (255, 0, 255) WHITE = (255, 255, 255) COLORS = (BLACK, RED, YELLOW, GREEN, CYAN, BLUE, PURPLE, WHITE) COULEURS = ("ETEINTE", "ROUGE", "JAUNE", "VERT", "CYAN", "BLEU", "MAGENTA", "BLANC") led = WS2812(12,1)#WS2812(pin_num,led_count) while True: for i in range(len(COULEURS)): print ("Couleur de la LED : ", COULEURS[i]) led.pixels_fill(COLORS[i]) print(COLORS[i]) led.pixels_show() utime.sleep(2) |
Je vous commente les lignes modifiées :
COULEURS = (« ETEINTE », « ROUGE », « JAUNE », « VERT », « CYAN », « BLEU », « MAGENTA », « BLANC »)
J’ai ajouté cette ligne avec la liste des couleurs en français (au passage j’ai modifié les valeurs des couleurs en mettant à 255 les octets concernés).
for i in range(len(COULEURS)):
print (« Couleur de la LED : « , COULEURS[i])
led.pixels_fill(COLORS[i])
print(COLORS[i])
La première ligne balaye la liste des couleurs avec l’instruction for
La seconde ligne affiche la couleur de la LED dans la console
La troisième ligne met la couleur dans la LED
La quatrième ligne affiche les 3 octets RVB sur la console
Ce qui donne ceci dans Thonny :
Ce qui donne ceci sur la LED
Conclusion
Dans cet article vous avez pu découvrir la facilité de mise en ouvre de cette mini carte Xiao RP2040 de Seeedstudio. Vous savez maintenant comment charger un firmware comme microPython dans la carte, utiliser Thonny pour exécuter un programme et ajouter une bibliothèque pour un composant. Plein de projets s’ouvrent à vous, vu le prix de la carte le risque est faible et c’est un bon outil pour apprendre à utiliser un microcontrôleur.
Si vous voulez partager vos projets, n’hésitez pas à me contacter, le les ajouterai sous cet article. Profitez également des commentaires pour dire ce que vous en pensez et parler de vos projets.
Une carte miniature que vous pouvez acheter ici pour 5,40$, frais de port offert actuellement. Vous avez la puissance du Raspberry Pi PICO sur la surface d’un timbre poste…
Update du 4 novembre 2022 :
SeeedStudio vient d’ouvrir un entrepôt en Allemagne. Bonne nouvelle pour les #makers 🇫🇷 français clients de SeeedStudio puisque les frais de port vont diminuer et les délais de livraison seront réduits !
Sources
- https://www.seeedstudio.com/XIAO-RP2040-v1-0-p-5026.html?utm_source=Fran%C3%A7ois&utm_medium=Poster&utm_campaign=RP2040-Free-Shipping
- https://wiki.seeedstudio.com/Seeeduino-XIAO/
Je viens de la recevoire apres un paiement de 9.00€ de frais de douane 🙂
Roo zut désolé
Normalement les taxes sont payées
Quel transporteur ?
Je crois que j’ ai du payer 1€
Dites moi je vais faire remonter l’info
Cdt
Francois
La poste Colissimo
Merci pour votre rapidité et surtout pour vos tutos
je fais remonter l info et je vous tiens au courant
Merci pour ce tuto
😉
merci 🙂
Bonjour,
Suite à votre article (je suis abonné à vos publications que je trouve très intéressantes), j’ai également commandé un XIAO-RP2040 afin de découvrir le monde Raspberry puisque, bien que non électronicien et non informaticien, je « viens » du monde Arduino.
Hormis le fait que la logistique ait été plutôt longue (commandé le 2 août et déposé dans ma boîtes au lettres le 27), j’ai également été très surpris de devoir payer des frais d’importation (TVA + frais de La Poste).
Comme j’attendais cette première commande pour embrayer ensuite sur la commande d’un Raspberry Pico, ces frais supplémentaires m’ont carrément refroidi pour passer à l’acte (le prix final devenant pas du tout attractif par rapport à une commande passée sur AliExpress).
En tous cas, merci infiniment pour votre travail qui aide beaucoup les béotiens comme moi 🙂
Jean-Michel
PS : étant débutant, je serais intéressé par la source du programme installé par Seeedstudio à la sortie d’usine (est-ce du .ino ? Est-ce du .py ?). S’avez-vous où je pourrais la trouver ?
Bonjour Jean-Michel
merci pour votre commentaire et desolé pour cette taxe
je ne sais pas quel programme est installé d’origine
cdt
francois
Ping : Carte WaveShare RP2040-ZERO - Framboise 314, le Raspberry Pi à la sauce française....
Bonjour François,
Merci pour ce tuto à la fois clair et synthétique.
J’ai cependant un petit problème, je suis bloqué à l’étape du bootloader (j’ai bien pu installer Thonny, mais je ne peux pas l’utiliser pour l’instant). Je n’arrive pas à sortir du mode bootloader, même en ayant fait glisser le fichier .uf2 vers le rp2040.
J’ai vu sur le wiki de seeed studio qu’il était également possible de revenir au mode serial en appuyant sur le bouton reset deux fois très rapidement, j’ai essayé cela également, sans succès. Si vous pouviez m’apporter une aide, je vous en serais très reconnaissant,
En vous remerciant d’avance,
David
Bonjour David
quel fichier UF2 ?
au pire pour repartir à zero regardez ici
https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython/circuitpython
et utilisez le fichier flash_nuke.uf2 qui efface tout sur le RP2040…
Il faudra ensuite remettre micropython en uf2
tenez moi au courant
cdt
francois
Ping : Nouvelle carte XIAO ESP32S3 chez SeeedStudio - Framboise 314, le Raspberry Pi à la sauce française....
Ping : Anavi Handle : transformez une manette de jeu Nunchuk en souris ou en joystick - Framboise 314, le Raspberry Pi à la sauce française....