📡

Radio — Communication sans fil Avancé

🔵 Niveau 1 · BBC micro:bit · Leçon 8/8

🎯 Objectifs

🛠️ Matériel nécessaire

🔲 2× BBC micro:bit v2 🔌 2× Câble USB 💻 2× ordinateurs ou un seul avec 2 éditeurs
📡
La radio de la micro:bit fonctionne en 2.4 GHz (comme le WiFi). Elle a une portée d'environ 20 mètres. Le groupe (group) est comme une fréquence : deux micro:bits doivent être sur le même groupe pour se parler !

📖 Cours

Exemple 1 — Récepteur

Cette micro:bit reçoit des messages et les affiche :

1.Receveur.py
from microbit import * import radio radio.config(group=8) radio.on() while True: message = radio.receive() if message: display.scroll(message)

Exemple 2 — Émetteur

Cette micro:bit envoie des messages selon les boutons pressés :

2.Emetteur.py
from microbit import * import radio radio.config(group=8) radio.on() while True: if button_a.is_pressed(): sleep(200) radio.send('hello') if button_b.is_pressed(): sleep(200) radio.send('bye') if pin_logo.is_touched(): sleep(200) radio.send('Quoi?')

Étapes obligatoires pour utiliser la radio :

Exemple 3 — Servo télécommandé

Une micro:bit contrôle un servo sur l'autre micro:bit via radio :

3.Servo_radio.py — micro:bit avec servo
## dans le fichier main.py de la microbit telecommandée / connectée au servomoteur from microbit import * import radio from Servo import Servo radio.config(group=8) #choisir un chiffre en commun avec la telecommande radio.on() pince = Servo(pin0) while True: message = radio.receive() if message == 'ouvre': pince.tourne_ralenti(0) message = '' elif message == 'ferme': pince.tourne_ralenti(180) message = '' elif message == 'moitmoit': pince.tourne_ralenti(90) message = ''
3.Servo_radio.py — micro:bit télécommande
## dans le fichier main.py de la microbit qui servira de telecommande from microbit import * import radio radio.config(group=8) radio.on() while True: if button_a.is_pressed(): sleep(200) radio.send('ouvre') if button_b.is_pressed(): sleep(200) radio.send('ferme') if pin_logo.is_touched(): sleep(200) radio.send('moitmoit')

Exemple 4 — Communication bidirectionnelle

Les deux micro:bits peuvent envoyer ET recevoir en même temps :

4.Bidirectionnel.py
from microbit import * import radio radio.config(group=8) radio.on() message = '' while True: message = radio.receive() if message: display.scroll(message) message = '' if button_a.is_pressed(): sleep(200) radio.send('hello') if button_b.is_pressed(): sleep(200) radio.send('bye') if pin_logo.is_touched(): sleep(200) radio.send('Quoi?')

🎮 Projet Final — MartoCizo (Pierre-Feuille-Ciseaux)

Ce projet utilise tout ce qu'on a appris ! Deux micro:bits jouent au Pierre-Feuille-Ciseaux via la radio. Chaque joueur choisit sa main (Pierre / Feuille / Ciseaux), les cartes échangent les choix et affichent le résultat. Le code utilise la radio, les fonctions, les classes, les conditions et même la synthèse vocale !

