Image
24.6.2019 0 Comments

IoT prakticky – 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 z adresy https://www.python.org. Ako vývojové prostredie odporúčame PyCharm https://www.jetbrains.com/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)
 
v ďalšom príklade je ukázané rozsvecovanie LED diód maticového displeja v cykle
from microbit import *
display.clear()
for x in range(0, 5):
    for y in range(0, 5):
        display.set_pixel(x,y,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.scroll("Ahojte vsetci!")

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

from microbit import *
display.show(Image.HAPPY)

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...

 

Zobrazit Galériu

Nechajte si posielať prehľad najdôležitejších správ emailom

Žiadne komentáre

ACER_122019

Videá