Cel
Wstępne zapoznanie z platformą BBC Micro Bit metodami jej programowania oraz napisanie pierwszego programu w edytorze Microsoft MakeCode.
Wymagania
- moduł BBC Micro Bit,
- kabel micro-USB,
- koszyk na baterie (opcjonalnie).
Wstęp
Często wybieranym przez nauczycieli językiem w nauczaniu programowania, szczególnie w młodszych klasach, jest opracowany w MIT Media Lab dla celów edukacyjnych wizualny język Scratch. Pomimo sceptycyzmu wielu osób do graficznego sposobu programowania język ten jest jednym z najbardziej popularnych języków świata i według rankingu TIOBE w lipcu 2020 zajmuje bardzo wysokie 17 miejsce1. Ci, którzy jako główny język w nauce programowania wybrali Scratch, nie muszą rezygnować z poznawania systemów wbudowanych. Wiele popularnych platform daje taką możliwość, tym bardziej, że powstało wiele modyfikacji tego języka.

Rysunek 1. Główna strona projektu micro:bit
Bardzo dobrze do graficznego trybu programowania jest przystosowana platforma Micro Bit (nazwa stylizowana na micro:bit), opracowana przez BBC dla celów edukacyjnych. Posiada dedykowane środowisko programistyczne dostępne online oraz dużą międzynarodową społeczność. Główne metody programowania tego systemu wbudowanego opierają się na językach Python, JavaScript i podobnym do Scratcha języku Blocks. Przeznaczenie edukacyjne skutkuje bardzo łatwą obsługą całego systemu. Niewielką niedogodnością może być natomiast bardzo mała ilość dokumentacji w języku polskim. Micro:bit nie posiada nawet polskiej strony w Wikipedii2. Oficjalna strona projektu microbit.org w języku angielskim jest za to niezwykle bogata i została już przetłumaczona na kilkanaście popularnych języków.
Na szczególną uwagę zasługują umieszczone na stronie głównej linki do materiałów dla nauczycieli oznaczone na rysunku 1 czerwonymi ramkami.
Ogólna charakterystyka micro:bita

Rysunek 2. Ogólny widok micro:bita z przodu (1) oraz z tyłu (2) z kablem USB (3) i koszykiem na baterie (4)
Micro:bit jest jednopłytkowym systemem wbudowanym wielkości połowy karty kredytowej (rysunek 2). Posiada architekturę ARM i należy do klasy układów open hardware (sprzętowy odpowiednik open source). Cechą wyróżniającą go od innych systemów wbudowanych jest stałe wyposażenie (na płytce) w kilka użytecznych czujników i prosty wyświetlacz. Pozwala to na pisanie ciekawych aplikacji bez potrzeby podłączania czegokolwiek z zewnątrz, co często zniechęca początkujących programistów, gdyż wymaga dodatkowej znajomości chociaż podstaw elektroniki. Micro:bit posiada także wbudowaną antenę radiową pozwalającą na realizację prostej komunikacji pomiędzy modułami. Dodatkowo na rynku jest bardzo wiele dodatkowych, gotowych modułów przystosowanych do bezpośredniego podłączenia z micro:bitem.
Na rysunku 2 przedstawiono ogólny widok micro:bita z przodu (1) i tyłu (2). Do zaprogramowania, poza tym, będzie niezbędny kabel micro-USB, przez który będzie można także zasilać moduł. Do zasilania lepszym rozwiązaniem będzie jednak zakup koszyka na baterie (4) z odpowiednim dla micro:bita złączem. Najczęściej zakup z akcesoriami lub w większych zestawach z dodatkami jest znacznie korzystniejszy cenowo. Kolorystyka (5) modułu (na zdjęciu fioletowa) nie ma znaczenia i służy jedynie do łatwiejszej orientacji w przypadku jednoczesnego wykorzystywania wielu modułów.
Na rysunku 3 przedstawiono rozmieszczenie podstawowych, ważnych z punktu widzenia użytkownika, komponentów modułu micro:bit. Większość z nich posiada opis na płytce, z tym że nieco niewłaściwie piny opisane jako pins z tyłu płytki są z tej strony niepodłączone, a ich wyprowadzeń należy szukać z przodu (9). Poszczególne elementy micro:bita oznaczone na rysunku 3 to:
- antena radiowa do komunikacji w paśmie 2,4 GHz (w tym Bluetooth),
- złącze micro-USB do programowania i zasilania układu,
- przycisk reset,
- złącze zewnętrznej baterii,
- dwa programowalne przyciski,
- wyświetlacz – matryca 5 × 5 diod LED, która może służyć także jako czujnik światła,
- trójosiowy akcelerometr i trójosiowy magnetometr,
- wbudowany w procesor czujnik temperatury,
- złącze stykowe GPIO (ang. General-Purpose Input/Output) – dodatkowe wejścia i wyjścia ogólnego przeznaczenia.

