SAMSUNG_10 FOLD Advertisement SAMSUNG_10 FOLD Advertisement SAMSUNG_10 FOLD Advertisement

Micro:bit: Programovanie v Pythone / 3. časť

Špeciálne projekty
0

V predchádzajúcich častiach sme predstavili webové vývojové prostredie https://python.microbit.org, lokálne vývojové prostredie ­Mu-editor (https://codewith.mu), obsluhu displeja, tlačidiel, prácu s digitálnymi aj analógovými vstupmi a výstupmi, ovládanie servomotorov, generovanie zvuku, meranie teploty, načítanie a spracovanie údajov z akcelerometra či kompasu. V poslednej časti miniseriálu ukážeme možnosti ukladania údajov do trvalého úložného priestoru, kde zostanú aj po vypnutí napájania, a takisto možnosti bezdrôtovej komunikácie cez ­bluetooth alebo medzi viacerými zariadeniami Micro:bit navzájom.

Ukladanie údajov do súborov

Aj pre mikroprocesorový systém je užitočné mať možnosť ukladať údaje do trvalého úložného priestoru, teda do takého typu pamäte, kde zostanú uchované aj po vypnutí napájania. Využijete to nielen pri hrách na ukladanie najvyššieho dosiaľ dosiahnutého skóre, ale hlavne na ukladanie údajov získaných zo senzorov. Ak ich budete priebežne ukladať, vyhnete sa riziku ich straty pri výpadku napájania či resete napríklad z dôvodu chyby programu. MicroPython na platforme Micro:bit podporuje jednoduchý súborový systém uložený v pamäti typu flash, teda tam, kde je aj programový kód. Súborový systém na doske Micro:bit je jednoduchý, takže nemožno organizovať súbory do zložiek. Na ukladanie údajov máte v pôvodnej verzii Microbitu k dispozícii približne 30 kilobajtov, pri verzii V2.0 je to podstatne viac. Na pripomenutie, Micro:bit vo verzii 1.5 má 256 kB pamäte flash a 16 kB pamäte RAM. Najnovšia verzia V2 má 512 kB pamäte flash a 128 kB pamäte RAM.

Samozrejme, údaje, ktoré si uložíte do súborov, budete chcieť niekedy aj prečítať. Pri nahrávaní kódu ste si určite všimli, že Micro:bit pripojený cez USB sa počítaču javí ako USB kľúč. Žiaľ, súbory, ktoré vytvoríte pomocou programového kódu a budete do nich zapisovať údaje, v tejto pripojiteľnej jednotke dostupné nebudú. Údaje zo súborov sa dajú načítať len priamo pomocou programového kódu. Do počítača ich môžete preniesť napríklad pomocou sériového prenosu.


mbit displej

V prvom príklade uložíme do súboru nejaké údaje, na zjednodušenie krátky text. Príkaz open() otvorí existujúci súbor alebo vytvorí nový a priradí ho k objektu. Všimnite si, že parameter 'w' sa používa na nastavenie objektu súbor do režimu zápisu. Na nastavenie režimu čítania sa používa parameter 'r', čo je zároveň implicitné nastavenie. V príklade funkcia otvorí (vytvorí) súbor s názvom udaje.txt a priradí ho k objektu subor. Následne sa v bloku kódu odsadenom pod príkazom with použije objekt subor na zápis. Úmyselne sme rozdelili zápis a čítanie do dvoch samostatných programov, aby sme demonštrovali, že údaje v súboroch sa zachovajú aj pri prepísaní programu.

from microbit import *

with open('udaje.txt', 'w') as subor:

    subor.write("text v subore")

V ďalšom príklade tieto údaje prečítame a zobrazíme. Do objektu text sa priradí obsah načítaný zo súboru. Pre jednoduchosť predpokladáme, že súbor existuje, veď sme ho vytvorili v predchádzajúcom príklade. V reálnej aplikácii treba situáciu, že požadovaný súbor nie je k dispozícii, vhodne ošetriť. Len čo je blok kódu ukončený, Python automaticky zatvorí súbor.

from microbit import *

with open('udaje.txt') as subor:

    text = subor.read()

    display.scroll(text)

Podobne ako klasické operačné systémy aj Python na doske Micro:bit dokáže so súbormi manipulovať, prípadne vypísať ich zoznam. Na to slúži modul os. Na zobrazenie zoznamu súborov sa používa funkcia listdir().

from microbit import *

import os

with open('meranie.txt', 'w') as subor:

    subor.write("text1")

with open('pokus.bin', 'w') as subor:

    subor.write("udaje1")

subory = os.listdir()

display.scroll(str(subory))

Príkazom print () vypíšete zoznam súborov do konzoly vývojového prostredia.

print(str(subory))

Na vymazanie súboru je určený príkaz remove()

from microbit import *

import os

os.remove('pokus.bin')

 

Veľkosť súboru zistíte príkazom

from microbit import *

import os

velkost = os.size('meranie.txt')

print(str(velkost))


PROGRAM

Micro:bit Python – bezdrôtová komunikácia

Integrovaný rádiový vysielač a prijímač na čipe dosky Micro:bit je primárne určený na komunikáciu cez bluetooth. Firmvér dosky však tento modul využíva aj na rádiovú komunikáciu medzi doskami navzájom.

Micro:bit teda 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 Micro:bit. Rádiovú komunikáciu možno naladiť na rôzne kanály (očíslované 0 až 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. Keďže 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 až 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 do radu konfigurovateľnej veľkosti, odkiaľ sa čítajú. Implicitná veľkosť tohto radu sú tri správy. Prečítaním sa správa z neho odstráni. Ak sa rad zaplní, čiže správy sa rýchlejšie prijímajú, než ich váš kód dokáže prečítať, nové správy sa ignorujú. Príkazmi radio.RATE_250KBIT, radio.RATE_1MBIT alebo radio.RATE_2MBIT sa dá nastaviť pomerne vysoká komunikačná rýchlosť od 250 kb/s až po dva megabity za sekundu, a tak sa môže pri zle napísanom kóde rad prijatých správ zaplniť pomerne rýchlo. Implicitne je nastavená prenosová rýchlosť 1 Mb/s.

Rádiový modul umožňuje zadať niekoľko parametrov a takisto adresu a skupinu. Skupina môže byť 0 až 255, pričom implicitne je nastavená 0.  Dôležité je, že rádiomodem odfiltruje prijímané správy, 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 prijmú, 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, 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 sa začínajú importom modulov na 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 takisto jednoducho zistiť, do akej triedy patrí príslušná funkcia, napríklad

>>> type(display)

>>> type(pin0)

>>> type(pin9)

 

Tip na záver: Vývojové prostredie Mu je k dispozícii aj na mikropočítačovej doske Raspberry Pi s operačným systémom Raspbian a má implementovanú aj podporu pre Micro:bit. Ak máte Raspberry k dispozícii, vyskúšajte pripojiť Micro:bit k doske Raspberry Pi a vyskúšajte písať kód Python v editore Mu na Raspberry. Následne súbor hex z Raspberry prekopírujte do pripojeného Micro:bitu. Naučíte sa pri tom veľa aj o práci so súborovým systémom Linuxu, pretože Raspbian využíva linuxové jadro.

 

Zobrazit Galériu

Ľuboslav Lacko

Všetky autorove články

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať