Débuter en MicroPython

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:
    display.show(Image.HEART)
    sleep(500)
    display.clear()
    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
display.show(Image.HEART)

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
display.show(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 
display.show(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)
    display.show(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"
    display.scroll("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"
        display.show(Image.HEART)
    # Sinon
    else:
        # Éteins toutes les LED de la matrice
        display.clear()

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"
        display.show(Image.HEART)
    # Sinon et si le bouton B est pressé
    elif button_b.is_pressed():
        # Affiche l'image "petit coeur"
        display.show(Image.HEART_SMALL)
    # Sinon
    else:
        # Éteins toutes les LED de la matrice
        display.clear()

Vous connaissez maintenant les bases du langage MicroPython. Mais nous en reparlerons dans les prochains articles.


Laisser un commentaire