Rysunek 3. Rozmieszczenie podstawowych elementów micro:bita po obu stronach płytki (opis w tekście)
Złącze (9) pozostaje do dyspozycji użytkownika, ale może służyć do podłączenia tak zwanych modułów rozszerzeń na przykład wyświetlaczy, gamepadów, dodatkowych czujników itp.
Metody programowania modułu micro:bit

Rysunek 4. Fragment strony microbit.org/code/ informującej o najpopularniejszych możliwościach programowania modułu
Kliknięcie w link Let’s Code, oznaczony na głównej stronie projektu (rysunek ) niebieską ramką, przeniesie nas do strony pośredniej microbit.org/code/ informującej o głównych, oficjalnych metodach programowania (rysunek 4), czyli z użyciem języków Python, JavaScript oraz Blocks. Linki Let’s Code na tej stronie poprowadzą nas do odpowiednich edytorów on-line, chociaż właściwie należałoby powiedzieć zintegrowanych środowisk programistycznych.
W większości projektów związanych z micro:bitem używać będziemy języka Blocks, dlatego pierwszy przykład programowania modułu przedstawiono z użyciem edytora MakeCode będącego wspólnym środowiskiem programistycznym dla tego języka i JavaScript.
Pierwszy projekt
Pierwszym programem, jaki zazwyczaj pisze się, zaczynając naukę programowania nowego języka, jest „Hello World!” tłumaczony często na „Witaj Świecie!”, a polegający na wyświetleniu prostego komunikatu na ekranie. Micro:bit jako „standardowego wyjścia” używa matrycy LED 5 × 5, na której gotowe metody umożliwiają wyświetlanie liczb, pojedynczych znaków, predefiniowanych i własnych ikon oraz płynących napisów. Można zatem napisać „Hello World!”, jednak przyjęło się, że odpowiednikiem tego programu dla micro:bita jest „Migające serce”, które wyświetla na matrycy LED jakiś obraz i wygasza go na zmianę. Jest to o tyle dobry wybór, że systemy wbudowane działają w nieskończonej pętli i pojedyncze wyświetlenie napisu nie oddaje istoty pracy takich układów. W następnych sekcjach po kolei przedstawiono sposób pracy z micro:bitem na przykładzie „Migającego serca”. Dobrym wprowadzeniem może być przewodnik dostępny po kliknięciu Get started na głównej stronie (rysunek 1).
Zarządzanie projektami
Uruchomienie Let’s Code pod opisem edytora MakeCode na stronie microbit.org/code (rysunek 4) przeniesie nas do strony zarządzania projektami (rysunek 5) makecode.microbit.org (1).

