La carte PyBStick26 rassemble dans un volume réduit tout ce qu’il faut pour réaliser un projet Maker. Après sa présentation dans un précédent article, je vous propose de la mettre en œuvre avec MicroPython sur un Raspberry Pi.
Au sommaire :
- 1 Connecter la carte PyBStick26 au Raspberry Pi avec MicroPython
- 2 Conclusion
Connecter la carte PyBStick26 au Raspberry Pi avec MicroPython
Deux modèles de cartes
Le processeur de la carte PyBStick est le même que celui de la carte originelle PyBoard. La carte existe en plusieurs déclinaisons
- la PyBStick Lite équipée d’un STM32F401CE, disposant de 512 Ko de mémoire Flash et 96 Ko de RAM. C’est une plateforme très économique moins de 10 Eur sur laquelle il faudra souder les connecteurs et la fiche USB (cela ne devrait prendre que quelques minutes).
- la PYBStick Standard 26 équipée d’un STM32F411 à 100 MHz, un microcontrôleur plus puissant que la version Lite, disposant de 512 Ko de Flash et 128 Ko de RAM. Il s’agit de la même famille de microcontrôleur que sur la carte MicroPython Pyboard originale, ce qui assure un excellent support MicroPython pour la plateforme.
Préparer le Raspberry Pi
Pour les manips qui suivent, j’ai opté pour le Raspberry Pi 4 qui est sur le bureau. Après la classique mise à jour
1 2 |
sudo apt-get update sudo apt-get upgrade |
J’ai choisi d’installer screen qui est un gestionnaire multi-terminaux (multiplexeur de terminaux) que vous pouvez découvrir plus en avant sur la page que lui consacre Ubuntu.
1 |
sudo apt-get install screen |
et… c’est tout
On peut maintenant connecter la carte au Raspberry Pi
Connecter la PyBStick26 au Rapberry Pi
Bin… Comment vous dire ? Il suffit de connecter la prise USB de la carte PyBStick26 dans une des prises USB du Raspberry PI.
Ça va vous suivez toujours ? 😀
La détection de la carte par le Raspberry Pi
Dès que vous connectez la carte PyBStick26 au port USB du Raspberry Pi, Vous voyez apparaître la carte comme si vous aviez inséré une clé USB nommée PYBFLASH. La fenêtre qui s’ouvre vous invite à ouvrir le gestionnaire de fichiers sur cette clé.
Comme vous le voyez il n’y a pas de manip compliquée à faire, puisque le simple fait de connecter cette carte vous permet d’accéder à la mémoire et d’y déposer votre programme.
Et vous accédez au contenu de la mémoire. Nous allons voir que le programme qui nous intéresse ici est main.py qui va être exécuté automatiquement lors de la mise sous tension de la carte.
Écrire un programme en MicroPython
Le programme principal main.py
L’objet de cet article n’est pas de faire un cours sur MicroPython, mais de vous montrer comment accéder à la carte et exécuter vos programmes. Si vous cherchez des infos sur MicroPython, Il y a un livre de Dominique (MCHOBBY) paru aux Éditions ENI qui vous donnera toutes les informations utiles : MicroPython et Pyboard.
Pour commencer on va ouvrir le programme main.py en double cliquant dessus :
Par défaut le programme est vide et ne contient qu’une ligne qui vous indique que vous pouvez écrire votre code.
[stextbox id=’warning’ caption=’Pas gentil, Thonny’]Attention, comme on ouvre un programme avec l’extension .py (Python) c’est l’IDE Python par défaut du Raspberry Pi qui s’ouvre. MAIS Thonny fonctionne avec le Python du Raspberry Pi (vous me suivez toujours ?) et pas avec le MicroPython de la carte ! Ca veut dire que si vous exécutez votre programme main.py dans Thonny vous allez avoir plein d’erreurs car ce n’est pas le bon Python qui exécute votre programme… Je vous aurai prévenu(e)…[/stextbox]
Allez on est partis pour un premier programme.
Que la lumière soit ! (fiat lux)
La carte PyBStick26 embarque 4 LED de couleurs différentes (bleu, jaune, vert et rouge). Bon si vous êtes daltonien comme moi, la bleue ça va encore mais les autres …
Ce sont ces LED qui vont nous servir pour notre première tentative d’écriture de programme. Et n’oubliez pas que le « Hello World » de l’électronicien c’est de savoir allumer une LED. Ça prouve qu’on est capable de gérer (encore imparfaitement, mais quand même) la chaîne de fonctionnement d’un microcontrôleur. J’ai l’habitude de dire que quand tu sais allumer une LED, tu peux piloter une centrale nucléaire… Bin oui tu remplaces la LED par un relais qui allume une lampe sous 240v dont le courant provient du centrale nucléaire. Mais on peut aussi ouvrir un portail, déclencher une sirène etc. La LED c’est la porte d’entrée du microcontrôleur… Enfin, c’est mon avis, et je le partage.
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
from pyb import LED from time import sleep l1 = LED(1) l2 = LED(2) l3 = LED(3) l4 = LED(4) # Allume l1.on() l2.on() l3.on() l4.on() sleep (0.5) l1.off() l2.off() l3.off() l4.off() sleep (0.5) # Chenillard for i in range (1, 6): l1.on() sleep(0.5) l1.off() l2.on() sleep(0.5) l2.off() l3.on() sleep(0.5) l3.off() l4.on() sleep(0.5) l4.off() # Allume toutes les LED l1.on() l2.on() l3.on() l4.on() sleep (0.5) l1.off() l2.off() l3.off() l4.off() sleep (0.5) |
Comme vous pouvez le constater je ne me suis pas foulé, c’est du Python de bas étage mais ça me va bien. Ici pas de boucle, du linéaire. On fait simple pour commencer.
WordPress n’autorise pas de joindre des fichiers en Python, je vous ai mis les 2 programmes de cet article sous forme de .zip que vous pouvez télécharger en cliquant sur ce lien.
Si vous regardez de près le programme : On importe ce qui va nous être utile (LED et sleep), on allume les 4 LED en les mettant à ON, après 0,5 seconde on éteint tout le bazar et on lance le chenillard qui allume les LED les unes après les autres plusieurs fois de suite. On finit en beauté en rallumant toutes les LED une dernière fois et… c’est fini. Le programme s’arrête. On va voir après comment faire un programme qui tourne indéfiniment.
Enregistrez le programme, éjectez proprement la « clé USB » avec l’icône d’éjection en haut à droite à côté du Bluetooth. Redémarrez le Raspberry Pi ou alors plus simple, débranchez et rebranchez la carte PyBStick26.
Si tout va bien, vous verrez le fonctionnement comme sur la vidéo ci-dessus. Si ça ne fonctionne pas revérifiez soigneusement ce que vous avez écrit, et allez un peu plus loin à la rubrique REPL pour en savoir un peu plus. Ici j’ai fait un reboot du Raspberry Pi, ce qui a redémarré la carte PyBStick26.
J’ai un bouton qui me démange
Enfin non, le bouton il est sur la carte. Il y a deux boutons un pour passer en mode DFU (pour programmer la carte – mais c’est une autre histoire) et un qui est réservé à l’utilisateur (l’autre aussi d’ailleurs peut être au service de l’utilisateur).
On va rentrer un autre programme dans main.py. Rouvrez le programme et remplacez le programme précédent par celui-ci :
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 26 27 28 29 30 31 |
# main.py -- put your code here! from pyb import LED from pyb import Switch from time import sleep l1 = LED(1) l2 = LED(2) l3 = LED(3) l4 = LED(4) sw = Switch() while True: # Si le bouton A = User Switch est appuyé if sw.value(): # Allume les LED l1.on() l2.on() l3.on() l4.on() # Informe l'utilisateur print ("Bouton appuyé") # Si le bouton est relâché, éteindre les LED else: l1.off() l2.off() l3.off() l4.off() # Informe l'utilisateur print ("Bouton relaché") |
Cette fois les LED sont éteintes au démarrage et si on appuie sur le bouton elles s’allument toutes les 4. En même temps, le programme envoie une info vers le port de sortie. Elle s’affichera à l’écran… dans la prochaine rubrique. Soyez patient(e) on ne peut pas tout voir en même temps 😉
Ici on ajoute Switch qui va nous servir à lire l’état du bouton poussoir. C’est la boucle while qui fait tourner le programme indéfiniment puisque la condition est toujours vraie. Ensuite on teste dans la boucle si le bouton est appuyé. S’il l’est (appuyé) on allume les LED. Sinon on les éteint.
Comme tout à l’heure enregistrez le programme, éjectez proprement la « clé USB » avec l’icône d’éjection en haut à droite à côté du Bluetooth. Redémarrez le Raspberry Pi ou alors plus simple, débranchez et rebranchez la carte PyBStick26.
Ça devrait faire comme sur la vidéo ci-dessus, allumer les LED quand on appuie sur le bouton.
Si vous voulez en savoir plus je vous conseille de lire la page de Dominique qui donne plein d’exemples en REPL (on y vient tout de suite) mais qui sont facilement transposables dans main.py. Dans l’exemple ci-dessus extrait de cette page, la luminosité de la LED varie (PWM) en fonction de la position du potentiomètre…
Utilisation de l’interface REPL
REPL, c’est quoi donc ?
Depuis le temps que je vous en parle… la voici
L’interface USB de la carte PyBStick26 permet également à la PYBStick d’exposer un port série pour communiquer avec le Raspberry Pi ainsi qu’un interpréteur de commande Python interactif appelé REPL.
L’interpréteur de commande REPL permet:
- De voir les messages envoyés par vos script MicroPython,
- D’interagir avec vos scripts en cours de fonctionnement (arrêter le script, inspecter l’état de variables)
- De tester des scripts en cours de développement (importation à la volée avec la commande import).
- De saisir des instructions Python pour tester des fonctionnalités de la plateforme microcontrôleur de façon interactive.
Démarrer l’interface REPL
Au début de cet article, je vous ai fait installer screen. Si ce n’est pas fait c’est le moment !
Pour les premiers essais effacez le contenu du fichier main.py sur la carte PyBStick26. Rebootez le Raspberry Pi.
Ouvrez screen en tapant la commande suivante dans une fenêtre de terminal
1 |
screen /dev/ttyACM0 |
Vous obtenez l’affichage suivant envoyé sur son port série par la carte PyBStick :
1 2 3 4 |
MPY: can't mount SD card MicroPython v1.12-256-geae495a-dirty on 2020-03-31; PYBSTICK26_LITE with STM32F411CE Type "help()" for more information. >>> |
et vous obtenez le prompt de Python, composé de trois signes > . L’indication à propos de la carte SD est normale, car je n’ai pas mis de carte SD dans le lecteur.
Pour tester et vérifier que la carte répond essayez ceci :
print(« test ») fait afficher sur la ligne suivante test
Ensuite on importe la bibliothèque sys et on affiche la version du système. Tout va bien 😛 Vous pouvez maintenant si vous le souhaitez réaliser les nombreuses manips que vous propose Dominique sur la page github de la carte PyBStick26.
Affichage d’erreur sur REPL
Nous disposons maintenant d’un outil connecté à la carte PyBStick26. Je vous propose de créer une erreur dans le programme pour voir ce qui se passe.
[stextbox id=’info’ caption=’Attention aux erreurs !’]C’est intéressant de voir ceci car des erreurs… on en fait forcément quand on teste des programmes, alors autant commencer par ça[/stextbox]
Ça marche pas !
Commencez par ouvrir main.py (il devrait être vide maintenant) et saisissez le programme suivant :
1 2 3 4 5 6 7 8 9 10 |
# main.py -- put your code here! from pyb import LED from time import sleep l1 = LED(1) while True : led1.on() sleep(0.5) led1.off() sleep(0.5) |
Un simple programme pour faire clignoter la LED 1. La boucle infinie while true : fera s’exécuter ce programme en permanence. Il n’aura pas échappé à votre sagacité que la LED créée au début du programme s’appelle l1 et que j’ai utilisé led1 dans la boucle… donc… ça marche pô !
Redémarrez le Raspberry Pi (ou débranchez/rebranchez la PyBStick26) et observez le résultat dans le terminal (il faut relancer screen /dev/ttyACM0). Vous obtenez ceci :
1 2 3 4 5 6 7 8 |
MPY: can't mount SD card Traceback (most recent call last): File "main.py", line 7, in NameError: name 'led1' isn't defined MicroPython v1.12-256-geae495a-dirty on 2020-03-31; PYBSTICK26_LITE with STM32F411CE Type "help()" for more information. >>> |
qui vous indique bien que led1 n’est pas défini et que la première erreur est à la ligne 7. Ceci vous permettra de corriger le programme. Remettez le programme en ordre (modifiez led1 en l1 aux deux endroits) et … supprimez les deux points après le while true (oui, je sais, c’est pas gentil).
Redémarrez le Raspberry Pi (ou débranchez/rebranchez la PyBStick26) et observez le résultat dans le terminal (il faut relancer screen /dev/ttyACM0). Vous obtenez ceci
1 2 3 4 5 6 7 |
MPY: can't mount SD card Traceback (most recent call last): File "main.py", line 7 SyntaxError: invalid syntax MicroPython v1.12-256-geae495a-dirty on 2020-03-31; PYBSTICK26_LITE with STM32F411CE Type "help()" for more information. >>> |
Hein ? encore la ligne 7 ? Eh oui, faites marcher votre neurone (si vous en avez plusieurs utilisez les tous…). L’interpréteur Python après le while attend le signe : qu’il ne trouve pas à la ligne 6. Il se dit « tiens ! il doit être à le ligne 7… ». Du coup, il passe à la ligne 7 et là pas de signe : en vue ! Il s’arrête et vous dit : « J’ai trouvé une erreur et je suis à la ligne 7 ». A vous de remonter la piste… C’est comme ça que parfois pour une parenthèse ou une accolade manquante on se retrouve avec une erreur 20 lignes plus bas. Mais vous verrez, au début on traite l’interpréteur de tous les noms… Et puis on s’y fait et on finit par admettre que s’il signale une erreur il n’a pas tort (donc il a raison) et que la panne (comme souvent) se situe entre la chaise et le clavier, pas dans l’ordinateur 😀
Allez, réparez une dernière fois le main.py (à moins que vous n’ayez rajouté involontairement une autre erreur 😀 ça arrive souvent !et vous devriez obtenir ceci, un magnifique clignotement de la LED 1
Conclusion
Après l’article de présentation de la carte PyBStick26 de Garatronic, voici le premier article « pratique » qui vous permet de mettre en œuvre cette carte toute petite mais très intéressante pour apprendre à programmer.
Il est aussi possible de programmer cette carte à partir de l’IDE Arduino. Sur le Raspberry Pi tout n’est pas encore 100% au point. Je travaille sur cette partie et vous devriez avoir un article là dessus dans les temps qui suivent.
Au top !!!
… »Enfin, c’est mon avis, et je le partage. » 😉
Hello,
Je ne comprends pas très bien à quoi sert cette carte !
Quel en est l’utilité ?
bonjour
c’est une mini carte pas chère avec beaucoup d’E/S
elle est multi usages depuis l’apprentissage de MicroPython et de la prog Arduino
jusqu’à des projets plus élaborés
https://arduino103.blogspot.com/2020/06/pybstick-un-automate-programmable-sous.html
https://www.facebook.com/papsdroid/videos/176534997098067/UzpfSTM2NTQ1NDU2Njg4Njk3NzoyODI2NzI4NzQwNzU5NTM1/
pilote également le PWM, servomoteurs, entrée analogique etc..
de quoi réaliser des projets avec peu de matériel et à prix raisonnable
enfin 100% français par une équipe française et fabriqué en France, doc en français
Bonjour Francois,
Article très intéressant.
Cette carte est fabriqué en France.
Mais y a t’il aussi un distributeur en France parce que les frais de port en Belgique sont aussi cher que la carte ?
Merci
Pas à ma connaissance.
On a le même souci avec le PiZero …
Salut à tous.
Comme Doudy, je ne sais pas à quoi peut servir cette carte.
Est-ce un micro-controleur ou un processeur ? Pas bien compris.
Il faut une prise USB A pour le faire fonctionner ?
Alors que la norme est plutôt usb-c, voire micro-usb.
Comparativement, le RPi zéro est bien mieux, enfin c’est mon avis. Léger et avec 40 broches !
Pour ma part, j’aime bien le bus pirate que j’utilise pour faire des tests.
Pas de programmation, juste un menu avec quelques commandes que je peux piloter depuis un ordinateur.
Cela me rappelle le ESP8266, mais en moins bien car pas de wifi. Et en plus, je n’aime pas python.
Si c’est juste pour avoir deux boutons et quatre leds, ce n’est pas intéressant.
@+
Ping : Raspberry Pi PICO la carte Microcontrôleur de la Fondation - Framboise 314, le Raspberry Pi à la sauce française....