Nu de BBC micro:bit niet langer gereserveerd is voor uitsluitend twaalfjarige schoolkinderen in het Verenigd Koninkrijk, maar gewoon online te koop is, is het tijd om de kaart en zijn programmeeromgevingen eens wat nauwkeuriger te onderzoeken.

Wat is het?
De BBC micro:bit is een klein (52 x 42 mm) microcontroller-board bedoeld voor leuke draadloze toepassingen. Op de componentenzijde van de kaart vinden we een Nordic nRF51822 ARM Cortex-M0 microcontroller met geïntegreerde Bluetooth Low Energy (BLE) interface, een 3D-versnellingsopnemer (NXP MMA 8652), een 3D-magnetometer (NXP MAG 3110) en een uitbreidingsconnector. Op de andere kant vinden we een 5 x 5 LED-matrix en twee drukknoppen. Omdat het een ARM mbed-compatibel apparaat is (dit is geïmplementeerd in een tweede ARM Cortex-M0 µC, een NXP Kinetis KL26), kan de kaart met drag-and-drop worden geprogrammeerd via USB , maar ook draadloos (Over The Air: OTA) dankzij de Bluetooth-interface.



Het grafisch ontwerp van de kaart is er vooral op gericht om kinderen aan te spreken. Het lijkt min of meer op een gezicht. (Zijn de drukknoppen de ogen of stelt het micro:bit logo de ogen voor?) Er zijn soldeermaskers met verschillende kapsels in meerdere kleuren. Het board is ook ontworpen met zorg voor de veiligheid. Daarom wordt het gevoed uit een externe batterijhouder (voor twee AAA 1,5 V-cellen) in plaats van een knoopcel op de kaart zoals in eerdere ontwerpen. De kaart kan ook worden gevoed via de USB -connector.
 
Omdat het belangrijkste doel van de BBC is om kinderen zover te krijgen dat ze software gaan maken, is er ondersteuning in de vorm van verschillende online programmeergereedschappen bestemd voor beginnelingen. Er zijn op dit moment vier verschillende talen beschikbaar: Block Editor en TouchDevelop, beide van Microsoft, een visuele JavaScript-editor van Code Kingdom en MicroPython. Meer gevorderde gebruikers kunnen de kaart ook rechtstreeks programmeren in C/C++ vanuit de ARM mbed-ontwikkelomgeving.

Wat kun je ermee doen?

Naast het scrollen van tekstberichten en het produceren van andere visuele effecten op de LED-matrix kan de micro:bit worden gebruikt voor veel andere toepassingen. Dankzij de batterijvoeding en de Bluetooth LE-verbinding is de kaart uitstekend geschikt voor Internet of Things (IoT), wearables en mobiele toepassingen. De sensoren op de kaart maken het mogelijk om oriëntatie en beweging te detecteren, waardoor hij geschikt is voor spelletjes en gamecontrollers of voor het op afstand besturen van andere apparaten. Het board kan ook worden gebruikt als het brein van een toepassing, zoals een robot of een karretje, waarbij de hardware wordt aangesloten op de uitbreidingsconnector.
 
Deze extension connector geeft toegang tot 19 I/O-pennen van de hoofdcontroller (plus voeding), de drukknoppen, zes analoge inputs, een SPI bus en de I²C-bus die ook is verbonden met de versnellingsopnemer en de magnetometer. Vijf van de pennen zijn ontworpen als grote gaten, waar banaanstekkers en krokodilklemmen op passen voor het snel en gemakkelijk aansluiten aan breadboards en andere hardware.
 
Een interessant detail: de 5 x 5 LED-matrix is eigenlijk bedraad als een 3 x 9 matrix. Deze verrassende configuratie is gekozen om aanrakingsdetectie mogelijk te maken met behulp van de LED-capaciteit om te reageren op binnenkomend licht. Met de matrix kan één LED worden aangestuurd terwijl tegelijk de lichtintensiteit op een andere LED wordt gemeten.

Het programmeren van de micro:bit

