PYBStick RP2040

En 2020, je vous avais présenté la PYBStick26, une carte de développement compacte, peu couteuse, programmable en MicroPython et fabriquée en France.

Mais depuis, la fondation Raspberry a sorti le Raspberry Pico. Il reprend quasiment le même format et peut aussi être programmé en MicroPython. Entretemps, le prix du microcontrôleur STM32 (utilisé par la PYBStick26) a beaucoup augmenté à cause des problèmes actuels de pénurie. Frédéric Pierson (de Garatronic) et Dominique Meurisse (de MC Hobby) ont décidé de proposer une nouvelle PybStick équipée cette fois-ci du microcontrôleur RP2040 (le même que le Raspberry Pico).

J’en ai reçu gratuitement un exemplaire, nous pouvons donc considérer qu’il s’agit d’un article sponsorisé, cependant je conserve une totale liberté pour écrire cet article. Les liens en bas de page ne sont pas affiliés mais je risque peut être de manquer un peu d’objectivité, car ce sont des amis et j’admire beaucoup leur travail.

Les connecteurs sont fournis, mais ils ne sont pas soudés d’avance. Je trouve que c’est une très bonne chose puisque cela laisse le choix du type de connecteurs (Male ou Femelle) et éventuellement de la couleurs. Il est également possible dans certains cas de souder directement les bornes de la PYBStick à une carte d’extension ou à des fils.

Cela dit (dans le cadre de ce test), je n’ai pas fait dans l’originalité, j’ai simplement soudé les connecteurs femelle afin de conserver la compatibilité avec les cartes d’extensions au format de la PYBStick.

Par rapport aux modèles précédents, j’apprécie énormément l’ajout d’inscriptions pour indiquer le nom des ports. C’est tellement pratique de relier un composant électronique à la carte sans être obligé de consulter la documentation. Amis Presbytes, n’hésitez pas à sortir les lunettes parce que c’est quand même écrit un peu petit. Mais avec une carte de cette taille, impossible de faire autrement.

Comme le format de la nouvelle version est parfaitement identique, vous pouvez sans problèmes utiliser le même boitier (conçu par Frédéric Pierson et disponible sur Thingiverse).

En ce qui concerne l’emplacement des ports, la carte est presque complètement compatible avec les anciennes versions. Les numéros de pin ne sont pas exactement les mêmes et il y a seulement 1 bus série (UART) au lieu de 2, mais ce n’est vraiment pas un souci puisqu’il suffit simplement d’adapter le code. Le plus important c’est la compatibilité matérielle, le ports VBUS, Vin, 3.3V, GND, Reset et la plupart des bus sont situés au même endroit. Il n’y a donc aucun risque d’abimer la carte en réutilisant les cartes d’extension prévues à l’origine pour la PYBStick26.

Programmation

Pour ce qui est de la programmation de la carte, c’est exactement comme avec le Raspberry Pico (puisque le microcontrôleur est identique). Il faudra donc télécharger et installer Thonny. Je ne vais pas réexpliquer ici toute la procédure, mais si vous avez besoin d’aide, vous trouverez les instructions nécessaires dans mon article de présentation du Raspberry Pico.

Sachant que les 4 LED internes de la PYBStick RP2040 (rouge, verte, orange, bleue) sont reliées au ports (23, 25, 14, 15), vous pouvez commencer par une petite animation de ce type. Cela permet de vérifier que vous arrivez à communiquer avec la carte.

# Appel des bibliothèques
from machine import Pin
from time import sleep
# Création des variables "led"
ledRouge = Pin(23, Pin.OUT)
ledVerte = Pin(25, Pin.OUT)
ledOrange = Pin(14, Pin.OUT)
ledBleue = Pin(15, Pin.OUT)
# Boucle infinie
while True:
  # Allume la LED rouge
  ledRouge.value(1)
  # Attends 0,5 secondes 
  sleep(0.5)
  # Allume la LED verte
  ledVerte.value(1)
  # Attends 0,5 secondes 
  sleep(0.5)
  # Allume la LED orange
  ledOrange.value(1)
  # Attends 0,5 secondes 
  sleep(0.5)
  # Allume la LED bleue
  ledBleue.value(1)
  # Attends 0,5 secondes 
  sleep(0.5)
  # Eteins toutes les LED
  ledRouge.value(0)
  ledVerte.value(0)
  ledOrange.value(0)
  ledBleue.value(0)
  # Attend 1 seconde 
  sleep(1)

Pour pouvoir utiliser la PYBStick RP2040 directement avec une breadboard, j’ai simplement rajouté quelques connecteurs males. En plus on voit le nom des pins (désolé, je sais que je vous en ai déjà parlé, mais je suis vraiment trop content…).

Pour info, voilà le code utilisé, mais évidement il faudra l’adapter si vous ne branchez pas la LED sur la pin IO9.

from machine import Pin
from time import sleep
ledExterne = Pin(9, Pin.OUT)
while True:
  ledExterne.value(1)
  sleep(1)
  ledExterne.value(0)
  sleep(1)

Cartes d’extensions

Les différentes PYBStick sont extrêmement compactes, ce qui est plutôt pratique lorsqu’il s’agit de l’intégrer dans un boitier. Mais forcement, elle n’est pas aussi confortable à utiliser qu’une carte plus grande (comme… heu, au hasard… l’Arduino).

Je vous avais parlé de la HatFace, une carte d’extension qui permet de relier la PYBStick26 aux HAT Raspberry Pi (elle reste bien sûr compatible avec la nouvelle PYBStick RP2040).

