Communication radio entre plusieurs cartes
Présentation générale
La carte Micro:bit dispose d'une antenne pour communiquer par ondes radios avec d'autres cartes.
Attention : l'utilisation de la radio consomme de l'énergie.
Importation du module radio
Le module radio
permet de disposer d'un protocole pour émettre et recevoir de l'information.
Le module microbit
est par ailleurs nécessaire pour disposer des autres fonctionnalités de la carte.
from microbit import *
import radio
...
L'émission
• Lorsqu'une carte émet :
- Elle émet sur un canal spécifique (par défaut le canal 7).
- Elle envoie une série d'octets (que l'on appellera 'message'). Par défaut, un maximum de 32 octets à la fois.
• Pour simplifier la programmation, il est possible d'envoyer un message directement sous la forme d'une chaine de caractères.
La réception
• Lorsqu'une carte reçoit :
- Elle reçoit sur un canal spécifique (par défaut le canal 7).
- Elle reçoit les séries d'octets (que l'on appellera 'message') émises sur le canal. Par défaut, un maximum de 32 octets à la fois.
- Elle stocke les messages en mémoire. Par défaut, elle stocke un maximum de 3 messages, tous les messages supplémentaires sont perdus.
La récupération d'un message par programmation permet de libérer de la place pour d'autres messages.
Les instructions de base
radio.on()
et radio.off()
Ces deux instructions permettent respectivement d'activer et de désactiver la communication radio.
radio.send(chaine:str)
Cette instruction permet d'envoyer un message (la chaine de caractère chaine) sur le canal radio choisi (par défaut le canal 7).
radio.receive() -> str
Cette instruction permet de récupérer le dernier message de la file de réception, le message est alors supprimée de cette file.
Exemples
Code à mettre sur la carte qui émet :
import radio
from microbit import *
# Appuyer sur le bouton A pour émettre un message.
# Appuyer sur le bouton B pour arrêter le programme.
radio.on()
display.show(Image.ARROW_W)
while not button_b.was_pressed():
if button_a.was_pressed():
radio.send('a')
display.show(Image.HAPPY)
sleep(200)
display.show(Image.ARROW_W)
display.clear()
Code à mettre sur la carte qui reçoit :
import radio
from microbit import *
# La détection d'un message démarre dès le lancement du programme.
# Appuyer sur le bouton B pour arrêter le programme.
radio.on()
while not button_b.was_pressed():
if radio.receive() == 'a':
display.show(Image.HEART)
sleep(200)
display.clear()
sleep(200)
display.show(Image.ASLEEP)
sleep(1000)
display.clear()
Lorsque les deux programme sont lancés, appuyer sur le bouton A de la carte qui émet.
Pour aller plus loin
Configuration de la transmission
radio.config(...)
radio.config(...)
Pour configurer la communication radio, il faut utiliser l'instruction radio.config(...)
avec les paramètres suivants :
- length
: longueur des message en octets (entier compris entre 3 et 251, par défaut c'est 32) ;
- queue
: nombre de message stockés dans la file de réception (entier, par défaut c'est 3) ;
- channel
: canal utilisé (entier compris entre 0 à 83, par défaut c'est le 7) ;
- power
: intensité de l'émission (entier de 0 à 7, par défaut c'est 6) ;
- ...
Exemple :
import radio
radio.config(lenght=1, channel=5)
radio.reset()
Cette instruction permet de réinitialiser la configuration de la communication radio avec les valeurs par défaut.
Réception des messages avec la puissance du signal et l'heure de réception
L'instruction radio.receive_full()
permet de récupérer non seulement le message, mais également la puissance du signal au moment de la réception, ainsi que l'horaire du message.
Si la file de réception est vide, l'instruction renvoie None
.
Si la file de réception n'est pas vide, l'instruction renvoie un tuple avec :
- le message ;
- la puissance de réception (0 si la puissance est forte, 255 si la puissance est faible ;
- l'heure (un entier correspondant aux microsecondes écoulées depuis le lancement du programme).
Exemple :
import radio
message_complet = readio.receive_full()
if message_complet != None:
message, puissance, temps = message_complet