Rysunek 5. Strona zarządzania projektami micro:bita
Jest to strona (1), od której zawsze zaczynamy projekt. Wszystkie istotne elementy znajdziemy poniżej rysunkowego baneru. Sekcja Moje projekty (2) podzielona jest na zapisane w chmurze wcześniejsze własne projekty (4), które możemy w każdej chwili edytować, oraz przycisk uruchamiający nowy, pusty projekt (3).
Jeżeli nasz projekt jest zapisany jedynie lokalnie na dysku, możemy go edytować po zaimportowaniu przyciskiem Import (5), pod warunkiem, że jest on w formacie *.hex (więcej szczegółów w dalszej części). Poniżej sekcji z własnymi projektami znajduje się wiele gotowych, przygotowanych przez społeczność, projektów i tutoriali. Uruchomienie ich przeważnie nie prowadzi wprost do edytora MakeCode, ale do zorganizowanych samouczków. Można zauważyć, że pierwszym projektem samouczka jest micro:bitowe „Hello World!”, czyli „Migające serce”.
MakeCode
Kliknięcie New project (3) na stronie zarządzania projektami (rysunek 5) uruchomi okno edytora MakeCode (rysunek 6). W zasadzie jest to, w obecnym znaczeniu, zintegrowane środowisko programistyczne (IDE) zawierające wszystkie niezbędne narzędzia do uruchomienia projektu. Bezpośrednio do strony edytora prowadzi link makecode.microbit.org/#editor (znak # jest konieczny). Zawsze możemy powrócić do strony zarządzania projektami po naciśnięciu Home (1), zostaniemy wówczas poinformowani o konieczności zapisania bieżącego projektu lub pominięciu zmian.
Najistotniejsze na początku elementy edytora MakeCode wyróżniono na rysunku 6 czerwonymi ramkami.
Najważniejszą częścią edytora jest obszar pisania programu (4). Słowo „pisanie” nie do końca jest trafne, bowiem tworzenie programu przebiega graficznie i polega na umieszczaniu w obszarze edycji odpowiednich „bloków” – przenoszeniu ich z palety (3) przy pomocy myszy. Obszar edycji nie ma ograniczeń wymiarowych ani w pionie, ani w poziomie. Dla wygody można zmienić powiększenie samego tylko obszaru edycji (4) przyciskami +/- znajdującymi się bezpośrednio poniżej po prawej stronie, nie zmieniając przy tym powiększenia pozostałych elementów edytora.

Rysunek 6. Główne elementy edytora Microsoft MakeCode
W początkowym widoku, po uruchomieniu nowego projektu, w obszarze edycji znajdują się już bloki o nazwach on start i forever (5). Zazwyczaj każdy sensowny program zawiera te bloki, chociaż są one opcjonalne i tak naprawdę najprostszy, ale poprawny, program jest programem pustym. Obecność tych bloków wynika z pewnej ogólnej zasady programowania systemów wbudowanych, gdzie po uruchomieniu lub naciśnięciu przycisku reset następuje faza przygotowania, a następnie program przechodzi do wykonywania pewnego zadania (nadzorowania jakiegoś fizycznego procesu) w nieskończonej pętli. Dla osób programujących Arduino odpowiednikiem będą funkcje setup() i loop().
Drugim bardzo ważnym elementem jest paleta komponentów (3), zwanych blokami, czyli elementarnych składników tworzących program. Paleta nie zawiera samych bloków ze względu na ich bardzo dużą ilość, ale grupuje je tematycznie. Bloków tych nie należy mylić z blokami programowymi, w sensie zazwyczaj rozumianym w programowaniu jako wyróżnionego, niepodzielnego fragmentu kodu, do którego wydzielenia w językach wywodzących się od języka C używa się nawiasów klamrowych {}. Być może lepszą nazwą byłyby klocki, bo forever czy loop są zarówno blokami, jak i … blokami. W MakeCode bloki są po prostu najmniejszymi elementami składowymi programów. W palecie (3) oprócz najprostszych instrukcji, warunków, pętli itp. znajdziemy także API do wszystkich fizycznych czujników micro:bita.
Po lewej stronie okna edytora znajdziemy panel podglądu (2), w którym możemy obserwować symulowane graficznie działanie programu. W przypadku gdy chcemy skupić się na pisaniu i potrzebujemy więcej miejsca na kod, panel ten można schować przy użyciu strzałki dokowania po jego prawej stronie.
Dobrze jest, gdy nasz projekt posiada nazwę inną niż „Untitled”. Możemy go nazwać w polu (6). Projekt o tej nazwie będzie automatycznie zapisywany w chmurze i dostępny ze strony zarządzania projektami, o ile pracujemy na tym samym komputerze. Do zapisu projektu na lokalnym dysku służy przycisk save (7). Pliki zapisywane są w formacie *.hex i domyślnie do naszej nazwy dopisywane jest na początku „microbit-”, co oczywiście można zmienić podczas ściągania pliku. Zapis pozwala nie tylko na lokalne przechowywanie projektu, ale przede wszystkim na załadowanie programu do fizycznego urządzenia. Kliknięcie w Download po lewej stronie pola nazwy (6) uruchomi prostego kreatora, ułatwiającego zapis i załadowanie projektu, jednak w dalszej części nie będziemy korzystać z tej funkcjonalności.
Pierwszy program