Om te programmeren ga je gewoon naar de website en klik je op 'Create Code' of, als je al eerder scripts hebt gemaakt, op 'My scripts' bovenaan de pagina. Je hoeft niet eerst een account op te zetten, je kunt meteen beginnen met programmeren. De programma’s worden scripts genoemd. Ze worden opgeslagen in de cloud en zolang je de cookies niet verwijdert van je PC kun je ze gemakkelijk ophalen. De scripts kunnen ook op je eigen computer worden opgeslagen om ze te bewaren of om ze met elkaar te combineren. Het is ook mogelijk om scripts die de moeite waard zijn te delen met andere gebruikers.
 
Er zijn dus verschillende programmeergereedschappen beschikbaar voor de micro:bit, allemaal online: Block Editor, TouchDevelop, JavaScript, MicroPython en mbed. In theorie zouden ze allemaal dezelfde mogelijkheden moeten bieden, maar in de praktijk is dat niet het geval. Ze werken allemaal op dezelfde manier: schrijf een script of programma, klik op Compile en download het HEX-bestand dat daarmee wordt aangemaakt. Het HEX-bestand kun je dan naar het opslagapparaat van de micro:bit slepen. (Natuurlijk moet de micro:bit daarvoor met de computer verbonden zijn.) Het board start dan opnieuw op en voert het nieuwe script uit.

Block Editor

Microsoft’s Block Editor is een Scratch-achtige visuele programmeertool waarin de programmeur symbolen op een canvas plaatst om de structuur van het programma aan te geven en dan alleen nog wat details zoals de namen van variabelen en de waarden van constanten hoeft in te typen. Het gereedschap geeft geen volledige vrijheid bij het plaatsen van de symbolen, zodat er alleen syntactisch juiste programma’s kunnen worden gevormd. Maar voor de rest is de programmeeromgeving niet behulpzaam. Het staat de programmeur vrij om een grote puinhoop te maken van de algoritmen die hij/zij probeert te implementeren. Block Editor leert je niet hoe je moet programmeren, het voorkomt alleen syntax-fouten.



Het is op deze manier mogelijk om redelijk snel iets te programmeren, mede dankzij de knip/plak-mogelijkheden. Het programma kan meteen worden uitgeprobeerd op een virtuele micro:bit. Andere debuggings-mogelijkheden ontbreken.

TouchDevelop

TouchDevelop komt ook van Microsoft. Het lijkt wel wat op Block Editor, want het voorkomt syntax-fouten door voorgedefinieerde programmaconstructies voor te stellen, maar het presenteert het programma als broncode, alsof het is ingetypt in plaats van samengesteld met het slepen van symbolen. Het is dus meer een tekst-gebaseerd gereedschap, maar het is wel heel frustrerend dat het lijkt als of je met die broncode alles in de hand hebt, maar toch gebruik moet maken van de drag-and-drop menu’s om de code te veranderen. Net als bij Block Editor kan het programma snel worden getest op een virtuele micro:bit, en ontbreken andere debuggings-mogelijkheden.



Ik vond TouchDevelop moeizaam werken; het vertraagde me in plaats van me te helpen.

JavaScript

Er is een JavaScript editor beschikbaar gesteld door Code Kingdom. Deze editor heeft een interessante code-abstractie-functie. Een schuif onderaan het venster maakt het mogelijk om te kiezen in welke mate van detail de code moet worden weergegeven. Op het hoogste abstractieniveau (schuif naar links) werkt het als Block Editor op een grafische manier, maar met de schuif helemaal naar rechts kun je echte JavaScript-instructies intypen. Mensen met wat programmeerervaring zullen daar waarschijnlijk de voorkeur aan geven, want in deze modus is knippen en plakken mogelijk, waardoor veel sneller kan worden gewerkt. Ook hier kan het programma in een simulator worden getest.



Ik had wat problemen met de Compile-button: het programma wilde niet downloaden naar mijn PC. Om het op te lossen moest ik mijn webbrowser opnieuw opstarten.

MicroPython

