06
oct.
'16

Le BBC Micro:bit, c'est awesome !

Publié le 06 octobre 2016

La BBC a initié en 2015 le projet Micro:bit, qui se veut être un ordinateur de poche programmable destiné à l'éducation. L'objectif de cette dernière: fournir à chaque écolier de 12 ans («year 7») un support amusant et facile à utiliser. Exit l'Arduino et ses connexions complexes, le Micro:bit est voué à être la plateforme d'apprentissage du code à l'école, pour un prix modique (une board, un cable USB, une alimentation à piles et un boîtier pour 25€).

Le Micro:bit

Avant d'aller plus loin, il me semblait important de définir le genre du Micro:bit: masculin. Pour la simple et bonne raison que si vous en parlez au féminin dans un bon français, certaines personnes ne manqueront pas de remettre en question vos attributs, en particulier si vous êtes de sexe masculin. Trève de plaisanterie.

Le Micro:bit se base sur un SoC nRF51822 de Nordic Semiconductor, qui n'est rien de moins qu'un micro-contrôleur basé sur un CPU ARM Cortex M0 intégrant les technologies Bluetooth Low Energy et ShockBurst (SB) (version "ancienne" et améliorée, Enhanced ShockBurst (ESB)). Le protocole de communication ESB est utilisé par la couche logicielle sur laquelle repose le Micro:bit, mais il n'est pas directement accessible, ce qui est dommage car il y a des choses bien drôles à faire, comme intercepter les frappes de touches des claviers sans fil.

Le gros intérêt du Micro:bit, ce sont ses interfaces de programmation. Les concepteurs ont mis en place de la compilation dans le Cloud, à partir des environnement suivants: * JavaScript * Python * Scratch-like

Vous éditez votre code en ligne, vous le testez sur l'émulateur puis vous télécharger le binaire (compilé à la demande) afin de programmer votre Micro:bit. Et rien de complexe pour la programmation: il suffit de brancher le câble USB à un ordinateur, et le Micro:bit est reconnu comme une clef USB (stockage de masse). Une simple copie du fichier téléchargé sur ce support de stockage émulé suffit à déclencher la programmation du Micro:bit, qui se déconnectera automatiquement et lancera votre code. On ne peut plus simple.

Pour ceux que l'aspect en ligne rebute, il existe des environnements de développement intégrés, comme [mu-editor->https://github.com/mu-editor/mu], ou on peut se rabattre sur du C++ en dernier recours.

Micro:bit repose sur MicroPython, un portage de Python3 pour les micro-contrôleurs, et permet ainsi de développer très simplement en Python ! Le code suivant permet d'effectuer une animation sur l'écran intégré:

from microbit import *

while True:
    display.show(Image.HAPPY)
    sleep(1000)
    display.show(Image.SAD)
    sleep(1000)

Les fonctionnalités du Micro:bit

L'avantage principal du Micro:bit est le fait que l'on peut développer en Python à l'aide de la bibliothèque standard. Cette dernière interface tout le matériel, et rend le développement très intuitif. Elle permet notamment : * de gérer l'affichage de l'écran de LEDs (elle possède une banque d'images intégrées) ; * de gérer les boutons poussoirs ; * de gérer les boutons capacitifs (les pads apparents) ; * de jouer de la musique (en connectant un HP comme il faut) ; * de faire de la synthèse vocale (toujours avec le HP) ; * de gérer les accéléromètres ; * de gérer la boussole ; * de communiquer avec d'autres Micro:bit par radio ; * de communiquer avec d'autres Micro:bit par "réseau" filaire ; * de stocker des fichiers via un système de fichiers minimaliste (sans carte SD !).

Bref, c'est juste énorme les possibilités offertes ! Sans ajout de composants, on peut faire des jeux qui communiquent via radio, des horloges binaires, des écrans affichant des messages, etc ... Et je ne parle pas des shields qui sont en train d'être développés.

Utilisation avancée

Ce n'est pas parce que c'est conçu pour les débutants que ça n'offre pas de possibilités ! J'étais à la recherche depuis quelques temps d'une plateforme portable permettant de mener des attaques particulières sur les protocoles Bluetooth Low Energy et ShockBurst. C'est d'ailleurs pour cela que j'avais conçu le ProbeZero que j'ai présenté à la Nuit du Hack 2016. Mais le Raspberry Pi est relativement lourd, et mon système mettait facilement 30 secondes à se lancer, sans parler de la consommation de batterie. Le Micro:bit est de fait une très bonne alternative, avec un écran en plus !

Pour le développement, on ne peut pas se limiter à la bibliothèque standard: les aspects radio sont très limités, et ce serait dommage de se passer du SDK de Nordic Semiconductor (nRF51 SDK) pour s'amuser avec de la radio. Le code source du fork de MicroPython est disponible sur github, où toute la phase d'installation est relativement documentée. Si vous souhaitez forker la base Python du Micro:bit, c'est une bonne piste à suivre.

Il est aussi possible de développer directement en C++ et d'appeler les fonctionnalités présentes via Python: Micro:bit propose une couche d'abstraction (nommée Microbit-DAL) qui permet d'utiliser toutes les fonctionnalités du Micro:bit. L'aspect intéressant de cette couche est que l'on peut du coup utiliser le SDK nRF51 pour accéder aux éléments internes du nRF51822. Pour hacker sans se fouler, c'est quand même classe :).

Conclusion

Le Micro:bit est pour moi une plateforme qui me donne envie d'expérimenter, qui me semble tout à fait abordable par des élèves, et que je souhaite faire essayer dès que ce sera possible par mes minis-moi. Elle est aussi très intéressante car elle offre un moyen simple de bidouiller encore plus sur des protocoles sans-fil par exemple, voire développer des outils d'attaque portables (je n'ai pas abordé l'USB HID mais à mon avis il y a aussi de quoi creuser: Teensy-like, rubber-ducky et consors doivent pouvoir être portés sans trop de souci AMHA).

Je suis conquis par ce projet, au point même que ça me donne envie de faire un workshop là dessus à la prochaine Nuit du Hack (ou même Nuit du Hack Kids). Et en parler à une de mes amies qui est directrice d'école et pour qui l'enseignement du code à l'école est quelque peu compliqué.

Essayez-le, ça vaut franchement le coup.



Les contenus disponibles sur ce blog sont publiés sous licence Creative Commons BY-NC-SA.
Vous pouvez réutiliser tout ou partie de ces contenus à condition de citer l'auteur et l'origine, vous ne pouvez en faire une utilisation commerciale, et enfin vous devez partager tout travail ou œuvre dérivée sous les mêmes conditions — c'est-à-dire avec la même licence d'utilisation Creative Commons.