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

Bezdrôtová komunikácia

V prvom článku venovanom programovaniu Micro:bit v Pythone sme prebrali obsluhu tlačidiel a displeja, v druhej časti obsluhu hardvéru, čiže vstupov, výstupov, ovládaniu servomotorov, zvuku, kompasu akcelerometru a taktiež sme ukázali zapisovanie údajov do súborov. V tomto článku sa zameriame na komunikáciu cez bluetooth a vstavaný rádiomodem.

Príklad z tohoto článku aj z predchádzajúcich častí sú vo videu.

Micro:bit 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. Rádiovú komunikáciu je možné naladiť na rôzne kanály (očíslované 0-83). Všetci zainteresovaní sa naladia na ten istý kanál a každý počuje, čo všetci ostatní vysielajú cez tento kanál. Môžete nastaviť aj vysielací výkon. Čím väčší výkon, tým bude väčší dosah komunikácie. Nakoľko sa používa rovnaký čip a rovnaký výkon ako pri komunikácii cez bluetooth, maximálny dosah bude v otvorenom priestore približne 50-70 m.Pri konfigurácii rádiovej komunikácie môžete nastaviť dĺžku správy, štandardne je nastavená dĺžka 32 bajtov, maximálna dĺžka môže byť 251 bajtov.

Môžete posielať binárne správy s ľubovoľným obsahom, pri výučbe programovania bude najjednoduchšie posielať textové reťazce. Prijaté správy sa radia so fronty konfigurovateľnej veľkosti odkiaľ sa čítajú. Implicitná veľkosť fronty sú tri správy. Prečítaním sa správa odstráni z fronty. Ak sa fronta zaplní, čiže sa rýchlejšie prijímajú, než ich váš kód dokáže prečítať, nové správy sa ignorujú. Nakoľko príkazmi radio.RATE_250KBIT, radio.RATE_1MBIT, alebo radio.RATE_2MBIT sa dá nastaviť pomerne vysoká komunikačná rýchlosť od 250 kBit/s až po dva megabity za sekundu, môže sa pri zle napísanom kóde fronta prijatých správ zaplniť pomerne rýchlo. Implicitne je nastavená prenosová rýchlosť 1 Mbit/s.

Rádiový modul umožňuje zadať niekoľko parametrov a taktiež adresu a skupinu. Skupina môže byť 0 – 255, pričom implicitne je nastavená 0.  Dôležité je, že rádio modem odfiltruje správy, ktoré prijíma, ktoré nezodpovedajú vašej adrese a skupine. V dôsledku toho je dôležité vopred nastaviť adresu a skupinu, ktorú bude vaša aplikácia používať. Micro:bit samozrejme stále prijíma správy o vysielaní pre iné kombinácie adresa / skupina.

Posielanie a príjem správy na vybranom kanáli môžete realizovať pomocou kódu:

from microbit import *
import radio

radio.on()
radio.config(channel=19)
radio.config(power=7)

my_message = "Voz ker minie ker voz nie krava o ker nos trie"

while True:
    radio.send(my_message)
    incoming = radio.receive()
    if incoming is not None:
        display.show(incoming)
        print(incoming)
        sleep(500)

Ak nenastavíte kanál, môžete na implicitne nastavenom 7 kanáli využiť hromadnú komunikáciu. Nasledujúci kód vyšle správu. Všetky dosky, ktoré ju príjmu zobrazia srdiečko. Každá doska však navyše s  pravdepodobnosťou 1:3 pošle rovnakú správu, ktorej prijatie ostatné dosky potvrdia a niektoré z nich, teoreticky každá tretia správu znovu pošlú.

from microbit import *
import radio
import random

radio.on()

while True:
    if button_a.was_pressed():
        # vysielanie.
        radio.send('x')
        # príjem.
    incoming = radio.receive()
    if incoming == 'x':
        display.show(Image.HEART)
        sleep(500)
        display.clear()
        # obcas odpovedz
        if random.randint(0, 3) == 0:
           sleep(500)
           radio.send('x')

Ak to zosumarizujeme trochu odbornejšie, na vývojárskom počítači, alebo webe kde programujete online v MicroPythone sa vytvorí súbor s príponou HEX, ktorý obsahuje engine jazyka MicroPython a k nemu pribalený váš kód. Engine kód predkompiluje a spustí. Ak sa ponoríme ešte hlbšie ho hardvérovej architektúry, tak nad hardvérom je vrstva mini operačného systému mbed OS určeného (aj) pre systémy s mikrokontrolérmi Cortex M0. Na vyššej vrstve sú ovládače hardvérových komponentov a na najvyššej vrstve runtime či už TypeScriptu, alebo Micro Pythonu

A na záver ešte niekoľko trikov. Programovací jazyk Python je modulárny a objektovo orientovaný. Určite ste si všimli, že všetky príklady začínajú importom modulov pre hardvérovú implementáciu MicroPythonu na doske BBC:micro:bit

from microbit import *

Otvorte v editore Mu konzolu REPL a zadajte

>>> import microbit

>>> dir (microbit)

Zobrazí sa zoznam importovaných modulov

[‚__name__‘, ‚Image‘, ‚display‘, ‚button_a‘, ‚button_b‘, ‚accelerometer‘, ‚compass‘, ‚i2c‘, ‚uart‘, ‚spi‘, ‚reset‘, ‚sleep‘, ‚running_time‘, ‚panic‘, ‚temperature‘, ‚pin0‘, ‚pin1‘, ‚pin2‘, ‚pin3‘, ‚pin4‘, ‚pin5‘, ‚pin6‘, ‚pin7‘, ‚pin8‘, ‚pin9‘, ‚pin10‘, ‚pin11‘, ‚pin12‘, ‚pin13‘, ‚pin14‘, ‚pin15‘, ‚pin16‘, ‚pin19‘, ‚pin20‘]

Môžete taktiež jednoducho zistiť, do akej triedy patrí príslušná funkcia, napríklad

>>> type(display)

>>> type(pin0)

>> type(pin9)


Konec