Programovanie Micro:bitu v jazyku Python – 1 časť

Python je interpretovaný programovací jazyk určený pre všeobecné programovanie. Hlavnou výhodou je jeho zrozumiteľnosť, takže zdrojovému programu v jazyku Python porozumie aj začiatočník a bude veľmi rýchlo vedieť realizovať v ňom svoje nápady. Naproti tomu ak by ste ukázali začiatočníkovi kód v programovacom jazyku C, kde sa to len tak hemží smerníkmi, asi by ste ho dosť znechutili a nadobudol by dojem, že programovanie je veľmi zložité.

Python bol navrhnutý ako vysoko modulárny. K dispozícií je niekoľko stoviek modulov, ktoré z neho robia rozšíriteľný jazyk pre potreby akéhokoľvek projektu. Dôležitým cieľom autorov jazyka Python je zachovanie zábavy počas tvorby aplikácií. To sa odzrkadľuje aj v názve jazyka – podľa britskej komediálnej skupiny Monty Python. Pokiaľ sa chcete učiť tento programovací jazyk na PC, je potrebné na počítač nainštalovať  Python vo verzii 3.x . Ako vývojové prostredie odporúčame PyCharm.

Väčšina príkladov z tohoto článku aj jeho pokračovania je ukázaná vo videu.

Na programovanie aplikácií pre mikropočítačovú dosky Micro:bit môžete použiť webový nástroj na adrese https://python.microbit.org/v/1.1, 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 USB kábla, sa na počítači zobrazí ako klasické USB úložisko, 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 hex súbor obsahuje nielen kód aplikácie ale aj engine interpretra 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 k tomu nástroj Mu-editor, ktorý je k dispozícii na https://codewith.mu.  Program v jazyku Python pomocou tlačidla Flash zavediete priamo do mikropočítačovej dosky Micro:bit  pripojenej cez USB. Nemusíte tak ako u webových vývojových nástrojov riešiť stiahnutie súboru s príponou hex a jeho kopírovanie do micro:bitu.

Podporované režimy nástroja Mu

Nebudeme primárne riešiť syntax jazyka Python, ale budeme sa venovať implementačným špecifikám jazyka Micro Python na mikropočítačovej doske BBC micro:bit, čiže obsluhou jeho hardvérových komponentov, čiže displeja, tlačidiel, zabudovaných senzorov a samozrejme aj možnosti práce so zbernicou, na ktorú je možné 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 intenzitu okolitého svetla. Podporuje dva druhy bezdrôtovej komunikácie – Bluetooth Low Energy (BLE) pre komunikáciu s mobilnými zariadeniami a rádiový prenos pre komunikáciu s inými zariadeniami BBC micro:bit. Taktiež je možná sériovú komunikácia s počítačom cez USB kábel.

Príkazom from microbit import * sa importujú knižnice obsahujúce špecifické funkcie pre microbit. Hviezdička určuje, že sa importujú všetky knižnice

Zobrazovanie

Zobrazovacie možnosti dosky Micro:bit sú pomerne skromné, k dispozícii je maticový displej z LED diód v usporiadaní 5 x 5. Jednotlivé LED sú individuálne adresované od (0,0) v ľavom hornom rohu až po (4,4).Tretím parametrom funkcie set_pixel() je jas príslušnej LED diódy

from microbit import *
display.set_pixel(0,4,9)

Na displeji možné staticky zobraziť jeden znak, alebo iný grafický symbol. Viac sa tam nevojde. Napriek tomu je aj na takomto displeji možné zobraziť aj niekoľko znakový textový reťazec. Trik je v tom že text vodorovne roluje.

from microbit import *
display.clear()
for x in range(0, 5):
    for y in range(0, 5):
        display.set_pixel(x,y,9)

Na zobrazenie statickej ikony preddefinovaného obrázku použijete príkaz v tvare:

from microbit import *
display.scroll("Ahojte vsetci!")

K dispozícii je veľké množstvo obrázkov

