Découverte de MicroPython sur la Raspberry Pi Pico
(Mis à jour le 09/12/2022)
Faire clignoter la LED intégrée qui se trouve dans une nouvelle carte est une opération très facile à accomplir. C’est comparable à l’usuel message Hello World
que l’on fait apparaître dans la console lorsqu’on découvre un nouveau langage de programmation. Ce script permettra à la LED de clignoter avec un rythme régulier d’une fois par seconde. L’objectif est de vous donner un aperçu de la programmation en MicroPython.
from machine import Pin
import time
pin_led = Pin(25, mode=Pin.OUT)
while True:
pin_led.on()
time.sleep(1)
pin_led.off()
time.sleep(1)
Note
Ceux qui maîtrisent déjà les bases de la syntaxe Python n’auront aucunes difficultés avec MicroPython.
Exécution du script MicroPython sur votre Pico
Avant toute chose, il faut être sûr que votre logiciel IDE est bien configuré pour votre carte Pico. Le tutoriel suivant vous servira de guide dans la configuration de la Raspberry Pi Pico dans Thonny IDE .
Il faut privilégier, sur Thonny IDE, l’enregistrement du code sur l’ordinateur et éviter de le faire directement sur la carte. En exécutant le script, Thonny IDE transmettra de manière directe le code à l’interpréteur MicroPython par le biais du REPL
. Enfin pour l’enregistrement du script sur la carte, il faut juste aller dans File > Save as…
Lorsque vous mettez sous tension la carte Pico, le lancement du script Python n’est pas automatiquement comme sur Arduino. Mais il n’y a pas lieu de s’inquiéter, il faut juste procéder à l’enregistrement du script sous le nom suivant `main.py <http://main.py>`__
pour qu’il se lance lors de la mise sous tension.
Note
Ceci ne constitue pas vraiment un obstacle durant les étapes de développement, mais c’est bon de le savoir lorsque vous utilisez un script Micro Python d’une manière définitive sur une carte.
Explication détaillée d’un script MicroPython
La structure d’un script MicroPython est la suivante :
Pour permettre à chaque script MicroPython de bien fonctionner, il faut d’abord importer les modules nécessaires. Cela équivaut aux #include
du code Arduino IDE pour les librairies externes : #include <SPI.h>
, #include <SD.h>
…
Il faut noter qu’avec MicroPython, il y a une différence, à savoir que même les objets de base doivent aussi être importés. Rappelons que Python est un langage orienté objet ou tout élément est assimilé à un objet. À titre d’exemple les broches entrées/sorties sont identifiées comme des objets. Heureusement, ils s’emploient aisément sans être expert en programmation orientée objet.
Dans notre exemple de script, le module machine
contient la quasi-totalité des objets propres à MicroPython. On importe le sous module Pin
qui gère les broches (GPIO) entrée/sortie. L’objet pin_led
** correspond à la broche qui commande la LED intégrée. Cette broche est en fait considérée comme une sortie électrique. L’objet Pin
créé, renferme en son sein des fonctions qui permettent la modification de son état .on()
pour allumer la LED et .off()
pour l’éteindre.
Note
Le numéro de la broche qui est reliée sur la LED intégrée est le 25 pour la Raspberry Pi Pico et l’uPesy RP2040 DevKit.
Pour visualiser le clignotement, on rallonge d’une seconde le délai avec la fonction sleep()
du module time
. Le code qui donne l’ordre à la LED de clignoter se trouve dans une boucle infinie pour la faire clignoter indéfiniment .
Pour les habitués du code Arduino, vous constaterez la disparition des fonctions setup()
et loop()
: l’exécution du script se fait une seule fois de façon séquentielle. Pour avoir un comportement semblable au schéma Arduino, une boucle infinie est donc nécessaire.
Améliorer le script blink
existant en MicroPython
Avec les multiples fonctions propres à MicroPython, on peut condenser le script blink
. Ainsi, avec la fonction .toggle()
on obtient l’inversion de l’état d’une sortie : à l’exécution de la fonction .toggle()
, la broche qui était à l’état haut (3.3V ) se retrouve à l’état bas (0V ), et vice versa.
Ainsi, le code nouveau (avec un clignotement accéléré) se résume à :
from machine import Pin
import time
pin_led = Pin(25, mode=Pin.OUT)
while True:
pin_led.toggle()
time.sleep_ms(250)
Vous noterez, que time.sleep()
a été remplacée par time.sleep_ms()
pour plus de clarté. En fait, 3 fonctions permettent de bloquer le programme pendant une certaine durée, avec des niveaux de précision de plus en plus élevés :
time.sleep_us(duree_en_microsecondes)
time.sleep_ms(duree_en_millisecondes)
time.sleep(duree_en_secondes)
Note
\(10^6\) microsecondes = \(10^3\) millisecondes = 1 seconde
Par exemple, chacune des trois lignes suivantes permet de bloquer le programme pendant 5 millisecondes :
time.sleep_us(5000)
time.sleep_ms(5)
time.sleep(0.005)
Note
Comme en Arduino, ces fonctions entraîneront un blocage du programme : d’autres tâches, comme mesurer une tension ou relever les données d’un capteur, ne pourront donc pas s’exécuter en arrière-plan.
Voilà, c’était un aperçu sur la programmation des cartes Raspberry Pi Pico avec MicroPython. J’espère avoir éveillé votre curiosité et votre envie d’explorer plus profondément ce nouveau langage pour vos futurs projets DIY 🙂.