carte BBC micro:bit et mode Radio


microbitserial

Quel groupe radio utiliser pour mon groupe de travail ?

Pour utiliser votre carte en mode Radio avec votre groupe de travail, vous devez convenir d'un canal radio commun à utiliser. Pour éviter les conflits entre groupes, vous devez choisir un des canaux proposés dans le tableau ci-dessous. Pour connaître les canaux que vous pouvez utiliser, vous devez tenir compte du numéro de votre carte qui se trouve indiqué dans le coin supérieur gauche de celle-ci (voir image ci-dessous).

microbitserial

Ici le numéro de la carte est 1K. Pour rappel, le 1 correspond au numéro de lot et le K correspond à l'identifiant de votre carte dans le lot. seule la lettre nous intéresse ici, soit K. Le nunéro du groupe radio correspondant d'après le tableau est donc 11

Il vous suffit de déterminer le groupe radio associé à chacune des cartes de votre groupe de travail et de choisir l'un d'entre eux. Par exemple, si votre groupe dispose des cartes d'identifiants K, N, P, R vous pouvez utiliser au choix l'un des canaux 11,14,16 et 18. A vous de vous metre d'accord sur un canal commun, par exemple dans notre cas le 11

Code carte N° Groupe Radio Code carte N° Groupe Radio
A1N14
B2O15
C3P16
D4Q17
E5R18
F6S19
G7T20
H8U21
I9V22
J10W23
K11X24
L12Y25
M13Z26

Comment distinguer les cartes les unes des autres ?

Attention en mode bloc le numéro de série retourné peut être incorrect (ex 2031825546.9999999). Cette erreur a été reportée à l'équipe microbit et est en cours de traitement (voir bug report 1640)

The micro:bit has a register mapped into it's memory called the FICR (factory information configuration register) that stores information programmed in at manufacturing time. One of the items programmed in is a unique* serial number. The serial is actually a 64-bit factory generated pseudo-random number etched into each processor. Only 32 bits are used here though (as that makes it consistent for all the micro:bit higher level languages to deal with), and still enables it to be unique for most practical applications. To put this into context, you'd need about 100,000 to 250,000 micro:bits in one place to expect a duplication.

Voici un exemple d'un tel code récupéré sur une carte : 0x761b118b (en python)

En mode bloc

A savoir : en mode bloc le numéro de série et retourné en base 10 : ex 1922218046

Un site de référence : makecode.microbit.org

Blocs pour la gestion du numéro de série :

Activer l'envoi du numéro de série de la carte lors des échanges : serialNumber

Récupérer le numéro de série à la réception d'un paquet serialNumber

Concaténer le numéro de série à d'autres informations : serialNumber

Documentation correspondante : set-transmit-serial-number et received-packet

En Python

A savoir : en python le numéro de série et retourné en base 16 : ex 0x761b118b

Un site de référence : microbit-challenges.readthedocs.io

Un autre site de référence : microbit-micropython.readthedocs.io

   
from microbit import *

display.show('S')

def get_serial_number(type=hex):
    NRF_FICR_BASE = 0x10000000
    DEVICEID_INDEX = 25 # deviceid[1]

    @micropython.asm_thumb
    def reg_read(r0):
        ldr(r0, [r0, 0])
    return type(reg_read(NRF_FICR_BASE + (DEVICEID_INDEX*4)) & 0xFFFFFFFF)
    
while True:
    if button_a.was_pressed():
        display.scroll(get_serial_number())
        sleep(1000)
        display.show('S')
        
    sleep(100)
     
  

Le code nécéssaire pour récupérer le numéro de série de la carte est un code assembleur. N'hésitez pas à demander à votre enseignant ce qu'il signifie.

Documentation correspondante : how-to-read-the-device-serial-number

Numéro de série des cartes micro:bit du Lycée

St-jo micro:bit serial number

Procédure de récupération des numéros de série de plusieurs cartes sur un même poste

Serveur: réception sur le canal radio1 et envoie vers TeraTerm

   
from microbit import *
import radio

radio.on()
radio.config(channel=1)        # Choose your own channel number
radio.config(power=7)           # Turn the signal up to full strength

# Event loop.
while True:
        incoming = radio.receive()
        if incoming is not None:
            display.show('R')
            print(incoming)
        sleep(500)
  

Le code nécéssaire pour récupérer le numéro de série de la carte est un code assembleur.

Client : émission du numéro de série sur le canal radio 1

   
from microbit import *
import radio

#Renseigner votre identifiant carte
my_card_identifier="1A"

radio.on()
radio.config(channel=1)        # Choose your own channel number
radio.config(power=7)           # Turn the signal up to full strength

display.show('R')

def get_serial_number(type=hex):
    NRF_FICR_BASE = 0x10000000
    DEVICEID_INDEX = 25 # deviceid[1]

    @micropython.asm_thumb
    def reg_read(r0):
        ldr(r0, [r0, 0])
    return type(reg_read(NRF_FICR_BASE + (DEVICEID_INDEX*4)) & 0xFFFFFFFF)        
    
while True:
    if button_a.was_pressed():
        display.show(">>>")
        # Send a message
        radio.send(my_card_identifier+';'+get_serial_number())   
        sleep(1000)
        display.show('R')
        
    sleep(100)
  

( Christophe Béasse - novembre 2018 )