HEART,  HEART_SMALL, HAPPY, SMILE, SAD, CONFUSED, ANGRY, ASLEEP, SMILE, SURPRISED, SILLY, FABULOUS, MEH, YES, NO,  TRIANGLE, TRIANGLE_LEFT, CHESSBOARD, DIAMOND, DIAMOND_SMALL, SQUARE, SQUARE_SMALL, RABBIT, COW, MUSIC_CROTCHET, MUSIC_QUAVER, PITCHFORK, XMAS, PACMAN, TARGET, TSHIRT, ROLLERSKATE, DUCK, HOUSE, TORTOISE, BUTTERFLY, STICKFIGURE, GHOST, SWORD, GIRAFFE, SKULL, UMBRELLA, SNAKE

Zobraziť sa dajú ikony šípok: ARROW_N, ARROW_NE, ARROW_E, ARROW_SE, ARROW_S, ARROW_SW, ARROW_W, ARROW_NW kde smer je určený skratkami svetových strán na podčiarnikom a dokonca aj v analógovej forme vyjadriť čas s presnosťou na hodiny: CLOCK1 – CLOCK12

Hodiny aj šipky je možné zobraziť aj ako animovanú sekvenciu pomocou definovaných objektov polí ALL_ARROWS a ALL_CLOCKS . Takto môžete vytvoriť napríklad animovaný ukazovateľ hodín, ktorý používateľovi znázorňuje, že sa na niečo čaká:

from microbit import *
display.show(Image.ALL_CLOCKS, loop=True, delay=200)

Ak vám žiadna ikona z vymenovanej pomerne bohatej ponuky nevyhovuje, môžete si v matici 5 x 5 LED diód, ktoré tvoria pixely, nadefinovať 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:

from microbit import *
lodka = Image("05050:05050:05050:99999:09990")
display.show(lodka)

Nie každý má takú predstavivosť, aby takto vedel navrhnúť obrázok, prípadne aby si z takéhoto zápisu vedel predstaviť, čo sa zobrazí. Oveľa prehľadnejší je takýto zápis, kedy číslice v reťazcoch tvoria maticu 5 x 5 bodov.

from microbit import *
obr = Image("33333:"
            "39093:"
            "30903:"
            "39093:"
            "33333")

display.show(obr)

Uhádli ste, je to hracia kocka, na ktorej je zobrazené číslo 5 a vidno aj obrysy kocky. Aj z vlastných obrázkov je možné vytvoriť animáciu, stačí z nich vytvoriť pole.

Napríklad hod kockou (pre jednoduchosť v jednoduchej postupnej sekvencii) by ste zobrazili pomocou animácie

from microbit import *
dice1 = Image("33333:"
              "30003:"
              "30903:"
              "30003:"
              "33333")

dice2 = Image("33333:"
              "30093:"
              "30003:"
              "39003:"
             "33333")

dice3 = Image("33333:"
              "39003:"
              "30903:"
              "30093:"
              "33333")

dice4 = Image("33333:"
              "39093:"
              "30003:"
              "39093:"
              "33333")

dice5 = Image("33333:"
              "39093:"
              "30903:"
              "39093:"
              "33333")

dice6 = Image("33333:"
              "39093:"
              "39093:"
              "39093:"
              "33333")

all_obr = [dice1, dice2, dice3, dice4, dice5, dice6]
display.show(all_obr, delay=500)

Tlačidlá

Budeme rozlišovať prvky na interakciu dosky s používateľom a piny na zbernici určené na interakciu s pripojenými zariadeniami. Na interakciu s používateľom sú k dispozícii primárne tlačidlá A a B. V kóde sú reprezentované objektmi button_a a button_a. 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 alebo ako 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é.

from microbit import *
while True:
    if button_a.was_pressed():
       display.scroll("A")
    else:
       display.scroll(Image.ASLEEP)
   sleep(1000)

Ak potrebujete zistiť koľko krát bolo tlačidlo stlačené počas určitého času, kedy bola doska uvedená do režimu spánku, napriek tomu však evidovala udalosti zatlačenia tlačidiel, použijete funkciu get_presses().

Tento príklad vypíše počet zatlačení tlačidla A počas intervalu 3s:

from microbit import *
while True:
    sleep(3000)
    count = button_a.get_presses()
display.scroll(str(count))

pokračovanie nabudúce…