Débuter en MicroPython
Publié le 6 mars 2019 par jcquetin
Le langage Python, créé en 1991, sous licence libre est actuellement très
populaire. C’est notamment le langage phare du Raspberry Pi.
Le MicroPython est une adaptation du langage Python pour
microcontrôleurs. Il a été à l’origine créé pour programmer la Pyboard,
une carte de développement lancé sur Kickstarter en 2013. Mais
maintenant, d’autres puces peuvent être programmées en MicroPython,
comme par exemple le Micro:Bit ou le Circuit Playground Express (dont je
vous parlerai prochainement).
Pour résumer, disons simplement que MicroPython est une version
simplifiée de Python, spécialement destinées aux microcontrôleurs.
Les éditeurs
Si vous souhaitez vous initier au MicroPython avec le Micro:Bit, vous
pouvez vous contenter de l’éditeur de la fondation. Il est intuitif et ne
nécessite pas d’installation. Mais n’oubliez pas de sauvegarder vos fichiers
texte (format *.py) sur votre disque dur, car contrairement à MakeCode ils
ne sont pas automatiquement stockés par le navigateur internet (et les
fichiers *.hex sont compilés, ils ne sont donc pas modifiables).
Pour travailler plus confortablement, je vous conseille d’installer sur votre
ordinateur un véritable éditeur, comme Mu qui est gratuit,
multiplateforme, intègre automatiquement les bibliothèques microbit et
permet de Flasher directement le Micro:Bit.
Si vous souhaitez une transition en douceur, vous pouvez aussi
utiliser Edublocks. C’est un éditeur de code en ligne (qui ressemble un peu
à MakeCode). Mais il permet de passer du mode bloc au mode
MicroPython en cliquant simplement sur un bouton (en haut à droite).
Le passage des blocs au texte
Si vous êtes habitué à la programmation par blocs (MakeCode, Scratch,
mBlock…) le passage au texte peut être un peu intimidant, car vous vous
retrouvez devant une page vide et c’est à vous de taper le code. Mais ne
vous inquiétez pas, le principe est exactement le même.
Regardez dans l’exemple ci-dessous, chaque ligne correspond à un bloc :
Bien sûr, il faut quand même apprendre un nouveau langage. Mais c’est
de l’anglais très rudimentaire et vous n’avez pas besoin d’étudier toutes
les instructions pour débuter dans la programmation. Au contraire, il est
beaucoup plus facile d’apprendre progressivement, au gré de vos besoins.
Les grands principes du langage Python
Pour bien débuter en Python (ou MicroPython), vous devez connaitre
quelques principes de base :
1) Les commentaires
Si le texte est précédé du caractère « #« , il ne sera pas pris en compte
par le Micro:Bit (jusqu’au saut de ligne suivant). Cela permet d’ajouter des
informations qui facilitent la compréhension du programme. Mais les
commentaires sont également très utiles pour désactiver certaines lignes
de codes afin de tester une modification du programme ou pour
rechercher la cause d’un dysfonctionnement (bug ou bogue).
2) Les bibliothèques
Le langage Python est utilisé dans de nombreux domaines. Mais il est très
rare d’avoir besoin de toutes les instructions en même temps. Elles sont
donc regroupées par thèmes dans des bibliothèques. Par exemple pour
programmer le Micro:bit, il faudra appeler la bibliothèque contenant les
instructions spécifiques à cette carte. Mais si le programme doit
fonctionner sur Raspberry Pi, il faudra d’autres bibliothèques.
# Appel de la bibliothèque "microbit" (toutes les instructions)
from microbit import *
3) L’indentation.
Cela consiste à ajouter des espaces (ou une tabulation) au début de la
ligne, pour décaler les instructions situées à l’intérieur d’une condition,
d’une boucle ou d’une fonction. Dans d’autres langages, comme le
langage Arduino (basé sur le langage C) l’indentation est facultative, elle
est seulement conseillée afin faciliter la lecture (ou la relecture) du code.
Attention, en Python l’indentation est obligatoire.
# Exemple d'indentation (avec une boucle infinie)
from microbit import *
while True:
[Link]([Link])
sleep(500)
[Link]()
sleep(500)
La matrice 5×5
La documentation MicroPython pour MicroBit (en Français) est
disponible ici. Vous y trouverez la liste des images intégrées à la
bibliothèque « microbit« . Par exemple, pour afficher un coeur, il suffit de
taper le code suivant :
# Appel de la bibliothèque "microbit"
from microbit import *
# Affichage de l'image
[Link]([Link])
Mais vous pouvez aussi dessiner vos propres symboles pixel par pixel. Le
chiffre représente l’intensité lumineuse de la LED. À 0 la LED est éteinte, à
9 elle éclaire au maximum mais évidement, vous pouvez aussi utiliser les
chiffres intermédiaires (1, 2, 3, 4, 5, 6, 7 ou 8).
Dans l’exemple ci dessous, le 1er pixel (à gauche sur la 1ère ligne) est à 0,
le pixel suivant est à 9, le 3ème à 0 et ainsi de suite jusqu’au 5ème pixel
de la ligne. Puis on définit la 2ème ligne (où tous les pixels sont à 9). Et
cela continue jusqu’à la 5ème et dernière ligne. Nous avons donc défini
une images en indiquant l’un après l’autre, l’état des pixels qui la
compose.
# Appel de la bibliothèque "microbit"
from microbit import *
# Définition de l'image
coeur = Image("09090:"
"99999:"
"99999:"
"09990:"
"00900")
# Affichage de l'image
[Link](coeur)
Une fois que vous avez compris le principe, vous pouvez utiliser cette
notation qui est plus compacte, mais donne exactement le même résultat.
# Appel de la bibliothèque "microbit"
from microbit import *
# Définition de l'image
coeur = Image("09090:99999:99999:09990:00900")
# Affichage de l'image
[Link](coeur)
Ensuite, vous pouvez créer une animation composée d’images légèrement
différentes. Dans un 1er temps, vous définissez chaque image, puis vous
créez un tableau définissant l’animation (l’ordre de successions des
images). Et enfin, vous pouvez afficher l’animation à l’intérieur d’une
boucle infinie (une boucle qui se répète indéfiniment).
Faites bien attention à l’indentation.
# Appel de la bibliothèque "microbit"
from microbit import *
# Définition des images
c1 = Image("01010:11111:11111:01110:00100")
c2 = Image("02020:22222:22222:02220:00200")
c3 = Image("03030:33333:33333:03330:00300")
c4 = Image("04040:44444:44444:04440:00400")
c5 = Image("05050:55555:55555:05550:00500")
c6 = Image("06060:66666:66666:06660:00600")
c7 = Image("07070:77777:77777:07770:00700")
c8 = Image("08080:88888:88888:08880:00800")
c9 = Image("09090:99999:99999:09990:00900")
# Définition de l'animation
battementsCoeur = [c1, c2, c3, c4, c5, c6, c7, c8, c9, c8, c7, c5, c4, c3,
c2]
# Boucle infinie
while True:
# Affichage de l'animation (100 millisecondes entre chaque image)
[Link](battementsCoeur, delay=100)
Vous pouvez aussi afficher du texte.
# Appel de la bibliothèque "microbit"
from microbit import *
# Boucle infinie
while True:
# Affichage du traditionnel message "Hello World"
[Link]("Hello World")
Les boutons
Pour utiliser les boutons, il faut créer une boucle infinie, dans laquelle le
Micro:bit vérifie en permanence si l’on a appuyé sur un des boutons.
# Appel de la bibliothèque "microbit"
from microbit import *
# Boucle infinie
while True:
# Si le bouton A est appuyé
if button_a.is_pressed():
# Affiche l'image "coeur"
[Link]([Link])
# Sinon
else:
# Éteins toutes les LED de la matrice
[Link]()
Ensuite, il est possible de compliquer un peu les choses en testant
successivement les 2 boutons (A et B)
# Appel de la bibliothèque "microbit"
from microbit import *
# Boucle infinie
while True:
# Si le bouton A est appuyé
if button_a.is_pressed():
# Affiche l'image "coeur"
[Link]([Link])
# Sinon et si le bouton B est pressé
elif button_b.is_pressed():
# Affiche l'image "petit coeur"
[Link](Image.HEART_SMALL)
# Sinon
else:
# Éteins toutes les LED de la matrice
[Link]()