Youpie, la carte micro:bit de BBC n'est plus réservée aux élèves de 12 ans des écoles du Royaume Uni. Il est possible de la commander par l'internet. Je vous invite à l'examiner de près avec moi dans son environnement de programmation.

Comment est-ce fait ?
La micro:bit de BBC est une carte à microcontrôleur  de seulement 52 x 42 mm conçue pour les jeux et les applications connectées. Un µC nRF51822 ARM Cortex-M0 de Nordic avec Bluetooth faible énergie (BLE = Bluetooth Low Energy), un accéléromètre 3D (NXP MMA8652), un magnétomètre 3D (NXP MAG3110) et un connecteur d'extension occupent le côté composants de la carte. Une matrice de 5 x 5 LED et deux boutons-poussoirs occupent l'autre côté. La carte est compatible ARM mbed (implémenté sur un second MCU ARM Cortex-M0, un NXP Kinetis KL26). Elle peut être programmée par glisser-déposer via USB, mais également sans fil (OTA = Over The Air) par Bluetooth.



On dirait que la carte a été ornée d'un dessin censé plaire aux jeunes. Il évoque vaguement un visage (sont-ce les boutons-poussoirs ou le logo micro:bit qui en font les yeux ?) avec une sorte de chevelure sérigraphiée en couleur. Sa sécurité n'a pas été négligée, puisque cette carte est alimentée par batteries externes (2x AAA 1,5 V) au lieu d'une pile bouton comme ce fut le cas dans le passé. Le connecteur USB peut également alimenter la carte.

Le but de BBC est d'inciter les enfants à écrire des logiciels ; la micro:bit est donc associée à une suite d'outils de programmation en ligne accessible aux débutants. Actuellement, quatre langages sont disponibles : Block Editor et TouchDevelop, tous deux de Microsoft, un éditeur JavaScript visuel de Code Kingdom et MicroPython. Pour les pros, la carte peut également se programmer directement en C/C++ depuis l'environnement de développement ARM mbed

Qu'est-ce qu'on en fait ?
La micro:bit trouvera une multitude d'applications, bien au-delà du banal message de texte défilant et autres effets visuels sur matrice de LED. Son alimentation par batterie externe et sa connexion BLE confèrent à cette carte une grande aptitude à l'Internet des objets (IoT = Internet of Things) ainsi qu'à des applications mobiles et vestimentaires. Les capteurs embarqués (détection de l'orientation et des déplacements) lui ouvrent la voie des jeux et contrôleurs de jeu ainsi que celle de la commande à distance d'autres appareils. Je vois bien cette carte micro:bit comme chef d'orchestre d'une application du genre robot ou véhicule.