Rysunek 7. Grupa „Basic” w palecie bloków
Jak już wspomniano wcześniej, pierwszym programem, jaki napiszemy, będzie „Migające serce”. Celem tej części i dalszych nie jest jednak nauka programowania modułu micro:bit, ale przedstawienie podstawowej sesji pracy z nim.
W nowym projekcie (patrz rysunek 6) z palety bloków wybieramy grupę Basic (rysunek 7). Po jej rozwinięciu widzimy podstawowe bloki, które od obszaru edycji możemy przenosić metodą „przeciągnij i upuść”. Wybieramy blok show icon, pozwalający wyświetlać na matrycy LED micro:bita predefiniowane ikony, i przeciągamy do wnętrza bloku forever. Nasz program powinien wyglądać następująco:


Rysunek 8. Przykładowy, symulowany podgląd działania modułu w trakcie tworzenia programu
Domyślną ikoną bloku show icon jest serce. Używając strzałki rozwijania z prawej jego strony, można wybrać inną, przygotowaną przez programistów micro:bita. Od tej chwili w panelu podglądu ((2) na rysunku ) będziemy mogli obserwować symulowane działanie modułu (rysunek 8).
Następnie z grupy Basic wybierzmy show leds, blok który pozwala na wyświetlenie dowolnej, samodzielnie zaprojektowanej ikony 5 × 5 i przenieśmy go do bloku forever poniżej bloku wyświetlającego serce (listing poniżej). Domyślnie blok show leds wygasza wszystkie diody, jednak można je włączyć poprzez kliknięcie. Jest oczywistym, że panel podglądu zareaguje na wprowadzone w kodzie zmiany.

Blok on start jest w tym projekcie zbędny i można bez problemu go usunąć. Można także sprawdzić, co się wydarzy, gdy jakąś ikonę umieścimy w tym bloku lub zmodyfikować program z bloku forever, zmieniając lub dodając ikony.
Zapis programu
Program jest gotowy, jednak działanie symulowane nie może równać się z programem działającym na rzeczywistym urządzeniu. Na początku musimy zapisać program na dysku. W tym celu wpisujemy nazwę w polu (6) na rysunku 6, w naszym przypadku „Migające serce”, i wciskamy przycisk z symbolem dyskietki (rysunek 9), aby zapisać w katalogu, do którego trafiają pobrane dokumenty. Zazwyczaj jest to katalog „Pobrane”, ale jest to zależne od lokalnych ustawień systemowych.

Rysunek 9. Zapis projektu
Pobranemu plikowi zostanie nadana nazwa „microbit-Migające_serce.hex”. Samo rozszerzenie nazwy sugeruje, że została wykonana jakaś forma kompilacji skrośnej, jednak pliki hex stanowią zrozumiałą dla urządzenia formę pośrednią, gdyż zawierają pełną informację o projekcie i mogą z powrotem zostać zaimportowane do edytora.
Podłączenie modułu micro:bit do komputera

