Cet article résume les bases de la programmation d’une carte Micro:bit en langage MicroPython.
IDE de développement
Thonny
Thonny est un environnement de développement assez complet pour MicroPython. Il a l’avantage de gérer la plupart des cartes : PyBoard, ESP32, Micro:bit, …
Trouvez ici une documentation sur l’utilisation de Thonny avec la Micro:bit.
Mu
L’éditeur Mu est un outil très simpliste. Il supporte parfaitement la carte Micro:bit.
Trouvez ici une documentation sur l’utilisation de Mu avec la Micro:bit.
Noms des broches
En résumé :
Broche | MicroPython | Fonction initiale | Autres fonctions |
P0 | pin0 |
Touch (capacitif) | E/S digitale, Entrée analogique |
P1 | pin1 |
Touch (capacitif) | E/S digitale, Entrée analogique |
P2 | pin2 |
Touch (capacitif) | E/S digitale, Entrée analogique |
P5 | button_a |
Bouton A | |
P11 | button_b |
Bouton B | |
3V | Alimentation 3,3 V | ||
GND | Masse |
Afficheur à LED
L’afficheur intégré est composé de 25 LED disposées sur une matrice 5×5.
Etat d’une LED de la matrice
clear()
efface l’écran.set_pixel(x, y, valeur)
fixe l’intensité d’une LED de la matrice aux coordonnéesx
ety
(entier de 0 à 4). La valeur de l’intensité est un nombre entier de 0 à 9.get_pixel(x, y)
retourne l’intensité (entier de 0 à 9) d’une LED à la position x, y.
Afficher un texte
show(texte, delay=400)
affiche un texte caractère par caractère tous les 400 ms.scroll(texte, delay=150)
fait défiler le texte avec une période de 150 ms.
Sorties digitales
La méthode write_digital(valeur)
fixe le niveau logique (0 ou 1) d’une broche (pin0
, pin1
, pin2
, …).
Entrées digitales
Lecture d’un niveau logique
La méthode read_digital()
renvoie le niveau logique (0 ou 1) d’une broche (pin0
, pin1
, pin2
, …).
Etat d’un bouton intégré
La carte intègre deux boutons poussoir respectivement notés button_a
et button_b
en langage MicroPython.
is_pressed()
détecte l’état actuel d’un bouton et renvoieTrue
ouFalse
.was_pressed()
retourneTrue
si le bouton a été appuyé depuis la mise sous tension de la carte ou du dernier appel de cette méthode. RetourneFalse
sinon.
Mesurer une durée d’impulsion
Cette possibilité est offerte par le module machine
.
time_pulse_us(pinX, 0)
mesure la durée (en µs) d’une impulsion sur la brochepinX
à l’état bas.time_pulse_us(pinX, 1)
mesure la durée (en µs) d’une impulsion sur la brochepinX
à l’état haut.
Entrées analogiques
Six entrées analogiques (de 0 à 3,3 V) sont disponibles sur la carte. La conversion se fait sur 10 bit.
Lecture directe
read_analog()
retourne le résultat (entier entre 0 et 1023) de la conversion d’une tension sur les brochespin0
,pin1
,pin2
,pin3
,pin4
oupin10
.
Affichage en volt
La tension correspondante s’obtient en théorie par la relation :
Il existe deux origines à ce problème :
- La présence d’une diode en série sur l’alimentation 3,3 V du microcontrôleur provoque une faible chute de tension mais non négligeable ici. Pour compliquer encore les choses, cette chute de tension augmente avec le courant consommé par le microcontrôleur (type et nombre de capteurs par exemple). Il est donc nécessaire de mesurer au voltmètre la tension d’alimentation Vcc pour chaque montage !
- L’existence d’un décalage (offset) lors de la conversion analogique-numérique. Cet offset est l’entier à soustraire au résultat de la conversion pour une tension égale à 0 V.
Le programme suivant donne un meilleur résultat :
Acquisition d’une série de mesures en fonction du temps
Contrairement à la PyBoard, il n’est pas possible de réaliser une série de mesures directement en mémoire de la Micro:bit à partir d’un timer.
Cependant, pour les faibles fréquences d’échantillonnage (environs 100 Hz), le programme suivant offre une alternative avec une assez bonne précision.
La fonction ticks_ms()
renvoie une durée (en ms) obtenue par un comptage par rapport à un point de référence arbitraire.
Sorties analogiques
Contrairement à la Pyboard, la carte Micro:bit n’intègre pas de Convertisseur Numérique Analogique (CNA ou ADC).
Sortie PWM
La génération d’une tension Modulée en Largeur d’Impulsion (MLI ou PWM en anglais) sur une sortie digitale est une alternative afin d’obtenir une tension continue dont la valeur moyenne est réglable entre 0 et 3,3 V.
set_analog_period(value)
fixe la période (en ms) du signal MLI.write_analog(duty)
génère la tension MLI sur la broche concernée.- Le paramètre
duty
est le rapport cyclique (entier sur 12 bits de 0 à 1023 pour un rapport cyclique allant de 0 à 100%).
Port I2C
Le port I2C est accessible sur les broches P19 (SCL) et P20 (SDA).
Faire une pause
Avec le module microbit
, il est possible d’imposer une pause (en ms) dans le programme à l’aide de la fonction sleep(t_ms)
.
Un autre module utime
dispose de trois fonctions sleep(t_s)
, sleep_ms(t_ms)
et sleep_us(t_µs)
pour réaliser une pause respectivement en seconde, milliseconde et microseconde.