Le connecteur d'extension donne accès aux 19 broches GPIO du MCU, c'est-à-dire aux boutons-poussoirs, aux 6 entrées analogiques, au bus SPI, au bus I²C (auquel l'accéléromètre et le magnétomètre sont déjà connectés) ainsi qu'à l'alimentation. En outre, 5 broches se présentent sous forme de grands trous métallisés, parfaits pour une connexion rapide sur plaque d'essais ou d'autres matériels au moyen de fiches banane ou de pinces crocodile.

Caractéristique notable : la matrice de 5 x 5 LED est câblée sous forme de matrice 3 x 9. Cette surprenante configuration permet une détection du toucher (assez rudimentaire) en exploitant la propriété de sensibilité à la lumière des LED. La matrice peut allumer une LED tout en mesurant l'intensité lumineuse sur une LED voisine. 

Comment programmer la micro:bit ?
Pour démarrer la programmation, il suffit de se connecter sur le site et de cliquer sur le bouton « Create Code » ou bien sur « My scripts » en haut de la page si vous avez déjà créé quelques scripts. Il n'est pas nécessaire de créer un compte préalablement, vous pouvez programmer directement. Vos programmes (appelés scripts), sont enregistrés dans le nuage et vous pouvez les retrouver très facilement si vous n'effacez pas les mouchards (cookies) correspondants. Vous pouvez également archiver vos scripts sur votre ordinateur ou les importer sur un autre. Enfin, si vous jugez votre programme utile à d'autres internautes, publiez-le pour le partager.

Comme indiqué ci-dessus, des outils de programmation en ligne sont disponibles pour la micro:bit : Block Editor, TouchDevelop, JavaScript, MicroPython et mbed. En théorie, ils sont tous équivalents. En pratique les différences sont notables. Ils travaillent tous de la même manière : vous créez un script ou programme, cliquez sur un bouton de compilation afin de télécharger un fichier hexadécimal qu'il ne reste plus qu'à transférer dans la mémoire de masse de la micro:bit (que vous n'avez bien sûr pas oublié de connecter préalablement à votre ordinateur). La carte redémarre et exécute votre script.

Block Editor
Block Editor de Microsoft est un outil de programmation visuel analogue à Scratch. L'utilisateur dépose des structures de programmation sur une trame de fond et ajoute au clavier les informations comme les noms de variables ou les valeurs des constantes. L'outil n'accepte pas les erreurs de structure, ce qui assure la rigueur syntaxique des programmes. Malheureusement l'aide de l'éditeur s'arrête là. Or nul n'ignore que la programmation d'un algorithme ne s'improvise pas, sous peine de résultats imprévisibles à l'exécution. Block Editor ne vous apprend donc pas à programmer, il se contente de débusquer les erreurs de syntaxe.



L'outil permet une programmation relativement rapide, en partie grâce aux copier-coller et le programme peut être testé rapidement sur une micro:bit virtuelle. Il n'y a pas d'autre aide au débogage.

TouchDevelop
Proposé aussi par Microsoft, TouchDevelop ressemble un peu à Block Editor car il évite les erreurs de syntaxe en proposant des structures prédéfinies, mais il présente le programme rédigé sous forme de code source, comme s'il avait été tapé au clavier et non pas ajouté par glisser-déposer. Il se rapproche davantage d'un éditeur de texte, mais à mon avis c'est un outil frustrant car il donne l'impression que l'utilisateur contrôle ce qu'il écrit alors qu'en réalité il doit toujours procéder par glisser-déposer depuis le menu. Comme pour Block Editor, le programme peut être testé rapidement sur une micro:bit virtuelle sans autre forme de débogage.



TouchDevelop me ralentit, je l'ai trouvé fastidieux.

JavaScript
Code Kingdom propose un éditeur JavaScript avec une intéressante fonction d'abstraction du code. En bas de l'écran, un curseur permet d'augmenter le degré de détail affiché. Au niveau d'abstraction le plus élévé (curseur à gauche), il travaille à la manière de Block Editor avec des blocs graphiques. Avec le curseur à droite, on peut saisir des instructions JavaScript. Ce sera le mode préféré des programmeurs expérimentés car il gère le copier-coller et accélère notablement l'écriture. Là aussi, le simulateur peut exécuter votre programme.



J'ai rencontré quelques difficultés de téléchargement en utilisant le bouton de compilation. J'ai dû redémarrer mon navigateur Internet pour que ça fonctionne.

MicroPython
La possibilité de programmer la micro:bit en MicroPython aurait de quoi séduire, mais l'outil est décevant en raison surtout des exigences d'indentation en Python (qui me hérissent le poil) et à cause de l'éditeur. J'ai eu du mal à faire marcher un script Python parce que l'éditeur avait subrepticement semé la pagaille dans les tabulations, les caractères de fin de ligne ou autre chose. Cela n'apparaît qu'à l'exécution sur la carte : des messages d'erreurs s'égrènent lentement sur l'écran : « line 11: indentation error bla, bla, bla ». Pourtant les tabulations étaient bien là, que diable ! Finalement j'ai dû retaper chaque tabulation de chaque ligne pour obtenir mon fichier hexadécimal. Le copier-coller fonctionne, mais dans un tel désordre qu'il ne m'en est resté que de la frustration.

Le simulateur n'est pas disponible pour MicroPython.



Le seul point positif est la vitesse élevée de compilation/téléchargement. Les autres environnements sont loin derrière. En outre, une fois qu'on s'est donné la peine de charger la documentation d'aide détaillée, on peut se familiariser avec l'utilisation de MicroPython. Cette documentation nous apprend que pour accéder à toutes les fonctions de la carte, de nombreux modules sont disponibles. Elle vous dirige aussi vers un programmateur micro:bit hors ligne dénommé µFlash (prononcez micro-flash) vous permettant de développer des projets MicroPython dans l'éditeur de votre choix. Par ce biais, MicroPython redevient une option viable.

mbed
Pour finir,  ARM propose aussi mbed for micro:bit. Il s'agit d'un outil de programmation en ligne pour les programmeurs assez expérimentés pour rédiger en C/C++. Malheureusement il n'y a ni simulateur ni débogueur. Ce n'est pas un jouet, mais un véritable environnement de programmation avec éditeur, etc. pour développer des applications. En outre, une vaste bibliothèque bien documentée, créée par l'université de Lancaster donne accès à toutes les fonctions de la carte micro:bit : un outil puissant et indispensable. Pour ajouter rapidement d'autres fonctions à votre projet, il suffit de glisser-déposer les bibliothèques mbed d'autres auteurs dont vous avez besoin. Une bonne surprise : en travaillant hors ligne, il est possible d'ajouter un véritable débogueur. Segger, le fabricant de la sonde de débogage J-Link pod, a mis au point un microprogramme spécifique pour la micro:bit. Il permet l'insertion de points d'arrêt et une exécution pas à pas.

Le site mbed diffuse les mises à jour du microprogramme (aucune à ce jour – 13-09-2016) et la documentation technique de bas niveau de la carte.

Pour démarrer avec mbed pour la micro:bit, il suffit de double-cliquer sur le fichier HTM de sa mémoire de masse. Cela vous conduit sur le site mbed sur lequel vous pouvez ouvrir une session après avoir préalablement créé un compte. Une fois la session ouverte, la micro:bit apparaît comme plateforme disponible (il peut y en avoir plusieurs) et vous pouvez immédiatement commencer à travailler avec.

Bluetooth & programmation sans fil
Les outils de programmation en ligne de la carte micro:bit fonctionnent sur les appareils mobiles. Cela devrait séduire la jeune génération qui ne jure plus que par eux. La micro:bit embarque le Bluetooth et une appli de Samsung est disponible pour charger les programmes par liaison sans fil  OTA (= Over The Air) ». Pour que cela fonctionne, il faut d'abord apparier la carte et le téléphone. La procédure comporte plusieurs étapes et peut surprendre, surtout la première fois.

Lancez l'application et allez à « Connections », puis appuyez sur « Pair a new micro:bit »’ et suivez les instructions. Pour mettre la micro:bit en mode d'appariement, maintenez les boutons A et B enfoncés et actionnez le bouton de réinitialisation sur l'autre face de la carte. Elle affiche un message puis un motif LED. Copiez ce motif dans l'appli en cliquant sur les cases correspondantes de la matrice puis le bouton « Next ». Lisez attentivement les instructions et cliquez sur « Pair ». C'est maintenant que ça se corse. La micro:bit affiche chiffre par chiffre un nombre qui en comporte six et que vous devez entrer dans l'appli. Malheureusement, l'intervalle entre les chiffres est plutôt court et vous avez toutes les chances d'en manquer un. Le code s'affiche à nouveau et vous pouvez réessayer, mais il est plus facile d'opérer avec l'assistance d'une deuxième personne. L'une lit les chiffres à voix haute, et l'autre les saisit dans l'appli. Une fois le code correctement saisi, la micro:bit vous demande d'appuyer sur le bouton A et un symbole de réussite s'affiche. En théorie vous devez réinitialiser la micro:bit, mais en pratique, elle le fait d'elle-même.

L'étape suivante consiste à programmer la carte par OTA. L'appli comporte trois exemples que vous pouvez essayer. J'ai essayé « find my phone sample » : aucune difficulté.



Ça ne va pas vite (une minute environ) mais ça marche, ou plutôt la procédure de programmation marche. En effet, le programme lui-même ne fonctionne pas, tout du moins avec mon téléphone. Si j'actionne le bouton A (comme suggéré par la flèche de l'afficheur de la micro:bit) rien ne se passe. Mon téléphone n'est peut-être pas configuré correctement. J'ignore d'où vient ce problème. J'essaie donc le selfie remote sample, mais en retour je ne reçois qu'une erreur GATT, ce qui n'est pas d'une grande utilité. Je quitte l'appli et j'en détruit l'instance dans le gestionnaire d'applications d'Android, je la relance, et je peux me reconnecter à la micro:bit et programmer l'exemple. De nouveau la micro:bit affiche une flèche mais cette fois-ci avec la séquence suivante : actionner A, puis B puis les deux. Cependant, mon téléphone ne réagit pas. J'ai pourtant activé l'appareil photo en mode autoportrait, mais il ne prend pas de cliché. L'abandon de l'appli Samsung ne donne rien. Cela vient peut-être de mon téléphone Samsung, mais je suis tout de même déçu.



De retour dans l'appli et reconnecté à la micro:bit, j'appuie sur « Create code ». Comme précédemment, cela me renvoie sur le site micro:bit . Je crée un programme très simple avec le Block Editor et j'appuie sur « Play ». Cela n'a aucun effet car le bouton simulator n'apparaît pas sur l'écran de mon téléphone. En appuyant sur le bouton de téléchargement, le bouton du simulateur apparaît, mais rien de plus : aucun signe de téléchargement, ni vers le téléphone ni vers la carte. Un retour à l'appli ne donne rien. Une recherche de mes scripts sur le site non plus. En fait mon script est bien là, mais vide. Le recréer et le télécharger à nouveau conduit au même résultat. Résigné, je n'insiste pas.

Conclusion
Au départ la carte micro:bit de BBC est une sorte de jouet d'apprentissage, mais elle convainc petit à petit le monde professionnel qui la voit aujourd'hui comme une carte bon marché, puissante et polyvalente. Elle tend à s'installer durablement entre Arduino et Raspberry Pi.

Bien qu'adaptés aux débutants, les différents environnements de programmation accessibles, s'avèrent décevants, trop limités, voire contre-productifs. J'ai beaucoup programmé et suis habitué aux environnements de développement complets, mon opinion est donc sûrement biaisée et peu objective. Je crois cependant qu'il vaut mieux passer le plus rapidement possible à mbed pour exploiter tout le potentiel de cette carte. L'excellente bibliothèque de l'université de Lancaster facilite ce passage. Les inconditionnels de Python trouveront leur bonheur dans la programmation MicroPython hors ligne.

On peut dire que le Bluetooth de la micro:bit marche un peu (a bit, comme on dit en anglais) mais n'est pas exploitable à 100%, loin de là. N'est-ce pas dommage sachant que plus d'un million d'enfants ont eu cette carte entre les mains ?