Micro:bit

Les modes

L'éditeur Mu (il en aussi existe aussi online) peut s'adapter à plusieurs contextes en fonction des cartes qu'on lui connecte. Il peut même être utilisé pour coder en Python directement sur l'ordinateur, même si on utilise pas de carte microbit. Les fonctionnalités d'une carte à l'autre peuvent varier donc l'éditeur se met dans un mode spécifique à la carte qui est connectée.

Connectez votre carte sur un port USB et ouvrez Mu.

Ce mode peut se changer en appuyant sur l'icône iconeMode.

mode

Dans ce tutoriel, nous supposerons que nous sommes en mode BBC microbit. L'environnement Mu va nous permettre de

  • taper nos programmes et les envoyer sur la carte pour s'exécuter iconeFlasher
  • transférer des fichiers vers et depuis la carte iconeFichiers
  • accéder à la console interactive MicroPython (REPL) iconeREPL
  • tracer des graphiques iconeGraphique
  • vérifier la syntaxe de nos programmes iconeVerifier

Où sont les fichiers

Mu stocke ses fichiers dans le dossier nommé mu_code situé dans votre dossier personnel.

La racine de ce dossier apparaît quand vous cliquez sur l'icône iconeFichiers

Créer son premier programme

Cliquer sur iconeNouveau puis commencer à taper votre programme. Celui ci-dessous sera très bien :)

import microbit as mb
mb.display.show("Vive SNT !")
  • Enregistrer le fichier à l'emplacement de votre choix en choisissant un nom, par exemple testMB.py.
  • Flasher le programme sur la carte à l'aide de l'icône iconeFlasher. Cela signifie que le programme sera transféré sur la carte - en remplaçant éventuellement celui qui était présent - et sera lancé automatiquement au démarrage.

La console interactive REPL

Le REPL permet un contact direct avec MicroPython installé sur la carte. C'est ce qui correspond à la console Python sur ordinateur ou la calculatrice. Pour lancer REPL, cliquez sur l'icône iconeREPL.

REPL

En cliquant sur iconeREPL, le programme en cours d'exécution sur la carte (main.py) est stoppé et vous pouvez taper des commandes qui seront immédiatement exécutées par MicroPython. La capture ci-dessus vous affichera instantanément le message sur la matrice LED. C'est très commode de pouvoir interagir directement avec MicroPython en cours d'élaboration de programme. Cela permet par exemple :

  • de tester une ligne de code comme display.show("coucou")
  • de se renseigner sur l'usage d'une commande. Essayez help(display.show)
  • de connaître les causes d'un plantage du programme
  • etc....

⚠️ Attention ! ⚠️

Le REPL monopolise la liaison USB qui n'est plus disponible pour d'autres usages. Par conséquent:
  • Vous ne pouvez pas avoir REPL ouvert en même temps que Fichiers.
  • Vous ne pouvez pas Flasher quand REPL est ouvert.

Déceler une erreur

Les erreurs de syntaxe peuvent parfois être décelées avant même le flashage grâce au bouton iconeVerifier.

Si vous flashez un programme qui provoque une erreur, celle-ci va défiler sur la matrice LED mais il n'est pas du tout évident à lire ! Pour visualiser les retours d'erreur, nous allons utiliser le REPL :

Lancer REPL. L'invite de commande >>> apparaît. Nous allons provoquer un redémarrage de la carte via le bouton reset au dos de la carte. Le programme se lance à nouveau mais cette fois-ci, les erreurs sont affichées dans la console.

Voir le résultat de la commande print

Vous pouvez afficher des informations à l'aide de l'instruction python print, mais la carte ne possède pas d'écran. Elles n'apparaissent pas non plus sur la matrice LED car celle-ci se pilote via la commande display. Essayez le programme ci-dessous qui simule le lancer de 10 dés.

from random import randint
for i in range(10):
    print("lancer ",i," : ",randint(1,6))

Rien ne s'affiche sur la carte. Pour voir le résultat, ouvrez REPL puis redémarrez le programme via le bouton reset. Vous obtiendrez dans la console l'affichage attendu :

Rien ne s'affiche sur la carte. Pour voir le résultat, ouvrez REPL puis redémarrez le programme via le bouton reset. Vous obtiendrez dans la console l'affichage attendu :

>>> lancer  0  :  6
lancer  1  :  3
lancer  2  :  6
lancer  3  :  5
lancer  4  :  4
lancer  5  :  6
lancer  6  :  4
lancer  7  :  5
lancer  8  :  1
lancer  9  :  6

Utiliser l'outil Graphique