Veel mensen zullen de mogelijkheid om de micro:bit in MicroPython te programmeren waarschijnlijk wel waarderen, maar ik vond de implementatie erg tegenvallen. Dat ligt voornamelijk aan de editor en de eisen voor het inspringen van Python-code (ik haat dat). Ik vond het heel moeilijk om een Python script aan de praat te krijgen, omdat de editor de tabs of de einde-regel-tekens of iets anders in de war had geschopt, zonder dat te laten zien. Pas als je het programma op de kaart probeert te draaien krijg je een langzaam scrollend bericht te zien met een mededeling als 'line 11: indentation error bla, bla, bla'. Maar de tabs waren er verdorie wel! Het bleek nodig om elke tab in elke regel opnieuw in te voeren om uiteindelijk een werkend HEX-bestand te krijgen. Knippen en plakken werkt, maar gooit alles in de war. Het is bijzonder frustrerend.
 
Er is geen simulator beschikbaar voor MicroPython.



Het enige positieve vond ik het snelle compileren en downloaden, veel sneller dan bij de andere tools. En, na wat zoeken, de gedetailleerde documentatie, waaruit je kunt leren hoe MicroPython moet worden gebruikt. Uit de documentatie blijkt dat er veel modules beschikbaar zijn, die alle functies van de kaart ontsluiten. Er is ook een link naar een offline micro:bit programmer met de naam uFlash (micro-Flash), waarmee MicroPython-projecten kunnen worden gemaakt in een editor naar eigen keuze. Op die manier is MicroPython toch goed te gebruiken.

mbed

Tenslotte is er nog mbed for micro:bit van ARM . Dit is een online programmeergereedschap voor mensen met wat programmeerervaring waarmee code in C/C++ kan worden geschreven. Reken niet op een simulator of een debugger. Maar dit is een fatsoenlijke programmeeromgeving met echte bewerkingsmogelijkheden enz., geen speelgoed. Hiermee zijn echte toepassingen te ontwikkelen. Verder is er een uitgebreide en goed gedocumenteerde bibliotheek die is gemaakt door Lancaster University waarmee alle mogelijkheden van de micro:bit kunnen worden benut, dit is een prachtig stukje werk. Uitgebreide mbed-bibliotheken van anderen kunnen in het programma worden gesleept om snel allerlei functies toe te voegen aan je project. En wat nog mooier is: mbed kan ook offline worden gebruikt, met een echte debugger. Segger, de fabrikant van de J-Link pods, heeft speciale firmware beschikbaar gesteld voor de micro:bit waarmee breakpoints en single-stepping mogelijk zijn.
 
De mbed-website is ook de plaats waar firmware updates en gedetailleerde technische informatie over de kaart te halen zijn (tot nu toe zijn er nog geen nieuwe versies vrijgegeven).

Dubbelklik op het HTM-bestand in het opslagapparaat van de micro:bit om aan de slag te gaan met mbed. Je komt dan op de mbed-website waar je kunt inloggen of een account aanmaken als je dat nog niet hebt. Na het inloggen is de micro:bit beschikbaar als één van de beschikbare platforms (of als het enige platform). Je kunt er dan meteen mee aan de slag.

Bluetooth & over the air programmeren

De online programmeergereedschappen voor de micro:bit kunnen worden gebruikt op mobiele apparaten, iets dat vooral de jongere generatie zal aanspreken, omdat hun hele leven draait om zo’n apparaat. De micro:bit ondersteunt Bluetooth en er is een app van Samsung voor het draadloos (OTA) uploaden van programma’s naar de kaart. Om dat te laten werken, moet de kaart eerst pairen met het mobieltje. Dat gaat in verschillende stappen en werkt op een beetje een onverwachte manier, vooral als je het voor de eerste keer probeert.
 