Rysunek 10. Podgląd systemu plików MICROBIT w systemie Linux Fedora
Micro:bit podłącza się do komputera bezpośrednio kablem USB, który może służyć także do zasilania modułu. Nowo zakupione urządzenie posiada załadowany bardzo ciekawy program demonstrujący wiele możliwości micro:bita. Po podłączeniu micro:bit jest widziany jako dysk zewnętrzny (rysunek 10) o pojemności około 67 MB, zawierający dwa pliki tylko do odczytu: „DETAILS.TXT” i „MICROBIT.HTM”. W rzeczywistości micro:bit nie zachowuje się jak „zwykły” pendrive. Wbudowane oprogramowanie zarządza jego zawartością, a pliki inne niż dwa początkowe mogą znajdować się na nim tylko przejściowo.
Ładowanie programu
Ładowanie programu jest bardzo proste. Wymaga jedynie skopiowania pliku z rozszerzeniem „hex”, w naszym przypadku „microbit-Migające_serce.hex” (o ile nie zmieniliśmy nazwy) do zamontowanego jako zewnętrzny dysk micro:bita. Przesyłaniu programu towarzyszyć będzie szybkie miganie diody znajdującej się z tyłu modułu pomiędzy gniazdem micro-USB a przyciskiem reset. Plik „microbit-Migające_serce.hex” będzie przez chwilę obecny w widoku zawartości systemu plików MICROBIT. Następnie nastąpi automatyczne odmontowanie tego systemu i jego ponowne zamontowanie. Stan systemu plików powróci do początkowego stanu (jak na rysunku 10), z tym że napisany przez nas program będzie załadowany do pamięci modułu micro:bit, a sam układ przystąpi od razu do jego wykonania. Pozostaje tylko odłączenie modułu od komputera i podłączenie baterii, aby zademonstrować, że program działa już niezależnie na samym tylko micro:bicie.
Modyfikacje
Ponieważ rozdział ma charakter typowo wprowadzający, a nie programistyczny, można spróbować działania przycisku Download na stronie edytora MakeCode. Być może taki sposób pracy wyda się komuś bardziej przystępny.
Warto także spróbować działania bloku on start, umieszczając w nim własną ikonę. Można przy tym spróbować w różnych kombinacjach usuwać bloki on start i forever, sprawdzając tym samym ich funkcje w programie.
Literatura
Powtórzenie zaprezentowanych projektów nie wymaga studiowania dodatkowej literatury. Dopiero wprowadzenie modyfikacji może wiązać się z koniecznością uzupełnienia wiedzy. Najlepszym źródłem informacji w przypadku jakiegoś konkretnego problemu jest internet. Książka pisana swoją wyższość ukazuje dopiero jako podręcznik czy przewodnik.
Informacje bibliograficzne dotyczące źródeł internetowych zamieściłem bezpośrednio w tekście, przy zagadnieniach, których dotyczą.
Do zapisu linków, tylko w tym spisie, wykorzystywana jest metoda skracania adresów (URL shortening). W tym skrypcie wybrano serwis TinyURL.. Dostęp do wszystkich internetowych zasobów został przetestowany 27.02.2020.
Bibliografia zawiera tylko materiały pomocnicze do projektów, których dotyczą, a pominięto literaturę o charakterze ogólnoinformatycznym. Dobór materiałów do nauki kodowania, czy obsługi programów narzędziowych, pozostaje po stronie nauczyciela.
Literatury dotyczącej micro:bita jest niewiele, szczególnie w stosunku do najbardziej popularnych systemów wbudowanych. Nie można liczyć niestety na wiele informacji w języku polskim. Najbardziej godne polecenia, gromadzące także dużo społeczności są strony oficjalnego wsparcia:
- BBC Micro Bit Main Page [https://tinyurl.com/y36runae],
- Micro Bit Let’s Code [https://tinyurl.com/y57san4c],
- Microsoft MakeCode Editor for micro:bit [https://tinyurl.com/ybarrla5],
- micro:bit support [https://tinyurl.com/rmfkwbf].
Literatura uzupełniająca
W niektórych projektach nie wszystko da się podłączyć za pomocą pasujących do siebie wtyków i złącz. Należy wówczas wykonać takie podłączenia samodzielnie. Wymaga to nieco umiejętności majsterkowania i elektroniki. Bardzo ciekawą książką dla początkujących majsterkowiczów jest:
- Roberts Dustyn, Wpraw to w ruch. Proste mechanizmy dla wynalazców, majsterkowiczów i artystów [e-book], tłum. Krzysztof Sawka, Helion, 2015.
Znajdziemy w niej oprócz podstaw elektroniki także dużo elementarnej mechaniki i materiałoznawstwa.
Majsterkowanie z użyciem systemów wbudowanych, tam gdzie nie wszystko pasuje do siebie za pomocą dedykowanych styków, wymaga elementarnej wiedzy z elektroniki. Niezmiennie najważniejszą książką na półce elektronika jest:
- Horowitz Paul, Hill Winfield, Sztuka elektroniki, tłum. Bogusław Kalinowski, Grażyna Kalinowska, t. 1–2, wyd. 12 zmienione, WKŁ, Warszawa 2018.
Jednakże jest to pozycja dla wymagającego czytelnika. Podobnym standardem, ale skierowanym do początkujących jest:
- Platt Charles, Elektronika. Od praktyki do teorii. Wydanie II [e-book], tłum. Konrad Matuk, Helion, 2016.
Na uwagę zasługuje ponadto, w moim przekonaniu bardzo dobra, książka polskiego autora:
- Górecki Piotr, Wyprawy w świat elektroniki, t. 1, WKŁ, Warszawa 2006.
- Górecki Piotr, Wyprawy w świat elektroniki. Wyższy stopień wtajemniczenia, t. 2, WKŁ, Warszawa 2011.
- www.tiobe.com/tiobe-index/ (data dostępu: 6 lipca 2020).
- Stan na lipiec 2020.