Mais la Proto Face (sortie quelques mois plus tard) est encore plus intéressante, puisqu’elle offre :

  • 3 emplacements par ports de la PYBStick26, avec les numéro clairement indiqués (comme sur un Arduino)
  • 2 connecteurs Grove (déjà soudés)
  • 1 bornier d’alimentation 5V à souder (fourni avec la carte)
  • 2 rangées de 13 connecteurs males à souder (pour insérer la PYBStick26)
  • 3 emplacements par ports de la PYBStick26, avec les numéro clairement indiqués. Vous pouvez choisir de souder des connecteurs males ou femelle, mais attention ils ne sont pas fournis.
  • 1 emplacement pour un connecteur au format UEXT (non fourni avec la carte)
  • 1 emplacement pour connecteurs au format Raspberry GPIO (et relier la carte aux HAT Raspberry Pi)
  • Une vaste aire de prototypage de 296 points pour ajouter les composants de votre choix
  • 2 boutons poussoirs (RESET et DFU)

Je voulais vous en parler depuis un moment mais j’ai rencontré un problème en testant l’exemplaire que j’avais acheté (le bouton Reset créait un court-circuit qui empêchait l’utilisation de la Pybstick). J’en ai discuté avec Frédéric et Dominique et ils m’ont conseillé de dessouder le bouton Reset. Evidement, on perd cette fonction mais au moins, tout le reste fonctionne. Au moment où j’écris ces lignes, la carte n’est plus en stock, mais j’espère qu’une nouvelle version version (corrigée) paraitra bientôt, parce que (à part ce petit problème) la carte est vraiment agréable à utiliser.

La carte est au format du Raspberry pi (les 4 trous ont aussi le même écartement). C’est très pratique, puisse qu’on peut très facilement trouver des boitiers ou des supports compatibles.

Evidement, on ne peut pas se fier au nom des pins inscrits sur la carte Proto Face (puisqu’ils correspondent à la PYBStick26). Mais là encore, les inscriptions sur la PYBStick RP2040 s’avèrent extrêmement utiles (oui, je sais, vous allez finir par penser que je radote, mais c’est seulement la 3ème fois que je le dis).

Il est possible de relier des composants électroniques à une mini breadboard (le code est identique à celui de l’exemple précédent).

Ou brancher de directement un module, comme par exemple le feu tricolore.

# Appel des bibliothèques
from machine import Pin
from time import sleep
# Définition des éléments reliés aux ports du Pico
ledRouge = Pin(16, Pin.OUT)
ledOrange = Pin(17, Pin.OUT)
ledVerte = Pin(13, Pin.OUT)
# Boucle infinie
while True:
  # Feu vert
  ledRouge.value(0)
  ledOrange.value(0)
  ledVerte.value(1)
  # Attends 5 secondes 
  sleep(5)
  # Feu orange
  ledRouge.value(0)
  ledOrange.value(1)
  ledVerte.value(0)
  # Attends 1 seconde
  sleep(1)
  # Feu rouge
  ledRouge.value(1)
  ledOrange.value(0)
  ledVerte.value(0)
  # Attends 5 secondes
  sleep(5)

Vous pouvez également utiliser l’un des 2 connecteurs Grove. Ils sont branchés en parallèle au bus I2C(0), c’est à dire aux pins IO16 (SDA) et IO17 (SCL). Mais rien n’empêche d’utiliser à la place un module de base (LED, buzzer, bouton poussoir, potentiomètre…).

from machine import Pin
from time import sleep
ledExterne = Pin(17, Pin.OUT)
while True:
  ledExterne.value(1)
  sleep(1)
  ledExterne.value(0)
  sleep(1)

Pour tester la communication avec le bus I2C, j’ai reproduis le thermomètre de l’article consacré au PicoHat (avec un afficheur LCD 1602 Grove).

Je vous donne le code utilisé, mais pour plus de détails, n’hésitez pas à relire l’article en question.

from lcd1602 import LCD1602
from machine import I2C,Pin,ADC
from time import sleep
i2c = I2C(0,scl=Pin(17), sda=Pin(16), freq=400000)
d = LCD1602(i2c, 2, 16)
sleep(1) 
while True:
  # Calcul de la température
  adc = ADC(ADC.CORE_TEMP)
  vadc = adc.read_u16() * 3.31 / 65535
  temp = int (27 - (vadc - 0.706) / 0.001721)

  # Affichage du texte
  d.home()
  d.print('Salut Arduiblog')
  d.setCursor(0, 1)
  d.print('Temperature : ')
  d.print(str(temp))
  sleep(1)

Je n’ai pas testé les autres options de la carte PROTO-FACE, mais si cela vous intéresse je vous invite à consulter la fiche produit (en bas dans les liens). De mon coté, j’ai un petit projet en tête, mais je vous en reparlerai le moment venu.

Conclusion

Difficile de ne pas comparer la PYBStick RP2040 au Raspberry Pico. Le format, le nombre de connecteurs et de LED internes sont différents, mais toutes les autres caractéristiques (performances, firmware, programmation…) sont identiques puisque le microcontrôleur est le même.

La production de la PYBStick RP2040 (située en France) est beaucoup plus artisanale (ce qui explique la différence de prix). Pour concurrencer la fondation Raspberry, je pense qu’il faudrait proposer des modules ou des kits attractifs autour d’un thème (robot suiveur de ligne, station météo, jeu Simon, manette de jeu…).

Sources et liens utiles


Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s