Start de app en ga naar “Connections”. Kies dan ‘Pair a new micro:bit’ en volg de instructies. Om de micro:bit in pair-modus te krijgen, moet de kaart worden gereset, terwijl de beide drukknoppen A en B tegelijk worden ingedrukt. Er worden dan een boodschap en vervolgens een LED-patroon weergegeven. Kopieer dit patroon in de app door de juiste vlakjes te selecteren en druk dan op ‘Next’. Lees de instructies zorgvuldig en druk dan op ‘Pair’. Nu komt het lastige gedeelte: de micro:bit geeft nu een code van zes cijfers weer. Die cijfers worden één voor één weergegeven en moeten worden ingevoerd in de app. Helaas is de wachttijd tussen twee digits best kort, dus er is kans dat je een cijfer mist. De code wordt herhaald weergegeven, dus je kunt proberen je achterstand in te lopen, maar het is waarschijnlijk gemakkelijker om iemand te vragen je te helpen. De een leest dan de cijfers hardop voor, terwijl de ander ze invoert in de app. Als de code met goed gevolg is ingevoerd, vraagt de micro:bit je de A-knop in te drukken en dan wordt een vinkje weergegeven. Officieel moet de micro:bit nu gereset worden, maar bij mij startte hij vanzelf opnieuw op.

Nu kunnen we proberen om de kaart OTA te programmeren. De app bevat drie voorbeeldprogramma’s om het mee te proberen. Ik probeerde het met ‘find my phone sample’ en dat werkte prima.



Het gaat niet heel snel, het duurt wel een minuut, maar het werkt. Tenminste... de programmeerfunctie werkt. Helaas werkte het programma zelf niet, in elk geval niet met mijn telefoon. Als ik op de A-knop drukte (zoals de pijl op het display van de micro:bit suggereerde) gebeurde er helemaal niets. Misschien is mijn telefoon niet juist geconfigureerd? Ik weet het niet. Daarna probeerde ik ‘selfie remote sample’, maar ik kreeg een niet erg behulpzame GATT-foutmelding. Ik sloot de app af en stopte hem in de Application Manager van Android. Daarna startte ik hem opnieuw en kon ik weer verbinding maken met de micro:bit om het voorbeeld te uploaden. De micro:bit gaf opnieuw een pijl weer, maar nu gaf hij zelfs een reeks: druk eerst op A, dan op B en daarna op beide knoppen tegelijk. Maar op mijn telefoon gebeurde nog steeds niets. Zelfs al had ik de camera klaarstaan in selfie-modus, er werd geen foto gemaakt. Stoppen van de Samsung app maakte geen verschil. Misschien ligt het aan mijn Samsung-telefoon, maar het was wel een beetje teleurstellend.



Ik startte de app weer op, maakte verbinding met de micro:bit en drukte op ‘Create code’. Zo kwam ik weer op de micro:bit-website terecht, net als eerder. Ik maakte een heel simpel programma in de Block Editor en drukte op ‘Play’. Dit had geen effect, want de simulator werd niet weergegeven op mijn telefoon. Drukken op de download-knop deed de drukknop zelf opleven, maar dat was alles, er was niets te zien dat leek op het downloaden van een programma naar mijn telefoon of rechtstreeks naar de kaart. Teruggaan naar de app hielp niet en ik kon mijn script ook niet terugvinden op de website. Later bleek mijn script er wel te zijn, maar het was leeg. Opnieuw maken en downloaden gaf hetzelfde resultaat. Toen heb ik het opgegeven.

Conclusie

De BBC micro:bit was oorspronkelijk een soort educatief speeltje, maar dit kleine kaartje wint steeds meer populariteit in de professionele markt, waardoor het een goedkoop, krachtig systeem wordt dat een plek verovert naast de Arduino en de Raspberry Pi.
 
Het wordt ondersteund door meerdere programmeeromgevingen gericht op beginners, maar ik vond die erg beperkt en sommige zelfs contraproductief. Ik heb natuurlijk veel programmeerervaring en ik ben gewend aan volwassen IDE’s, dus ik ben natuurlijk bevooroordeeld. Maar ik zou aanbevelen om zo snel mogelijk over te gaan naar mbed om de kaart volledig te kunnen benutten. De uitstekende bibliotheek van Lancaster University maakt dat heel gemakkelijk. Python-liefhebbers kunnen misschien het beste kiezen voor offline programmeren met MicroPython.
 
De Bluetooth-mogelijkheden van de micro:bit werken min of meer, maar niet zo goed als je zou mogen verwachten van een systeem dat je uitdeelt aan een miljoen ongeduldige kinderen.