L'outil graphique permet de visualiser sous forme de courbe les valeurs affichées via la commande print. Celles-ci doivent être présentées dans un tuple (liste de données délimitées par des parenthèses et séparées par des virgules). A chaque élément du tuple correspondra une courbe. On peut ainsi tracer une ou plusieurs courbe.

Si on ne veut qu'une seule courbe, il faut quand même afficher un print à un seul élément ce qui ressemble à cela (21,). Ne pas oublier la virgule à la fin. Voici un exemple :

import microbit as mb

while True:
    temp = mb.temperature()
    print((temp,))
    mb.sleep(1000)

mu_graph

  • La fonction mb.temperature() renvoie la température relevée par e capteur intégré à la carte micro:bit.
  • On affiche cette température dans un tuple à un élément selon le format (temp,) décrit ci-dessus.
  • On attend 1000 ms soit une seconde afin de de pas saturer la liaison série avec des relevés de température trop fréquents. La fonction mb.sleep permet de mettre le microcontrôleur en pose pendant un temps spécifié en microsecondes.

Maintenant que nous en savons plus sur le fonctionnement, passons à quelques exercices d'application avant un mini projet au choix.

Analysez ce code. Que fait-i l ?

from microbit import *

while True:
    display.show("1")
    sleep(500)
    display.show(" ")
    sleep(500)
    
            

Modifiez le code pour que le temps d'affichage soit plus long

jouer avec les pixels

flashez ce code sur la carte et testez-le.

from microbit import *

for x in range(5):
    display.set_pixel(x,0,9)
    sleep(500)
            

Explications : la fonction set_pixel allume un point sur l'écran. Elle prend 3 paramètres :

  • les deux premiers sont l'abscisse et l'ordonnée du point (le point de coordonnées 0,0 étant en haut à gauche de l'écran)
  • le dernier paramètre est la luminosité du point entre 0 et 9 : 0 signifie que le point est éteint et 9 est la luminosité maximale
  • Modifiez ce programme afin qu'il allume la colonne centrale
    Modifiez ce programme afin qu'il allume une croix

    Dans le code suivant, nous utilisons l'instruction break pour sortir de la boucle infinie lorsque le bouton A est enfoncé (un visage joyeux est alors affiché sur la matrice de leds).

    		
    from microbit import *
    while True:
    	if button_a.is_pressed():
    		break
    	display.scroll("Bonjour")
    	sleep(5000)
    display.show(Image.HAPPY)
    		
    	

    testez ce code et modifiez image de fin (aidez vous de la documentation dans ressources).


    Pour en savoir plus sur les possibilités de la carte, voici des exemples d'utilisation, à vous de les tester et modifier à votre guise.

    Détection de toucher de broche (broche 0)
    		from microbit import *
    touches = 0
    while True:
     if pin0.is_touched():
      touches += 1
      display.scroll(str(touches))
    
    
    
                
    : Mesure de température
    		from microbit import *
    while True:
     display.scroll(str(temperature()))
     display.scroll(' Celsius')
    
    
                
    : : Boussole
    		from microbit import *
    while True:
     display.scroll('Cap %s' % compass.heading())
    
    
                
    Accéléromètre (capteur de secousses)
    		from microbit import *
    while True:
     if accelerometer.is_gesture("shake"):
      display.show(Image.SURPRISED)
      sleep(1000)
      display.show(Image.ASLEEP)
    
    
    
                
    Accéléromètre (données)
    		from microbit import *
    while True:
     display.scroll('X:%s' % accelerometer.get_x())
     display.scroll('Y:%s' % accelerometer.get_y())
     display.scroll('Z:%s' % accelerometer.get_z())
    
    
    
                
    Communication radio entre micro:bits du même groupe
    Micro:bit A
    		from microbit import *
    import radio
    radio.config(group=1)
    radio.on()
    while True:
     if button_a.was_pressed():
      radio.send('Hello de A!')
     if button_b.was_pressed():
      message = radio.receive()
      display.scroll(str(message))
    
    
                
    Micro:bit B
                    from microbit import *
    import radio
    radio.config(group=1)
    radio.on()
    while True:
     if button_a.was_pressed():
      radio.send('Hello de B!')
      
     if button_b.was_pressed():
      message = radio.receive()
      display.scroll(str(message))
    
            
            
                        
    Micro:bit C
                            from microbit import *
    import radio
    radio.config(group=1)
    radio.on()
    while True:
     if button_a.was_pressed():
      radio.send('Hello de C!')
     if button_b.was_pressed():
      message = radio.receive()
      display.scroll(str(message))