🎯
Comment jouer : Bouton A = Pierre 🪨 | Bouton B = Feuille 📄 | Logo tactile = Ciseaux ✂️
Les deux joueurs choisissent en même temps, les micro:bits comparent et annoncent le gagnant !
5.MartoCizo.py — code complet
from microbit import * import radio import music import speech radio.config(group=8) radio.on() PIERRE = 'p' FEUILLE = 'f' CISEAUX = 'c' main_adversaire = '' main = '' score = 0 total_score = 0 def jouer(main_a, main_b): if main_a == main_b: return 0 if main_a == PIERRE: if main_b == FEUILLE: return -1 elif main_b == CISEAUX: return 1 elif main_a == FEUILLE: if main_b == PIERRE: return 1 elif main_b == CISEAUX: return -1 elif main_a == CISEAUX: if main_b == PIERRE: return -1 elif main_b == FEUILLE: return 1 def afficher_main(m): if m == PIERRE: display.show(Image('01310:' '14741:' '37973:' '14741:' '01310')) elif m == FEUILLE: display.show(Image('09999:' '09009:' '09009:' '09099:' '09990')) elif m == CISEAUX: display.show(Image('90009:' '09090:' '00900:' '09090:' '09090')) else: display.show(Image.CONFUSED) def clignoter_pixel(x, y): display.clear() for i in range(2): display.set_pixel(x, y, 9) sleep(200) display.clear() sleep(50) def intro(): speech.say('Hi') mains = ['p', 'f', 'c'] afficher_main(mains[0]) sleep(300) clignoter_pixel(0, 2) afficher_main(mains[1]) sleep(300) clignoter_pixel(4, 2) afficher_main(mains[2]) sleep(300) clignoter_pixel(2, 0) def clignoter_main(c, m): for i in range(c + 1): afficher_main(m) sleep(300) display.clear() sleep(100) audio.play(Sound.SPRING) intro() while True: while main == '': main_adversaire = radio.receive() if button_a.is_pressed(): main = PIERRE radio.send(main) afficher_main(main) if button_b.is_pressed(): main = FEUILLE radio.send(main) afficher_main(main) if pin_logo.is_touched(): main = CISEAUX radio.send(main) afficher_main(main) main_adversaire = radio.receive() if main_adversaire and main: radio.send(main) music.play(music.JUMP_DOWN) clignoter_main(3, main_adversaire) score = jouer(main, main_adversaire) if score == 0: display.show(Image.ASLEEP) music.play(music.BADDY) elif score == 1: total_score += 1 display.show(Image.HAPPY) speech.say('YOU WIN') music.play(music.POWER_UP) elif score == -1: display.show(Image.SAD) music.play(music.WAWAWAWAA) display.show(total_score) sleep(2000) display.clear() score = 0 main = '' main_adversaire = '' intro()

Analyse du code MartoCizo

Ce programme utilise des concepts avancés :

✏️ Exercices

Exercice 1

Chat radio

Utilise l'exemple bidirectionnel pour créer un mini-chat. A envoie "Salut !", B envoie "Ça va ?", logo envoie "Top !". Programme les deux micro:bits de la même façon.

Exercice 2

Servo télécommandé avancé

Ajoute d'autres commandes au servo radio : "lent" (tourne très lentement à 90°), "rapide" (tourne directement à 90°), "sweep" (va de 0° à 180° et revient). Modifie la télécommande pour avoir 5 boutons/combinaisons.

Exercice 3 — Défi

Améliore MartoCizo

Ajoute ces fonctionnalités à MartoCizo : 1) Affiche le score total des deux joueurs en début de partie. 2) Ajoute un timer de 10 secondes — si personne ne choisit, la partie est annulée. 3) Premier à 3 points gagne la partie !

🧠 À retenir

  • import radio — importe le module radio
  • radio.config(group=N) — choisit le groupe (0-255), même groupe sur les deux cartes !
  • radio.on() — active la radio (obligatoire)
  • radio.send('message') — envoie un message texte
  • radio.receive() — retourne le message reçu ou None si rien
  • Les deux cartes peuvent envoyer ET recevoir en même temps
  • La portée est d'environ 20 mètres en intérieur
🎉
Félicitations ! Tu as terminé le Niveau 1 ! Tu sais maintenant programmer des LEDs, utiliser des boutons, détecter des mouvements, créer des conditions et boucles, organiser ton code avec des fonctions, contrôler des moteurs et faire communiquer deux cartes sans fil. Tu es prêt pour le Niveau 2 — le vrai robot !
Passer au Niveau 2 — Robot Pico 🤖 →
← Leçon 7 — Servomoteur Niveau 2 → 🤖