Raspberry-Pi Pico
Microcontrôleur RP2040
Le Raspberry-Pi Pico, dont il est question dans cet ouvrage, exploite le microcontrôleur RP2040 également conçu par la fondation Raspberry-Pi.
La conception du premier microcontrôleur de la fondation Raspberry-Pi est une grande réussite et surpasse, sur bien des points, les concurrents du marché.
Microcontrôleur RP2040
Pour commencer, ce microcontrôleur dispose d’un double cœur, ce qui n’est pas commun pour un composant à 1,30 euro.
Ensuite, il s’agit d’un processeur haute performance cadencé à 133 Mhz disposant de tous les périphériques standards d’un microcontrôleur standard (bus I2C, bus SPI, bus série/UART, Timer), tout en étant accompagné d’autres fonctionnalités avancées.
Le graphique ci-dessous décrit les différents blocs fonctionnels du RP2040.
Blocs fonctionnels du RP2040
Voici ce qu’il est possible d’apprendre dans ces blocs fonctionnels :
-
Le bloc mémoire (memory) reprend six banques de mémoire RAM pour un total de 264 Kio, ce qui est très conséquent par rapport à un Arduino UNO qui ne dispose que de 2 Kio. Le bloc mémoire contient aussi un élément ROM (mémoire en lecture seule) contenant, entre autres, le bootloader UF2 permettant de téléverser un nouveau firmware via USB.
-
Le bloc USB indique que le RP2040 dispose d’un support USB natif. Celui-ci est utilisé pour téléverser un nouveau firmware mais permet aussi au RP2040 d’établir une connexion USB-Série, d’émuler un périphérique HID comme une souris ou un clavier.
-
Le bloc Dual Core reprend les deux cœurs totalement indépendants ! Il sera donc possible de faire fonctionner...
Présentation du Pico
1. Survol du Pico
Le Raspberry-Pi Pico est la plateforme de référence de la fondation pour le microcontrôleur RP2040.
Cette plateforme contient l’implémentation minimale d’un microcontrôleur RP2040 pour la modique somme de 5 euros.
Raspberry-Pi Pico
Placée sur une carte de 5 x 2 cm, la plateforme apporte tous les éléments nécessaires au développement de solution en C/C++, Arduino, MicroPython.
Éléments du Raspberry-Pi Pico
a. Port micro-USB
Le connecteur USB peut être utilisé pour alimenter la plateforme en 5 V mais permet également de brancher le Pico sur un ordinateur pour :
-
téléverser un nouveau programme sur la carte (croquis Arduino ou MicroPython) lorsque la carte est en mode de programmation,
-
obtenir une liaison série via la connexion USB (terminal Arduino ou ligne de commande MicroPython/REPL),
-
se comporter comme un hôte USB permettant ainsi d’émuler des périphériques tels que clavier ou souris.
b. Broches d’entrées/sorties
La carte Pico n’expose pas moins de 26 broches GPIOs pouvant être utilisées en entrée ou en sorties.
Le Pico est un microcontrôleur en logique 3,3 V et n’est pas tolérant 5 V ! Il ne faut, en aucun cas, dépasser la tension de 3,3 V sur l’une des broches GPIOs du Pico.
16 de ces broches peuvent être utilisées en PWM (Pulse Width Modulation) pour moduler la largeur d’impulsion d’un signal. Dans le monde Arduino, cette fonctionnalité est abusivement appelée « sortie analogique », car elle permet de moduler la puissance de sortie de signal (par exemple, la luminosité d’une LED), faisant passer la fonctionnalité PWM pour une pseudo-sortie analogique.
Trois...
Le Pico et Pico Wireless en détail
Cette section du chapitre va surtout s’attarder sur les différents éléments matériels de la plateforme Pico et présenter également quelques lignes de code à titre indicatif. À noter qu’il existe quelques différences mineures entre le Pico et le Pico Wireless.
La section apporte également des précisions techniques sur ces différents éléments comme des schémas, des recommandations, etc.
Le chapitre suivant (Prise de contrôle) apportera un complément d’information en détaillant les outils permettant de saisir du code de test ou des scripts Python à exécuter sur la plateforme MicroPython.
Si la lecture de cette section n’est pas indispensable, il est recommandé de parcourir son contenu pour disposer d’un aperçu puis, éventuellement, y revenir pour combler les lacunes (ou tester les exemples).
1. LED utilisateur - Pico uniquement
La LED utilisateur est, comme son nom l’indique, à disposition de l’utilisateur.
Cette LED est directement raccordée sur le GPIO 25 de la carte.
LED utilisateur sur le Raspberry-Pi Pico
Comme le schéma l’indique, ce GPIO n’est pas accessible sur les connecteurs du Pico, si bien que vous pouvez utiliser cette LED sans vous préoccuper des incidences de son utilisation lors d’un éventuel montage (ce qui n’est pas le cas de la LED d’un Arduino UNO).
La LED utilisateur peut être contrôlée à l’aide des lignes de code suivantes :
from machine import Pin
led = Pin(25, Pin.OUT)
led.value( 1 ) # allume la LED
led.value( 0 ) # éteint la LED
Si d’aventure un projet manquait d’un signal, celui du GPIO 25 (LED) pourrait être récupéré...
Pico : tension logique et courant
Deux informations importantes sont à garder en tête avant de réaliser ses premiers raccordements sur un Pico. Il s’agit des tensions et courants applicables.
Pour faire court :
1. La tension logique est 3,3 V.
2. Pas de tolérance 5 V.
3. Courant de sortie 4 mA par GPIO.
4. Le courant maximum disponible pour tous les GPIO est de 50 mA.
1. Niveau logique et tension
Les microcontrôleurs sont capables de fixer l’état d’une sortie numérique parmi les deux états disponibles :
-
État HAUT : dit HIGH en anglais. Ce niveau HAUT correspond à la tension de 3,3 V fixée par le microcontrôleur. En Python, cela correspond aux valeurs True, 1 ou toute autre valeur entière positive.
-
État BAS : dit LOW en anglais. Ce niveau BAS correspond à la tension de 0 V fixée par le microcontrôleur (tension de la masse). En Python, cela correspond aux valeurs False et 0.
Niveau logique et entrée
Lorsque la broche est configurée en entrée, la lecture de l’état d’une broche est un peu plus permissive. En effet, le niveau HAUT (1 en Python) sera retourné par le microcontrôleur lorsque la tension présentée sur la broche dépasse 2,0 V. Le niveau BAS (0 en Python) correspond à une tension inférieure à 0,8 V.
Entre 0,8 et 2,0 V, l’état de l’entrée est indéterminé et sera aléatoire.
Niveau logique
2. Niveau logique et Python
Le niveau logique HAUT correspond à toute expression Python pouvant être évaluée comme vraie comme, par exemple, True ou 1 ou résultat d’un appel de fonction retournant True ou 1.
Même si d’autres valeurs ou expressions peuvent être évaluées...
Les fonctions alternatives sur le Pico
Les fonctions de base des broches d’un microcontrôleur ne s’arrêtent pas aux opérations d’entrées (lire l’état d’une broche) ou de sorties (fixer l’état de la broche).
Les broches du Raspberry-Pi Pico, comme d’autres microcontrôleurs, proposent d’autres fonctionnalités.
1. Sortie PWM
Une sortie PWM (Pulse Width Modulation) est une modulation de signal produisant un signal carré à une fréquence fixe et arbitraire (fixée par le programme utilisateur) dont il est possible de moduler le cycle utile de 0 à 100 % (le rapport entre le temps au niveau haut et le niveau bas sur une période de signal).
Aussi appelé MLI (Modulation de Longueur d’Impulsion) dans la littérature francophone, ce type de modulation permet de moduler la puissance moyenne d’une sortie à tel point que l’environnement Arduino associe les sorties PWM à une pseudo « sortie analogique ». C’est un raccourci un peu trop simpliste mais acceptable.
Le graphique ci-dessous représente un signal PWM produit à la fréquence de 50 Hertz. Il se reproduit donc toutes les 20 ms (Période = 1 / 50 Hz = 0,020 sec = 20 ms).
Production d’un signal PWM
Suivant la durée du cycle utile (ex : 25 %, 60 % et 90 %), il est clairement évident que le signal « remplit » plus le graphique, ce qui augmente la valeur moyenne du signal.
Utilité d’un signal PWM
Dans le monde de l’industrie, un tel signal est régulièrement exploité dans les circuits d’asservissement (ex : régulation de la vitesse moteur).
Dans le monde des Makers, ce signal sera utilisé pour réaliser différentes...
Le timer
Il s’agit ici d’une fonctionnalité qui trouve logiquement sa place dans ce chapitre. Il s’agit cependant d’une technique avancée plus rarement exploitée. Ainsi, il sera peut-être opportun de la survoler pour y revenir plus tard au besoin.
Le timer, à proprement parler, n’est pas une interface matérielle vers le monde extérieur comme l’est le bus I2C ou les broches d’entrées/sorties.
Un timer est un élément matériel permettant d’interrompre l’exécution du programme exécuté sur le Pico pour transférer l’exécution à un morceau de code spécifique, appelé routine d’interruption (dit Interrupt Handler). Après l’exécution de celle-ci, le programme principal reprend le cours de son exécution.
Un timer est utilisé pour exécuter la routine d’interruption à intervalle régulier ou après un délai donné (et une seule fois) après l’activation du timer. D’autres configurations sont possibles mais sortent largement du cadre de cet ouvrage.
L’exemple ci-dessous exploite un timer et une routine d’interruption pour changer l’état d’une LED sur GP4 sans perturber le fonctionnement général du microcontrôleur.
LED branchée sur GP4
Voici les quelques étapes de mise en place des éléments permettant d’atteindre l’objectif.
1: >>> from machine import Pin, Timer
2: >>> p4 = Pin( 4, Pin.OUT )
3: >>>
4: >>> def routine( tim ):
5: >>> global p4
6: >>> p4.toggle()
7: >>>
8: >>> mon_tim = Timer( period=1000, mode=Timer.PERIODIC, callback=routine ) ...
Comment détruire son Pico en sept leçons
Bon nombre d’ouvrages guident le lecteur dans les opérations à réaliser. Cela est certes utile, cependant, il est tout aussi important d’être informé sur ce qu’il ne faut pas faire (et pour quelle raison).
Voici sept leçons à ne pas suivre, des erreurs plutôt courantes et parfois commises par manque d’expérience (ou empressement). En cas d’erreur, la destruction du microcontrôleur est immédiate.
1. Tension d’alimentation supérieure à 5,5 V
Comme déjà abordé dans ce même chapitre, le Pico peut être alimenté via son connecteur USB ou via un accumulateur LiPo (se déchargeant dans VSYS).
Nombre d’utilisateurs et de makers sont issus du monde Arduino où le régulateur de tension nécessite une tension de l’ordre de 7 V pour fonctionner. Il est courant de brancher une pile 9 V sur la broche VIN d’un Arduino UNO.
S’il est tentant de faire pareil avec le Pico, cela détruira le régulateur de tension du Pico.
Alimentation directe du Pico via VSYS
Il est important de rappeler que la tension maximale applicable sur VSYS est de 5,5 V. L’idéal est un bloc de deux ou trois piles AA que le régulateur pourra décharger en dessous de 2 V pour produire la tension d’alimentation du Pico.
2. Placer une broche directement à la masse
Il est malheureusement très facile de brancher accidentellement une broche à la masse. Déjà parce que le plan de masse d’une carte est généralement la surface la plus importante. Un faux contact, des fils torsadés qui se détachent, une modification en hâte ou une modification de connexion avec le projet sous tension et la catastrophe n’est...
Pico Wireless
La logique aurait voulu que ce point soit placé avant le thème « Comment détruire son Pico en sept leçons ». Cependant, comme pour le microcontrôleur, le contrôle réseau est plus proche de la couche matérielle que du simple logiciel de configuration que l’on retrouve sous Windows.
Ainsi, cette section va aborder différentes notions techniques relatives à la connectivité Wi-Fi.
Si le ton est à la vulgarisation, il se peut que l’immersion soit parfois déroutante pour un lecteur moins expérimenté. Il ne faut pas hésiter à revenir consulter cette section à plusieurs reprises pour appréhender les nouveaux concepts.
Paul Langevin, physicien né en 1872, disait : « Le concret c’est de l’abstrait rendu familier par l’usage » (cf. La pensée et l’action, Ed. Paul Labérenne, 1950).
1. Aborder le module Wi-Fi
Le Pico-Wireless (ou Pico-W) est équipé d’un module Bluetooth et Wi-Fi. Au moment de l’écriture de ces lignes (septembre 2022), seul le support Wi-Fi est achevé et les développements autour du module Bluetooth sont encore en cours de parachèvement.
Grâce à son interface Wi-Fi, le Pico peut créer son propre réseau Wi-Fi (mode Point d’Accès) ou se connecter sur un réseau Wi-Fi existant (mode Station). Ces deux modes pouvant coexister en même temps.
Sous MicroPython, le support Wi-Fi est assuré par la classe WLAN qui prend en charge les modes Point d’Accès et Station.
Les quelques instructions suivantes, saisies dans une session REPL, indiquent comment accéder au module Wi-Fi.
>>> from network import *
>>> wlan=WLAN()
>>> wlan
<CYW43...