
Micro:bit: Programovanie v Pythone / 1. časť
Každý používateľ populárnej mikropočítačovej dosky Micro:bit, ktorý to s programovaním myslí vážne, sa skôr alebo neskôr dostane do bodu, keď si myslí, že možnosti tejto vývojovej dosky, vhodnej aj pre úplných začiatočníkov, svojimi schopnosťami „prerástol“. Je to však dosť povrchný pocit. Možno prerástol možnosti grafického programovania vo vývojovom prostredí MakeCode, ale určite nie možnosti výkonného 32-bitového mikrokontroléra Nordic Semiconductor nRF52833 s architektúrou ARM Cortex-M0, taktovaného na 64 MHz, s podporou komunikácie bluetooth, ktorý je v Micro:bite V2.
Samozrejme, mohli by ste tento mikrokontrolér programovať v jazyku C vo vývojových prostrediach Keil IDE alebo Atollic Truestudio na najnižšej úrovni, ale to je zas opačný extrém. Len na nastavenie pracovnej frekvencie by ste potrebovali 20 riadkov kódu a ďalších 40 riadkov na konfiguráciu periférií. O aplikačnej logike ani nehovoriac. Samozrejme, takýto program by bol najrýchlejší a z hľadiska spotreby pri napájaní z batérie najefektívnejší, ale námaha spojená s programovaním by sa vyplatila, iba keby to bolo pre produkt vyrábaný vo veľkej sérii. Ideálny kompromis pre mierne pokročilých programátorov je programovanie Micro:bitu alebo zariadení využívajúcich túto mikropočítačovú dosku v dnes veľmi populárnom programovacom jazyku Python, konkrétne vo verzii MicroPython, určenej pre mikrokontroléry. Navyše skúsenosti, ktoré takto získate, môžete priamo využiť pri programovaní iných mikrokontrolérových platforiem, napríklad ESP32. Mimochodom, dosku mechanicky aj elektricky kompatibilnú s Micro:bitom využívajúcu ESP32 sme predstavili v predošlom čísle nášho magazínu.
Vývojové prostredie Mu
Začiatočníci z radov žiakov vyšších ročníkov základných škôl spravidla prechádzajú na Python po tom, ako si osvojili základy algoritmizácie v grafických programovacích prostrediach typu Scratch, kde sa kód aplikačnej logiky tvorí skladaním do seba zapadajúcich blokov typu puzzle a dopĺňaním parametrov. Podľa skúsenosti z krúžkov zameraných na informatiku, programovanie a robotiku je hlavne u talentovaných žiakov dôležité, aby na vyšší „textový“ programovací jazyk prešli čo najskôr, pretože grafické programovanie má svoje limity a žiaci po zvládnutí základov algoritmizácie na ne veľmi rýchlo narazia. Paradoxne hlavný limit grafického programovania je prehľadnosť, teda atribút, ktorý sa spočiatku zdal najväčšou výhodou Scratchu. Zložitejší stavový automat, napríklad na komplexné ovládanie robota, je oveľa prehľadnejší v Pythone než v grafickom znázornení. Python napriek tomu, že nie je kompilačný, ale interpretačný jazyk, má všetky atribúty profesionálneho programovacieho jazyka, umožňuje rýchly vývoj aplikačného kódu, podporuje objektovo orientované programovanie a je vynikajúci pre začiatočníkov. Využívajú ho aj hackeri, odborníci na umelú inteligenciu a profesionálni programátori pracujúci vo veľkých globálnych firmách.
Pre migrantov z iných programovacích jazykov ohľadne zvláštností syntaxe Pythonu stačí informácia, že na definíciu štruktúry programových blokov, ako sú telá procedúr, cyklov alebo kódu, ktorý sa má vykonať v určitej vetve podmienky, sa nepoužívajú oddeľovače typu zložených zátvoriek, ale len odsadenie riadkov kódu medzerami alebo tabulátormi. Vďaka tomu je kód veľmi prehľadný. Ako príklad uvedieme program na rozsvietenie LED na maticovom displeji Micro:bitu:
from microbit import *
display.clear()
for x in range(0, 5):
for y in range(0, 5):
display.set_pixel(x,y,9)
Tomuto krátkemu programovému kódu s dvoma vnorenými cyklami porozumie aj začiatočník. Po preštudovaní niekoľkých príkladov a osvojení si syntaktického minima bude veľmi rýchlo vedieť realizovať v Pythone svoje nápady. Krátka ukážka kódu v predchádzajúcej stati prezradí aj ďalšiu zvláštnosť. Python nepoužíva deklarovanie typov premenných, ale typ premennej sa určí automaticky. Na programovanie aplikácií pre mikropočítačovú dosku Micro:bit môžete použiť webový nástroj na adrese https://python.microbit.org, vtedy nebudete musieť na lokálny počítač nič inštalovať.
Po vytvorení programu v prostredí si stiahnete z webu jeho binárny kód v súbore s príponou hex. Micro:bit pripojený k počítaču pomocou kábla USB sa na počítači zobrazí ako klasický USB úložný priestor, na ktorý stiahnutý súbor s programom stačí skopírovať. Program sa následne automaticky spustí na zariadení. V prípade aplikácie v jazyku Python tento súbor hex obsahuje nielen kód aplikácie, ale aj engine interpretera jazyka MicroPython. Je to trochu menej praktické, preto vývoj, zostavenie a zavedenie kódu do dosky Micro:bit môžete realizovať priamo na vývojárskom počítači. Stačí vám na to nástroj Mu-editor, ktorý je k dispozícii na https://codewith.mu. Program v jazyku Python z neho zavediete priamo do mikropočítačovej dosky Micro:bit pripojenej cez USB.
Vývojové prostredie na webe
Implementácia Micro Python pre Micro:bit zohľadňuje obsluhu jeho hardvérových komponentov čiže displeja, tlačidiel, zabudovaných senzorov a, samozrejme, aj možnosti práce so zbernicou, na ktorú možno pripojiť rôzne zapojenia a externé moduly. BBC Micro:bit má jednoduchý maticový displej z 25 LED diód, tlačidlá, senzor pohybu, naklonenia, teploty a intenzity okolitého svetla. Podporuje dva druhy bezdrôtovej komunikácie - Bluetooth Low Energy (BLE) na komunikáciu s mobilnými zariadeniami a rádiový prenos na komunikáciu s inými zariadeniami BBC Micro:bit. Takisto je možná sériová komunikácia s počítačom cez kábel USB.
Príkazom from microbit import * sa importujú knižnice obsahujúce špecifické funkcie pre Micro:bit. Hviezdička určuje, že sa importujú všetky knižnice.
Obsluha displeja
Príklad obsahuje príkaz na výpis rolovaného textu a zobrazenie obrázka z množiny preddefinovaných ikon:
from microbit import *
while True:
display.scroll('Hello, World!')
display.show(Image.HEART)
sleep(2000)
Micro:bit má maticový displej 5 × 5 LED, ktoré sú adresované od (0,0) v ľavom hornom rohu až po (4,4).Tretí parameter funkcie set_pixel() je jas príslušnej LED diódy.
from microbit import *
display.set_pixel(0,4,9)
Samozrejme, môžete si definovať vlastný obrázok. V päťmiestnych textových reťazcoch číslica 0 znamená zhasnutú LED diódu a číslami od 1 do 9 definujete jas rozsvietených diód. Napríklad hracia kocka, na ktorej je zobrazené číslo 5 a vidno aj obrysy kocky
from microbit import *
obr = Image("33333:"
"39093:"
"30903:"
"39093:"
"33333")
display.show(obr)
Obsluha tlačidiel
Tlačidlá A a B sú reprezentované objektmi button_a a button_b. Migrantom z iných jazykov pripomíname, že telo cyklu while True: tvoria v jazyku Python všetky príkazy, ktoré sú pod týmto príkazom definujúcim cyklus odsadené od ľavého okraja začiatku príkazu o jeden tabulátor, prípadne vývojári často používajú odsadenie o 4 medzery. V jednom súbore kódu však môžete použiť iba jeden druh odsadenia – buď tabulátormi, alebo medzerami. Rovnako sú odsadené aj príkazy v podmienke typu if.
from microbit import *
while True:
if button_a.is_pressed() and button_b.is_pressed():
display.scroll("AB")
break
elif button_a.is_pressed():
display.scroll("A")
elif button_b.is_pressed():
display.scroll("B")
sleep(100)
Funkcia is_pressed() kontroluje, či bolo tlačidlo zatlačené v danom okamihu. V mnohých prípadoch je užitočná funkcia was_pressed(), ktorá vám prezradí, či tlačidlo bolo stlačené v čase, keď kód robil niečo iné.
Digitálne vstupy a výstupy
Vstupno-výstupné piny zbernice mikropočítačovej dosky Micro:bit, z ktorých mnohé majú aj alternatívne funkcie, sa adresujú ako microbit.pin0 - microbit.pin20. Piny 0, 1 a 2 fungujú aj ako dotykový senzor. Funguje to tak, že jednou rukou chytíte pin GND a prstom druhej ruky pin 0, 1 alebo 2. Či sa človek dotýka pinu, alebo nie, sa dá zistiť príkazom is_touched(), ktorý vracia hodnoty True alebo False.
from microbit import *
while True:
if pin0.is_touched():
display.show(Image.HAPPY)
else:
display.show(Image.SAD)
Ak je pin nastavený ako digitálny vstup, úroveň napätia, a teda aj logická hodnota sa číta pomocou príkazu read_digital(). Príkaz vracia hodnoty 0 alebo 1.
from microbit import *
while True:
if pin1.read_digital():
display.show(Image.HAPPY)
else:
display.show(Image.SAD)
Hodnotu na príslušnom pine nastavujete príkazom write_digital(parameter), kde parameter môže nadobudnúť hodnoty 0 alebo 1.
from microbit import *
while True:
pin1.write_digital(1)
sleep(500)
pin1.write_digital(0)
sleep(500)
Možnosti, ktoré poskytuje Python pre Micro:bit, sa nám nezmestili do jedného článku, preto v budúcom pokračovaní ukážeme možnosti analógových vstupov a výstupov, ovládanie servomotorov, meranie teploty, načítanie a spracovanie údajov z akcelerometra či kompasu, možnosti ukladania údajov do trvalého úložného priestoru, kde zostanú aj po vypnutí napájania. Rovnako aj možnosti bezdrôtovej komunikácie cez bluetooth alebo medzi viacerými Micro:bitmi navzájom.
Zobrazit Galériu