Envie d’avoir quelque chose de plus puissant qu’un simple Arduino, tout en restant de même taille et de même ordre de prix ? Alors le Raspberry Pi Pico est fait pour vous !
Ici, je vous propose de découvrir à quoi ressemble le Pi Pico, ses caractéristiques, et le détail de toutes ses entrées/sorties (GPIO, I²C, UART, SPI, PWM, …). Ainsi, il n’aura plus de secrets pour vous ! Ou presque 😉
Ceci est un article introductif vous permettant de découvrir le Raspberry Pi Pico. Il sera donc suivi par de nombreux autres articles, qui viendront détailler chaque partie présentée ici (et bien plus !). Ces articles complémentaires, qui vous montreront comment programmer le Pico, et comment se servir plus précisément de ses entrées-sorties (pour faire de la communication série, générer des signaux PWM, etc), vous permettront de mieux comprendre toutes les possibilités de cette petite plaquette. Mais pour l’heure, commençons par le commencement 😉
Qu’est-ce que le Raspberry Pi Pico ?
Certains d’entre vous se demandent peut-être déjà : qu’est-ce que le Raspberry Pi Pico ? En effet, même si vous connaissez déjà les produits Raspberry Pi, vous n’avez peut-être pas encore entendu parler de lui, ou découvert ce qu’apporte ce petit nouveau, dans la famille !
Pour faire simple, le Raspberry Pi Pico est tout simplement un microcontrôleur (le « RP2040 »), monté sur carte PCB. Avec quelques composants « secondaires » tout autour, bien entendu 😉
Pour faire simple, cette carte « Pico » est donc :
- équivalente à une carte Arduino, d’un certain point de vue (car Arduino et Pico sont tous deux basés autour d’un microcontrôleur)
- et radicalement différente des autres cartes Raspberry Pi, qui sont, quant à elles, de véritables mini ordinateurs « tout-en-un » (car ceux-ci étant équipés de microprocesseur, mémoire, chipset vidéo, etc.)
À noter que la carte « Raspberry Pi Pico », ainsi que le microcontrôleur RP2040, ont tous deux été développés en 2020, par la société Raspberry Pi elle-même (Royaume-Uni), puis commercialisés début 2021. Ici, le but de la fondation Raspberry était de proposer :
- un produit complétant les « lacunes » de sa gamme de Raspberry Pi, avec cette fois-ci une carte à µC, plutôt qu’un nano-ordinateur à µP
- un produit performant (toute chose relative), bâti autour d’un microcontrôleur double coeur, fonctionnant jusqu’à 133 MHz (et même plus, en overclocking)
- et un produit à prix mini (environ 5 € « seulement », dans sa version « de base »).
Aperçu de la carte (Pico, Pico H, Pico W, Pico WH)
Avant d’aborder les caractéristiques techniques du Raspberry Pi Pico, je voulais avant tout vous donner un aperçu de ce à quoi ressemble une « carte Pico ». Ou plus précisément, à quoi peuvent ressembler les différents modèles qui existent sur le marché, à ce jour ! Car oui, il y en a plusieurs, même si au final, tous ne sont ni plus ni moins que des copies du Pico « originel », avec plus ou moins « d’options ».
Modèle | Pico « original » | Pico H | Pico W | Pico WH |
---|---|---|---|---|
Aperçu | ||||
Doté de « castellated holes » ? | Oui | Non | Oui | Non |
Équipé pour le WiFi ? | Non | Non | Oui | Oui |
Lien (description/prix) | Raspberry Pico (celui dont je me sers, ici) | Raspberry Pico H | Raspberry Pico W | Raspberry Pico WH |
Remarque : le modèle WiFi a l’air plus séduisant de prime abord. Mais attention ! Car justement « à cause » du WiFi, vous aurez moins de broches « libres » sur votre Pico (car certaines seront ainsi partagées avec le module WiFi). C’est pourquoi, si vous débutez, je vous conseille plutôt de partir sur le « Pico de base » (celui tout à gauche), qui offre le plus de liberté, selon moi !
Au niveau des différents modèles de Pico, on retrouve donc :
- le Raspberry Pi Pico « originel », doté de « castellated holes » (c’est à dire de trous crénelés, tout autour du PCB, matérialisant les broches externes). Ces trous permettent de souder le Pico à même un autre circuit imprimé, à l’image d’un CMS (composant monté en surface). Notez bien que ce Pico est aussi équipé de pastilles permettant d’y souder des rangées de picots (headers), pour ensuite pouvoir le monter sur support ou breadboard. C’est en fait le Raspberry Pico le plus complet qui soit, si on omet la partie WiFi.
- le Raspberry Pi Pico H, qui est une copie du Pico précédent, mais sans les castellated holes. Il n’est donc équipé que de « headers » (d’où le H de « Pico H »).
- le Raspberry Pi Pico W, qui reprend les bases du Pico « originel », avec en plus, la prise en charge du WiFi (comme le ferait un ESP32, si vous voulez).
- et le Raspberry Pi Pico WH, qui est donc un Pico doté d’un module WiFi (d’où le W), et seulement équipé de Header (d’où le H). D’où le « WH ».
À noter que tous les composants des cartes Raspberry Pi Pico sont soudés sur le dessus (il n’y en a aucun en-dessous). C’est d’ailleurs ce qui fait que les modèles à « castellated holes » peuvent être directement soudés à même un circuit imprimé ; avec simplement un peu de soudure par côté, comme on le ferait pour n’importe quel autre composant monté en surface (CMS).
Caractéristiques de la carte Pi Pico
Pour commencer, voici ce qu’on retrouve physiquement sur la carte Raspberry Pi Pico :
- un microcontrôleur RP2040 (32 bits, double coeur), configuré de base pour tourner à 125 MHz (fréquence qui peut être montée jusqu’à 133 MHz, et même, overclockée jusqu’à 270 MHz) ; à noter que ce MCU ne comporte aucune mémoire interne, pour contenir le programme à exécuter (donc ni FLASH ni EEPROM, dédié à cela).
- une mémoire FLASH série externe, de 16 Mbits (soit 2 Mo) ; c’est là où sera logé le programme à exécuter (à l’extérieur du µC, donc)
- un quartz de 12 MHz, à partir duquel le microcontrôleur génèrera son horloge (grâce à un module PLL interne au µC, qui lui permettra de « multiplier cette fréquence de base », pour l’augmenter au besoin)
- une prise micro USB, pour le raccordement à l’ordi ou autre (peut aussi bien servir à alimenter le Pico, qu’à le programmer)
- un convertisseur buck-boost (qui permet de délivrer du 3,3V au microcontrôleur, à partir d’une tension d’alim comprise entre 1,8 et 5,5 volts)
- un bouton BOOTSEL, qui permet de choisir entre un démarrage depuis la mémoire flash du Pico (bouton relâché à la mise sous tension), ou un démarrage (boot) depuis votre ordi, via le port USB (pour cela, il faudra appuyer le bouton BootSel avant d’alimenter votre Pico, et de le relâcher quelques instants après démarrage)
- une LED embarquée, de couleur verte, branchée sur la sortie GPIO 25 du microcontrôleur ; c’est une LED totalement libre d’utilisation (et très utile, lorsqu’on veut faire ses premiers pas, avec un programme « blink » !)
- 40 broches (dont 26 entrées/sorties GPIO « personnalisables »)
En image, voici où se situent tous ces éléments :
En pratique, la carte Pi Pico s’alimente soit à partir du +5V fourni par un câble USB branché sur elle, soit à partir d’une alim externe de 1,8 à 5,5 volts, branchée sur son entrée Vsys (que nous verrons en détail un peu plus loin, car il y a des choses importantes à savoir, à ce sujet).
Sinon, au final, tout tourne autour du microcontrôleur central, le MPU RP2040. Le reste n’étant là que pour « soutenir » ce µC (mémoire programme, régulation d’alim, horloge stable, etc.).
Du reste, pour plus d’infos, n’hésitez pas à aller faire un tour sur le site officiel de Raspberry (en anglais, par contre), pour compléter toutes ces infos (https://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.html).
Le brochage (pinout) du Raspberry Pi Pico
Afin d’avoir une vue d’ensemble, voici tout d’abord une image générale, vous montrant le brochage « complet » du Raspberry Pi Pico (pinout), avec toutes ces différentes entrées/sorties, et leurs différentes fonctions possibles (ALIM, GPIO, PWM, communication série UART/SPI/I2C, …) :
Comme vous pouvez le constater, une même broche GPIO (entrée/sortie configurable) peut se voir assigner une fonction particulière, parmi tout un panel disponible. Si on prend le cas de la broche GPIO 0, par exemple, cette pin peut servir :
- de ligne TX pour une communication UART (du port UART 0)
- de canal PWM (section 0, sous-section A)
- de ligne RX pour une communication SPI (du port SPI 0)
- de ligne SDA pour une communication I²C (du port I2C 0)
- ou de simple entrée/sortie numérique, « tout-ou-rien » (0 ou 1, état bas ou état haut donc, ou 0V / +3,3V si vous préférez !)
À noter qu’on ne peut attribuer qu’une seule fonction par pin GPIO en même temps, ce qui est logique d’ailleurs, pour éviter tout conflit.
À présent, je vais vous détailler toutes ces entrées-sorties, avec leurs « fonctions » assimilables (UART, I2C, SPI, ou PWM), ainsi que les broches restantes (alim, masses, entrées de contrôle, …).
Le port GPIO (entrées/sorties du RP2040)
Comme vous avez pu le constater dans l’image ci-dessus, la majeure partie des broches du Raspberry Pi Pico sont nommées « GPIO xx ». Les broches GPIO (de l’anglais « General Purpose Input Output ») sont en fait des entrées/sorties à « usage général » (c’est à dire pouvant servir à « ce qu’on veut »). Celles-ci proviennent directement du µC RP2040, figurant sur la carte Pico.
Ces pins GPIO sont de type tout-ou-rien pour la plupart, et analogiques pour quelques unes (3).
Au total, le microcontrôleur RP2040 nous offre 30 entrées/sorties, dites GPIO ; mais toutes ne sont pas libres d’usage pour nous, depuis les broches externes de la carte Pico. En effet, la fondation Raspberry, en concevant cette carte, a « réservé » certaines de ces entrées-sorties pour un usage particulier. Au final, ce sont finalement 26 broches GPIO qui seront « libres pour nous », et 4 qui seront réservées à un usage particulier (et donc, indisponibles pour nous).
Si je détaille ces 30 entrées/sorties GPIO, on retrouve :
- 26 GPIO « libres d’usage » ; ce sont d’ailleurs elles qui sont câblées tout autour de la carte Pi Pico (il s’agit des GPIO 0 à 22 et GPIO 26 à 28).
- 4 GPIO « réservées », qui sont les numéros GPIO manquants sur la carte (GPIO 23, 24, 25, et 29) ; celles-ci permettent de :
- piloter la LED embarquée sur la carte Pico, active à l’état haut (il s’agit de la GPIO 25).
- piloter le Power Safe Mode du convertisseur buck-boost du Pico (il s’agit de la GPIO 23).
- tester la présence ou non d’une tension provenant de l’USB, pour savoir si un câble USB est branché ou non sur le Pico (la broche testant cela est la GPIO 24) ; ce test se fait au travers d’un pont résistif, qui, à partir du +5V USB qu’on retrouve sur la ligne Vbus, nous donne, en sortie de pont, du +3,2 volts environ (indispensable pour attaquer le MCU RP2040, qui ne supporte pas plus de 3,3 volts).
- mesurer la tension Vsys, ou plus précisément 1/3 de Vsys (il s’agit de la GPIO 29). Au passage, cette tension Vsys est soit « égale » à la tension +5V USB, si un câble est branché sur la carte Pi Pico, soit à la tension de l’alim extérieure branchée sur le Pico sur la broche Vsys (alim qui fournirait une tension comprise entre 1,8 et 5,5V, afin de respecter les exigences du fabricant) ; ainsi, la tension entrante sur la GPIO 29 sera comprise entre 0,6 et 1,83 volts, puisqu’il n’entre qu’un tiers de Vsys sur cette pin, du fait de la présence d’un pont diviseur de tension dédié.
Finalement, nous avons bien là nos 26 entrées-sorties « libres », et les 4 « réservées » (qui ne figurent donc pas autour du PCB de la carte Pico, car celles-ci sont déjà utilisées « en interne »).
Remarque : une chose particulière à savoir est que chaque broche GPIO ne peut délivrer que 4 mA maximum, par défaut. Cela peut paraître peu, mais reste souvent suffisant, pour ce que nous en faisons. À noter que cette valeur est réglable au niveau des registres du microcontrôleur, avec comme choix possibles : 2mA, 4mA, 8mA, et 12 mA. Toutefois, sachez qu’à cette limite se rajoute une deuxième limite, à savoir : la somme des courants des pins GPIO (+QSPI de la mémoire flash série compris) ne doit pas dépasser 50 mA (cf. datasheet, au niveau des caractéristiques électriques du RP2040 : IOVDD_MAX = 50mA, et IOVSS_MAX = 50 mA). Donc, au final, retenez simplement : 4 mA max par GPIO, et 50 mA max sur l’ensemble des GPIO (pour rester dans les conditions « normales » d’utilisation, comme préconisées par le fabricant).
Les 2 ports UART
Nativement, le raspberry Pi Pico dispose de 2 ports UART, nommés UART0 et UART1. Ces deux ports sont indépendants l’un de l’autre, et leurs broches RX et TX sont « rattachables » à différents endroits (c’est à dire reliables à certaines broches GPIO plutôt qu’à d’autres, mais bien sûr, dans la limite de ce que nous propose le constructeur). Ainsi, vous avez une certaine liberté de choix, quant au câblage de vos broches GPIO, pour utiliser les ports UART du Pico.
Voici d’ailleurs la liste des pins GPIO assimilables aux lignes TX et RX des ports UART disponibles sur le Pico (lignes UART en jaune / broches GPIO en vert) :
Comme vous le voyez, le port UART 0 dispose de 3 lignes GPIO au choix pour son RX, et autant pour son TX. Et il en va de même pour le port UART 1.
À noter qu’il n’est pas obligatoire de sélectionner 2 broches GPIO contiguës (comme GPIO 0 et 1, si l’on souhaite par exemple utiliser le port UART 0). En effet, vous pourriez très bien utiliser les broches 0 et 17, pour le TX et le RX du UART 0. Ces broches sont « éloignées » l’une de l’autre, mais restent parfaitement fonctionnelles, et intéressantes parfois au moment du routage des pistes, dans nos applications ! Du reste, au final, seul compte le fait que vous preniez bien vos RX et TX sur le même port (UART0 ou UART1), sans faire de câblage à cheval sur les deux ports (car ils sont indépendants l’un de l’autre).
Les 2 ports I2C
De même, le Pi Pico dispose de 2 ports I²C, nommés I2C0 et I2C1. Ces deux ports sont là aussi indépendants l’un de l’autre, et leurs broches SDA et SCL sont reliables à différents endroits (c’est à dire qu’on peut les câbler aux broches GPIO qui nous intéressent, mais bien entendu, dans la limite de ce que permet le fabricant).
Histoire d’y voir plus clair, voici en image la liste des pins GPIO utilisables comme ligne SDA ou SCL pour les ports I2C du Pico (lignes I²C en orange / broches GPIO en vert) :
Comme vous pouvez le constater, les lignes SDA et SCL des ports I²C peuvent se brancher à plusieurs endroits, un peu tout autour du Pico ! Mais elles sont « affectables » à une seule pin GPIO à la fois, et une seule (vous ne pourrez donc pas avoir 2 pins GPIO différentes pour la ligne SDA du port 0, par exemple).
Là aussi, vous n’êtes pas obligé de prendre des pins GPIO contigües, comme GPIO 0 et 1 pour le SDA et SCL du port I2C 0. En effet, vous pourriez très bien prendre le SDA sur la GPIO 4, et le SCL sur la GPIO 21. Au final, seul compte le fait que vous travaillez sur le même port que vous câblez, ou plus clairement, que vous ne preniez pas le SDA d’un port avec le SCL d’un autre, en mélangeant le tout 😉
Les 2 ports SPI
Au niveau des lignes de transmission série filaire, la carte Pi Pico est également dotée de 2 ports SPI, nommés SPI0 et SPI1. Ces deux ports sont, là aussi, indépendants l’un de l’autre. Les lignes de signaux SPI peuvent être « raccordées » à plusieurs endroits possibles, sur la carte Pico.
Voici d’ailleurs le tableau de correspondance signaux SPI ↔ broches GPIO, pour ces deux ports SPI (lignes SPI en violet / broches GPIO en vert) :
Comme toujours, avec ce Raspberry Pico, vous avez un « large » choix de broches assimilables à tel ou tel signaux. Et vous n’êtes bien sûr pas obligé d’utiliser des numéros de broches GPIO consécutifs (comme GPIO 0/1/2/3 pour accéder aux signaux RX/CS/SCK/TX du port SPI0) ; en effet, vous pourriez très bien prendre les pins GPIO 0/5/18/7, pour câbler vos signaux RX/CS/SCK/TX du port SPI 0.
Libre à vous d’utiliser les broches qui vous plaisent, donc, mais toujours dans les limites de ce qu’autorise le fabricant 😉
Remarque : comme d’habitude avec le port SPI, vous allez retrouver différentes notations, d’un endroit à un autre. Pour y voir plus clair, retenez simplement que :
– CS = CSn = SS (et y’a encore bien d’autres dénominations possibles partout ici, pour nommer la même chose !!!)
– TX = MOSI = DO = SDO = SO
– RX = MISO = DI = SDI = SI
– SCK = SCLK = SCL
Les 16 canaux PWM
Pour compléter les ports de communication série, le Raspberry Pi Pico possède 8 paires de canaux PWM, soit 16 canaux PWM au total. Ces paires sont divisées en deux sections, A et B. Et les canaux sont : PWM0, PWM1, PWM2, PWM3, PWM4, PWM5, PWM6, et PWM7.
À noter que chaque PWM peut fonctionner en sortie, ou en entrée (pour de la mesure de fréquence, et de rapport cyclique). Et toutes les broches GPIO (0 à 29) peuvent techniquement fournir un signal PWM (même si, en pratique sur le Pico, il faudra exclure les 4 broches GPIO réservées, pour ne pas créer de conflits).
L’association pin GPIO ↔ canal PWM est la suivante (canaux PWM en bleu / broches GPIO en vert) :
Sur la base d’un RP2040 fonctionnant à 125 MHz, les fréquences PWM obtenables sur les sorties d’un Raspberry Pico vont d’environ 7,5 Hz à plusieurs mégahertz.
Nota : Les 7,5 Hz sont obtenus à partir d’une fréquence de fonctionnement du µC à 125 MHz, divisée par 255 (le max d’un prédiviseur d’horloge 8 bits, « branché » en amont), puis divisée par 65535 (le max du compteur 16 bits PWM). Ce qui nous donne : 125 000 000 / 255 / 65535 = 7,48 hertz environ. J’essaierai de vous détailler tout ça plus tard, dans un article plus spécifique, dédié au PWM.
Les 3 entrées analogiques (ADC)
De base, le Pico dispose de 5 ADC (convertisseurs analogiques → numérique), dont :
- 3 ADC libres pour nous, dont on peut disposer à souhait
- 1 ADC réservé à la mesure de la tension Vsys (ou plus exactement Vsys / 3, car mesuré au travers d’un pont diviseur de tension) ; en soi, cet ADC n’est donc « pas libre d’utilisation », pour nous
- 1 ADC interne au RP2040 (donc physiquement inaccessible pour nous, sauf de manière « logicielle » ; en effet, cette entrée ADC mesure la sonde de température interne du MCU, qu’on peut « consulter », au besoin)
Le « routage » de ces ADC est le suivant :
- l’ADC0 est relié à la pin GPIO 26 (« libre pour nous »)
- l’ADC1 est relié à la pin GPIO 27 (« libre pour nous »)
- l’ADC2 est relié à la pin GPIO 28 (« libre pour nous »)
- l’ADC3 est relié à la pin GPIO 29 (« réservé »), servant à la mesure de Vsys/3
- et l’ADC4 est connecté en interne du µC RP2040, à un capteur de température intégré (non accessible matériellement, donc, mais consultable logiciellement)
Tous ces ADC ont une résolution de 12 bits (valeur entre 0 et 4095, donc).
Important : il ne faudra JAMAIS exposer les entrées ADC à plus de 3,3 volts, au risque de les griller (à cause d’une diode interne, reliée vers le +3,3v de l’alim du µC)
Les broches d’alim (Vbus, Vsys, et 3V3)
Hormis les broches GPIO, on retrouve trois broches d’alimentation sur la carte Pi Pico, nommées :
- Vbus : qui correspond à la tension provenant du raccordement USB. Remarque :
- si aucun câble USB est branché sur le Raspberry Pico, alors Vbus sera égal à 0 volt
- si un câble USB est branché sur la carte, alors Vbus vaudra +5V, typiquement
- Vsys : qui correspond à :
- la tension Vbus – 0,3 volts, si un câble USB sous-tension est branché (et si aucune alimentation externe, avec une tension supérieure, n’est branchée sur l’entrées Vsys du Pico).
- la tension éventuellement fournie par une alimentation extérieure, si aucun câble USB sous-tension n’est branché (ou si cette tension USB-0,3V est inférieure à Vsys). Nota : si vous prévoyez d’alimenter votre Pico depuis l’entrée Vsys, vous devrez alors fournir une tension comprise entre 1,8 et 5,5 volts (ni plus, ni moins !), afin que le convertisseur buck-boost puisse « correctement » générer son 3,3 volts avec.
- 3V3 (out) : c’est la tension sortant du convertisseur buck-boost intégré à la carte Pi Pico (fixe, à 3,3 volts), généré à partir de la tension Vsys (qui doit être comprise entre 1,8 et 5,5 V). À noter que cette sortie ne pourra délivrer que 300 mA environ, en gardant bien à l’esprit que ce courant est partagé avec le microcontrôleur en lui-même.
Visuellement, voici où se trouvent ces broches d’alimentation, sur la carte Raspberry Pi Pico :
Vulgairement, du point de vue de la carte Raspberry Pico, on pourrait dire que :
- Vbus est une sortie d’alim
- Vsys est une entrée/sortie d’alim
- et 3V3 est une sortie d’alim
Nota : si jamais vous envoyez une tension via Vsys, mieux vaut systématiquement mettre une diode schottky entre votre alimentation externe et l’entrée Vsys, afin de ne créer aucun conflit remontant vers votre alim. En effet, gardez bien à l’esprit que du 5V-0.3, provenant de l’USB, arrive également en Vsys (si un câble USB sous-tension est en même temps branché sur la carte Pico, j’entends). Cela étant dit, il y a d’autres façons de réaliser ses branchements d’alim externe sur le Pico, notamment avec un mosfet piloté par Vbus. J’essayerai de vous détailler tout ça dans un autre article, détaillant cette partie alimentation du Pico.
Remarque : j’espère ne pas vous embrouiller en disant ça, mais techniquement, il est tout à fait possible d’envoyer une tension via la broche Vbus, si jamais aucun câble USB sous-tension n’est branché sur la carte Pico. Ainsi, cette tension reviendrait en Vsys, après être passée via la diode anti-retour D1 (cf. schéma carte électronique Pico, plus haut). La tension pouvant être envoyée de la sorte devra être comprise entre 2,1 et 5,8 volts (si on prend en compte les 0,3 volts de chute de tension, de la diode schottky). Mais perso, à moins d’y adjoindre une diode anti-retour de plus, je vous déconseille fortement cette approche ; car si jamais vous branchez par mégarde un câble USB sous-tension en même temps, pour risquez fort d’endommager certains éléments au passage, sans parler des conséquences qui pourraient en résulter.
La broche 3V3_EN
Cette broche permet tout simplement d’activer ou de désactiver le convertisseur buck-boost de la carte Pico, et par conséquent, d’alimenter électriquement ou non le microcontrôleur RP2040.
En fonction de ce que vous souhaitez faire, il suffit de :
- mettre l’entrée 3V3_EN à la masse, pour « couper » l’alimentation de la carte Pi Pico (et ainsi arrêter le fonctionnement du microcontrôleur)
- laisser l’entrée 3V3_EN flottante, pour que l’alimentation de la carte Pico fonctionne normalement
À noter que cette entrée 3V3_EN est reliée à une résistance pull-up de 100 kohms, sur la carte du Raspberry. Ce qui fait qu’elle n’est pas réellement flottante, même si on ne connecte rien dessus. Ainsi, le convertisseur buck-boost est toujours actif, par défaut (à moins qu’on relie volontairement cette entrée à la masse).
La broche RUN
Vous trouverez également une broche nommée RUN au niveau des pins de la carte Raspberry Pi Pico. Celle-ci permet soit d’activer le µC RP2040, soit de lui faire faire un reset.
Plus clairement :
- si vous laissez l’entrée RUN flottante, alors le µC RP2040 fonctionnera « normalement »
- si vous mettez l’entrée RUN à la masse, alors vous ferez un RESET du microcontrôleur RP2040, coeur même de la carte Pico
Dit autrement : c’est l’entrée qui vous permettra de faire un RESET du microcontrôleur RP2040, au besoin (en la mettant à l’état bas).
Du reste, il n’y a pas besoin de résistance de pull-up externe ici, pour ramener la tension RUN à +Vcc par défaut, car il y en a déjà une d’active, en interne du MPU (valeur : environ 50 kohms).
Les broches AGND et ADC VREF
La broche AGND représente la masse des entrées ADC (pins GPIO 26 à 29). Sur la carte Raspberry Pi Pico, cette masse est tout simplement reliée à la masse générale, GND. Donc ici, GND et AGND sont confondus.
La broche ADC VREF représente la référence de tension, pour les entrées ADC. Elle est plus ou moins reliée à la tension d’alimentation +3,3 volts de la carte, avec du filtrage au passage (afin de réduire le niveau de bruit, lors des mesures ADC).
Le schéma électronique (schematic) du Pico
À présent, voyons le schéma électrique de la carte Raspberry Pi Pico (en version PDF ici : https://passionelectronique.fr/wp-content/uploads/raspberry-pi-pico-schematic-board-rp2040.pdf, si vous préférez) :
Grosso modo, on retrouve 7 blocs importants :
- en haut à gauche : la prise USB (J1), qui alimente, via une diode anti-retour (D1), le convertisseur buck-boost (RT6150B-33GQW et ses composants autour). C’est ce convertisseur abaisseur-éleveur de tension qui fournira le +3,3V à toute la plaquette.
- à gauche, à mi-hauteur : la mémoire flash série (W25Q16JV), notée U3 sur le schéma, qui hébergera le programme de notre Pico. Celle-ci est accompagnée d’un bouton « BootSel », qui permettra de choisir entre un démarrage via le programme contenu dans cette mémoire flash, ou via le port USB.
- en bas à gauche : le pont diviseur de tension (R5/R6), avec une protection contre les surtensions (matérialisée par le mosfet Q1), qui permet au Pico de mesurer la tension Vsys / 3 (via son entrée ADC3, disponible sur la broche GPIO 29).
- au centre : le microcontrôleur RP2040, véritable coeur du Raspberry Pico (avec l’alimentation filtrée pour l’ADC à proximité, avec R7/R9/C13).
- en haut à droite : l’aperçu de toutes les pins externes de la carte Pico (40 broches, au total).
- à droite, à mi-hauteur : la LED embarquée sur la carte Pico, branchée sur la sortie GPIO 25 ; ainsi que le port de DEBUG (J2)
- et en bas à droite : le quartz de 12 MHz qui cadence le µC RP2040 (ce dernier élèvera cette fréquence de base à près de 125 MHz, par défaut, via son PLL interne)
Au final, ce schéma électronique est plutôt « simple », en fait (quand on l’analyse bloc par bloc, j’entends). Car tout se résume principalement à : un microcontrôleur (le RP2040) , sa mémoire flash externe, son alim buck-boost, et quelques composants tout autour.
Voilà ! Je ne rentre pas plus dans les détails ici, afin de ne pas vous noyer d’infos « secondaires », vis à vis de cet article-découverte, sur le Raspberry Pi Pico.
Comment programmer la carte Raspberry Pico ?
Il existe de nombreuses façons de programmer son Raspberry Pi Pico. Pour ma part, j’essayerai de vous en présenter au moins deux, fonctionnant sous Windows (je vous mettrai les liens dès que j’aurai fait un article dessus), parmi :
- la programmation en micropython, avec Thonny IDE (article à venir prochainement)
- la programmation en C/C++, avec Visual Studio Code (article à venir plus tard)
- la programmation en C/C++, avec l’IDE Arduino (très pratique si vous avez l’habitude de travailler avec cet environnement, mais très peu optimisé pour le pico, et avec encore pas mal de bugs au niveau compatibilité des librairies)
Sinon, en attendant, vous trouverez pas mal de tuto sur YouTube vous expliquant comment faire cela (mais en anglais, la plupart du temps). Au niveau des OS, on retrouve surtout des tuto pour Linux et Windows, et Mac un peu moins. Mais dans le principe, c’est relativement facile à mettre en œuvre, ne vous inquiétez pas 😉
Galerie photos (déballage, soudage des pins, …)
J’en profite pour vous mettre quelques photos d’un Raspberry Pi Pico neuf que j’avais sous la main, afin de mieux vous représenter ce que vous recevrez, si jamais vous en commandez un (les rangées de picots, headers, n’étaient pas fournies, et donc, pas soudées) :
Remarque : eh oui ! Le Pico est logé dans une « bande à bordures perforées », du même type que celles qui contiennent nos petits composants CMS. Et pour cause ! Car le Raspberry Pi Pico est lui aussi prévu pour être monté via des machines d’insertion automatique de composants, comme n’importe quel autre CMS (si ce n’est sa taille, qui est certes bien plus imposante que bon nombre de nos petits CMS !).
Une des seules choses que je lui reproche : le fait qu’il n’y ait aucune dénomination des broches, sur le dessus de la carte Pico (ce qui est très pénible, lorsqu’on fait ses essais sur breadboard). En clair : on ne sait pas à quoi correspond telle ou telle broche extérieure, à moins d’aller voir ce qu’il y a d’écrit dessous la carte Pico, ou d’avoir son brochage/pinout sous les yeux. C’est dommage, même si ça peut sembler être un détail ! Sinon, il aurait été « parfait » 😉
Conclusion
J’espère que cette intro découverte du Raspberry Pi Pico vous aura plu, et qu’elle vous servira de support dans votre apprentissage !
Du reste, je rentrerai plus dans le détail de chaque partie/section/fonction du Pico à l’occasion d’articles plus spécifiques (sur comment générer un signal PWM, comment lire une entrée analogique, etc.). Ainsi, vous aurez une base pour tous vos futurs projets 😉
Sur ce : amusez-vous bien, et à bientôt !
Jérôme.
À découvrir aussi : les différents protocoles de communication série filaire (I²C, SPI, UART, …)
(*) Mis à jour le 01/07/2023
Bonjour Jerome, tout d’abord merci pour cet article très passionnant, il y longtemps que je voulais mettre le nez dedans mais manque de détails approfondis j’ai renoncé.
Ensuite, je te souhaite à toi aussi mes meilleurs vœux pour l’année 2023 et encore merci pour tous les articles que tu nous offres.
Merci, et de rien !
Très bonne année à toi aussi 😉
Un grand merci à Laurent (il se reconnaîtra !), pour m’avoir remonté l’erreur au niveau des étiquettes du tableau « avec et sans WiFi ».
Merci encore !
Merci Jérome, très intéressant ton article, j’attends la suite.
Bonne année 2023
À toi aussi, et merci !
Bonjour,
Vos articles sont remarquables et je les salue.
Je ne suis qu’un amateur très amateur mais passionné et curieux.
Je vous remercie et ai hâte de recevoir les newsletter à venir.
Bonne et heureuse année.
Cordialement
Peter
Salut Peter,
Bonne année à toi également !
À venir prochainement : un indicateur de niveaux de tension, pour batterie auto 12V ! Alors à très bientôt 😉
Jérôme.
Bonjour Jérôme,
Merci beaucoup de ces infos !
Je viens de m’acheter un raspberry pico, et j’étais un peu en galère car je manquais de documentation. J’ai le pressentiment que ces tutos me seront très utiles …
Comment fais-tu pour ajouter une bibliothèque sur le pico, en micropython ? J’ai beaucoup cherché mais je n’ai pas trouvé, donc quand je fais from…import, il y a une erreur (module not found).
Merci encore et bonne journée
Guilhem
Salut Guilhem !
Concernant micropython : si tu te sers de Thonny IDE, comme moi, il te faut tout d’abord installer la librairie, pour pouvoir l’importer ensuite dans ton code.
Pour cela, il faut que tu ailles dans le menu « Gérer les paquets » (grisé/inactif par défaut, si aucun Pico n’est « repéré » par Thonny).
Pour ce faire, il faut que :
– tu branches un Raspberry Pico sur ton ordi
– tu cliques sur le bouton STOP, dans la barre d’icône, sous le menu ; ainsi, Thonny établira une connexion avec ton Pico, ce qui aura pour effet de dégriser le menu « Gérer les paquets »
– et que tu entres dans le menu Outils > Gérer les paquets
À partir de là, il faudra que tu saisisses du texte, te permettant de trouver la librairie que tu cherches (par ex : taper « ssd1306 » pour trouver la librairie permettant de piloter les petits écrans OLED, à chipset SSD1306).
Sinon, je détaillerai tout ça au fil du temps, avec des images à l’appui (pour que ce soit plus parlant !)
Voilà ! Bon courage à toi.
Jérôme.
Merci beaucoup de tes conseils, vivement le prochain tuto !
Merci pour ce tuto très interressant.
Super article très très bien fait, un grand merci et je suis comme d’autres très impatient de lire la suite
Excellente année à toi et tes proches
Bernard
Franchement super, clair net et précis, difficile de faire mieux. Merci
Encore un super tuto !
Je suis très Arduino, sans vraiment l’envie de passer au Raspberry par manque de connaissances. J’attends donc avec impatience la suite de ce tuto, mais je vais me commander un Pico pour être prêt à tester.
Bravo Jérôme pour cet article très complet.
Je mesure le travail pour le maintien et le contenu du site, vraiment chapeau !
Un petit témoignage de l’utilisation du Pico dans un premier temps pour la réalisation d’un automate d’analyse avec un TFT 3,5″ qui enregistre les données, horodatées à l’aide d’une RTC, sous forme de fichier csv sur une micro SD, SD raccordé sur le SPI1. L’écran lui est sur le SPI0, les capteurs sur le wire0 et la RTC sur le wire1. Puis je viens d’opter pour le Pico W qui permet grâce à la connexion wifi de récupérer le temps UTC afin de synchroniser la RTC. De m’envoyer le fichier csv grâce à un client smtp embarqué et aussi un petit serveur web embarqué qui affiche la courbe en temps réel. Le produit est nouveau, il y a eu quelques plantages sur la partie serveur http, mais depuis la dernière mise à jour des librairies, franchement c’est très correct.
Ébahi par tout ce que l’on peut faire avec ce Pico qui rappelons le, est quand même bon marché. J’utilise l’IDE Arduino pour le développement. Il ne faut pas avoir peur de se lancer, le produit commence à être bien documenté.
Bonsoir
Très bon travail, et présentation originale.
Concernant ta dernière note « Une des seules choses que je lui reproche… », il suffit de le brocher de l’autre coté. La led 25 est suffisamment forte pour la voir, et les éléments ne sont plus visibles, mais bon …
Amicalement
Charles
Bonsoir Charles !
Oui, mais si tu fais comme ça, tu auras difficilement accès au bouton poussoir « bootsel », qui va alors se retrouver dessous. Après, rien n’est insurmontable, je suis d’accord avec toi 😉
Bonne soirée à toi,
Jérôme.
Merci, une vrai source très utile. Bravo
De rien ! Et merci à toi, pour ce retour 😉
Bonjour Jérôme
Et déjà merci pour toutes ces précisions bien utiles.
J’ai une question à laquelle je n’arrive pas à trouver de réponse sur le net : quel est l’état par défaut d’une GPIO avant que le code ne la configure ? J’ai envie de raccorder une GPIO à un ensemble (leds + résistance) lui même raccordé au final à la masse et je n’ai pas envie que cet ensemble tire du jus sur la GPIO avant que la ligne de configuration correspondante ne soit exécutée.
Merci par avance des infos que tu pourras m’apporter.
Jérôme (aussi ;o)
Salut Jérôme 😉
Alors, d’après la doc du RP2040 (µC embarqué sur la carte Pico), les registres des lignes GPIO 0 à 29 sont définis comme suit (après un RESET / MISE SOUS TENSION) :
– INPUT (définit les broches GPIO en entrées, donc)
– PULL DOWN ENABLE (une résistance amène donc chaque INPUT à la masse)
Du coup, sauf erreur de ma part, il n’y a pas de risque que des LEDS s’allument « toutes en même temps », au démarrage !
Voilà ! Bonne journée à toi 🙂
Jérôme.
Afin de filtrer au maximum les messages de type "spam" ou "inappropriés", chaque commentaire est soumis à modération, et validé manuellement. Du coup, il se peut que certains commentaires ne soient pas publiés, ou sinon, avec un peu de retard. Par ailleurs, j'ai malheureusement plus de messages à traiter que de temps pour y répondre ; c'est pourquoi je ne pourrais pas répondre à tout le monde. Désolé …