TP3 Micro:bit
La communication radio
La fonctionnalité radio permet d'échanger des messages avec une ou plusieurs cartes micro:bit.
Il faut au moins deux cartes et chacune comporte un programme (qui peut être commun si les rôles sont symétriques).
Instructions | Effet |
---|---|
import radio |
Importe la bibliothèque radio |
radio.on() |
Active la fonctionnalité radio |
radio.off() |
Désactive la fonctionnalité radio |
radio.send(message) |
Envoie un message de type chaine de caractères |
radio.receive() |
Prend pour valeur la chaine de caractères reçue |
Exemple
Ce programme nécessite deux cartes : un appui sur un bouton de la carte émettrice provoque un affichage sur la carte réceptrice.
En cas d'appui sur le bouton A, on affiche Image.YES et en cas d'appui sur le bouton B, on affiche Image.NO.
Programme sur la carte émettrice :
from microbit import *
import radio
radio.on()
while True:
if button_a.was_pressed():
radio.send("A")
elif button_b.was_pressed():
radio.send("B")
from microbit import *
import radio
radio.on()
while True:
incoming = radio.receive()
if incoming == "A":
display.show(Image.YES)
sleep(200)
elif incoming == "B":
display.show(Image.NO)
sleep(200)
display.clear()
Exercices
Exercice 1
Tester l'exemple.
La carte micro:bit intègre un capteur de température. Il n'est pas très précis dans la mesure où il est soudé sur la carte elle-même, à proximité du processeur ; il est donc perturbé par
l'échauffement provoqué par le fonctionnement de la carte. Le phénomène est encore amplifié lorsque la carte est insérée dans un étui de protection.
Pour lire la température - en degrés Celsius - il faut utiliser l'instruction temp = temperature()
. La variable temp
contient alors la température détectée par la carte.
Exercice 2
Cet exercice nécessite deux cartes : une carte mesure la température et envoie par radio la valeur mesurée. Une autre carte reçoit les valeurs et les affiche.
Programme sur la carte émettrice :
from microbit import *
import radio
radio.on()
while True:
temp = temperature()
radio.send(str(temp))
sleep(1000)
from microbit import *
import radio
radio.on()
while True:
message = radio.receive()
if message != None: # on teste pour savoir si un message est bien envoyé
display.scroll(message)
sleep(1000)
2. Modifier le programme de la carte réceptrice pour qu'elle n'affiche plus la température mais affiche (Image.HAPPY) si la température est supérieure à 20°C et (Image.SAD) sinon.
Attention
Dans la carte réceptrice, message
est une chaîne de caractère. Si la température de la carte émettrice est 21 alors le message reçu est '21'
.
Pour faire un test sur la température, il faudra convertir le message en un entier en utilisant la fonction int
.
Pour éviter une erreur, il faudra tester avant la conversion si on a bien reçu un message ; pour cela il faut écrire le code suivant :
if message != None and int(message) > 20:
# instructions à faire
3.Compléter le programme de la question précédente pour que la carte réceptrice affiche la température lorsqu'on appuie sur le bouton A.
Exercice 3
- Modifier le code de l'exemple de sorte que la carte réceptrice compte le nombre de "A" envoyés par la carte émettrice et compte le nombre de "B" envoyés par la carte émettrice.
- Modifier le code de la carte réceptrice pour que l'appui sur le bouton A de celle-ci affiche le nombre de "A" et l'appui sur le bouton B affiche le nombre de "B".