Aplikace B14 Radio II

V lekci A17 jsme nahlédli do světa radiového (bezdrátového) přenosu dat.  Abychom se naučili více, opustíme Block Editory a pustíme se do programování v jazyku MicroPython, který nám otevře další možnosti bezdrátového spojení micro:bitů.

název: B14 Radio II
kategorie: B mírně pokročilí
ref.číslo: B14
projekt: kurz micro:bit
verze: 01, 2017-07-24
autor: Ivo Obr, Lanškroun


Naprogramuje si opět stejný program jako v lekci A17, ale tentokrát si vysvětlíme další možnosti bezdrátového přenosu.

Program začneme jako vždy, ale přidáme k němu import modulu “radio”, který nám umožňuje pracovat s dalšími příkazy pro nastavení a práci s vysíláním a příjmem  dat.

from microbit import *
import radio

Nyní musí následovat příkazy, které se provedou na začátku programu jen jednou a to bude nastavení parametrů pro bezdrátové spojení.  Nastavení se provede příkazem :

radio.config(seznam parametrů)

kde parametr je vždy dvojice “název_parametru=hodnota”  (oddělovačem parametrů je čárka)

parametry jsou (uváděné hodnoty jsou standardní, pokud je nechcete měnit, není třeba parametr uvádět):

length=32

– nastaví maximální délku zprávy v bytech, kterou lze jedním příkazem poslat. Maximální hodnota je 251 bytů.

queue=3

– nastaví počet zpráv, které mohou čekat ve frontě přijatých zpráv. Maximální hodnota je omezena aktuální velikostí paměti.

channel=7

– nastavení vysílacího a přijímacího kanálu. Hodnoty jsou od 0 do 100 včetně. Vysílací kmitočet 2400Mhz má 101 samostatných kanálů. Pokud pracujeme v místě, kde se používá větší množství micro:bitů, je vhodné si zvolit jiný vysílací a příjmový kanál, aby se micro:bity navzájem nerušily. Micro:bity, které mají spolu komunikovat musí být nastaveny na stejném kanále.

power=6

– s tímto parametrem jsme se už seznámili v lekci A17 a to v bloku “radio set transmit power”. Nastaví se výkon vysílání. Hodnoty jsou 0 až 7. Nula znamená, že vysílač nevysílá žádný signál.

group=0

– s tímto parametrem jsme se již také setkali v lekci A17, povolené hodnoty jsou 0 až 255. Byl to blok “radio set group”, který nastavuje číslo skupiny micro:bitů, které chtějí spolu komunikovat.  Pokud mají micro:bity nastaveny stejné číslo, mohou spolu komunikovat. Je to vhodné například na výstavách nebo soutěžích, aby mezi sebou komunikovali micro:bity jen ty co mají, a ne všechny v sále. (poznámka : neplést s parametrem channel, ten nastaví vysílací frekvenci, group nastavuje číslo skupiny, které je součástí vysílané zprávy.)

address=0x75626974

– adresa příjemce zprávy. Je to 32bitová adresa, která slouží k filtrování příchozích zpráv na úrovni hardwaru, přičemž se zachovávají pouze ty, které odpovídají zadané adrese. Výchozí nastavení, které se zde používá, je standardně používané jinými platformami souvisejícími s mikrosystémy. Doporučuji neměnit.

data_rate= radio.RATE_1MBIT

– nastavení datové rychlosti v bitech. Doporučuji neměnit. Používá se při komunikaci s jinými zařízeními. Další možné hodnoty jsou : radio.RATE_250KBIT  a  radio.RATE_2MBIT

Pokud neuvedeme příkaz radio.config(parametry), pak zůstávají nastaveny standardní hodnoty viz výše.

 

Příklad:

Maximální délka zprávy bude 64 bytů, skupinu nastavíme na 24 a požadujeme maximální vysílací výkon (co největší vzdálenost přenosu):

radio.config(length=64, group=24, power=7)

Než začneme používat příkazy, musíme ještě zapnou vysílač a přijímač příkazem:

radio.on()

Případné vypnutí (abychom šetřili baterii) je :

radio.off()

Abychom mohli používat další příkazy pro vysílání a příjem dat, musíme mít rádio zapnuté.

Nyní už můžeme psát další kód. Budeme opakovat následující příkazy :

– když bylo tlačítko “A” stisknuté, odešleme zprávu “FUNGUJE TO!”

 

Test na stisk tlačítka “A” naprogramujeme příkazem:

if button_a.was_pressed():

a odeslání textu naprogramujeme příkazem :

radio.send(“FUNGUJE TO!”)

Výše uvedený příkaz vyšle řetězec znaků. Před odesláním ještě připojí na začátek tři speciální znaky, které budou při příjmu zase odpojeny, tím se ale nemusíme dále zabývat

Text, který chceme odeslat píšeme do apostrofů nebo uvozovek. Protože v dalších složitějších programech můžeme posílat různě složité zprávy, které si musíme nejdříve složit do nějaké proměnné, použil jsem způsob, kdy se do kulaté závorky za “radio.send” nezapíše přímo text, ale název proměnné “zprava” (jméno jsem si zvolil, můžete použít jiné jméno proměnné). Na začátku programu jsem do této proměnné přiřazovacím příkazem vložil text.

zprava = “FUNGUJE TO!”
.
.
radio.send(zprava)

Pokud tlačítko “A” nestiskneme, žádná zpráva se neodesílá.

Takže dále budeme sledovat, jestli nějaká zpráva nebyla přijímačem od jiného micro:bitu zachycena. Náš micro:bit bude zachycovat zprávy, které jsou vysílány na kanále 7. (standardní nastavení). Pokud je nějaká zpráva zachycena, musím mít skupinu 24, jinak je zahozena. (to jsme si nastavili v parametrech pomocí “group=24”)

Musíme si vytvořit nějaké místo na přijatou zprávu, v programu jsem zvolil proměnnou se jménem “prijem” a vložil jsem do ní nic, to znamená, že je prázdná (viz program na konci). Zkusíme zjistit, zda byla nějaká zpráva přijatá a to příkazem :

prijem = radio.receive()

Příkaz “radio.receive()” nám do proměnné na levé straně přiřazovacího příkazu vloží přijatou zprávu. Pokud ale žádná zpráva přijatá nebyla, vloží tam micro:bit speciální hodnotu “None”.

Takže, pokud je v obsahu proměnné nějaký text, vypíšeme ho na displej micro:bitu, pokud je tam hodnota “None”, neděláme nic dalšího. Test, zda proměnná “prijem” má v sobě nějaký text uděláme tak, že se ptáme příkazem “if” :

Pokud není obsah “prijem” prázdný (None), pak obsah “prijem” vypíšeme na displej

if not(prijem is None):

display.scroll(prijem)

Výraz (prijem is None) je pravdivý pokud nebyla přijata zpráva. Protože otočíme logickým operátorem “not” logickou hodnotu z “True” na “False”, pak se příkaz “display” nevykoná   (a naopak).

Celý program můžete vidět na následujícím obrázku :

Nyní už stačí nahrát program do dvou nebo více micro:bitů a můžeme zkusit, jak to funguje.

 

Náměty pro tuto lekci :

  • Vyzkoušejte si, do jaké vzdálenosti mezi sebou micro:bity komunikují.
  • Do programu si vložte poznámkové řádky a okomentujte si jednotlivé příkazy
  • Program si uložte pod jménem B14, aby jste se k němu mohli kdykoliv vrátit nebo ho poslat emailem kamarádovi.

 

 

Aplikace C2 jednoduchá pokladnička

Návod na jednoduchou pokladničku nám poslal Michal Jurák z gymnázia Elgartova Brno. O jejich microbitím příběhu na Elgartce jsme psali zde. Paní učitelka Havířová dětem koupila micro:bit ze svého a M.Jurák byl autorem pokladničky řízené micro:bitem, do které pak studenti házeli peníze aby se složily na zaplacení micro:bit paní učitelce. Kromě micro:bitu budete potřebovat trochu zručnosti a můžete s pustit do stavby. Dne 27.6. aktualizováno o program v blokovém editoru.Continue reading

Aplikace A20 komunikace mezi micro:bity “peer to peer”

Nyní pár lekcí přeskočíme, abychom mohli doplnit pár základů a v lekci A20 si ukážeme, jak nastavit komunikaci a posílat informace z jednoho microbitu na další. Ukážeme si přenos textové informace a přenos dat z teploměru a senzoru pohybu.

název: A20 komunikace mezi micro:bity “peer to peer”
kategorie: A začátečníci
ref.číslo: A20
projekt: kurz micro:bit
verze: 01, 2017-06-20
autor: Jaromír Hubálek, Brno


V této lekci si ukážeme, jak nastavit komunikaci a posílat informace z jednoho microbitu na další. Ukážeme si přenos textové informace a přenos dat z teploměru a senzoru pohybu. Programování takové komunikace je nutné dělat v jazycích, které mají příkazy pro radio. Uvedené ukázky byly provedeny v JavaScript Blocks Editoru.

Protože je microbit vybaven bezdrátovou komunikací s protokolem bluetooth, může kromě posílání příkazů na smart zařízení jako chytré telefony či tablety, komunikovat mezi sebou. Tato takzvaná „peer to peer“ komunikace funguje podobně jako po drátě, tj. jedno zařízení vyšle zprávu na určitém kanálu a všechna zařízení poslouchající na stejném kanálu tuto zprávu přijmou.

Pro nastavení kanálu se použije funkce „set group“, který musí být uveden v programu vysílacího i všech přijímacích. Začátek programu pak vypadá takto:

Tato část zajistí při spuštění programu inicializaci, nastavení kanálu číslo 2 a lze sem vložit další potřebná nastavení včetně nulování proměnných či smazání displeje.

Jak jsme již uvedli, budeme chtít přenášet informace o teplotě a z pohybového senzoru, proto vysílací zařízení bude obsahovat funkce na uložení teploty do proměnné „teplota“ a hodnotu z pohybového senzoru do proměnné „vibrace“. Proměnnou X bude lepší nastavit na sílu „strength“.

Dále si ukážeme funkce pro odeslání textového řetězce a pro čísla. Jsou to funkce radio send string a radio send number.

Celý program v blokovém editoru pak postupně musí zajistit přenos potřebného textu a čísel v následující posloupnosti:

Výsledný program vygenerovaný editorem bude v Java scriptu vypadat následovně:

U přijímače bude situace výrazně odlišná. Stejná bude pouze inicializace, kdy nastavíme stejný kanál, na kterém bude zprávy přijímat. Navíc musíme vynulovat počítadlo paketů index.

Protože protokol bezdrátového přenosu vysílá data po paketech, přičemž každý paket obsahuje textovou nebo numerickou část, je nutné přijímat data postupně a rozdělit dle pořadí příjmu. Z toho důvodu do funkce „on radio recieved“ musíme dát podmíněné příkazy a počítat počet přijatých paketů, čímž můžeme snadno rozdělit zprávu do různých proměnných, se kterými poté můžeme dle potřeby pracovat. Tímto vlastně nastavujeme vlastní protokol zprávy, kterou přijímáme, a musí souhlasit s protokolem vysílače. Náš protokol je „text-text-číslo-text-text-číslo-text“. Postupně tak naplníme proměnné pro text a proměnné pro čísla. Po načtení posledního paketu musíme počítaní paketů vynulovat, tj. vynulovat proměnnou index. Protože se tato proměnná zvyšuje o 1 na konci funkce, musí se vynulovat nastavení do -1 v poslední podmínce IF.

Nakonec v neustále dokola běžící funkci forever můžeme zobrazit ve stejném pořadí jednotlivé proměnné, které se vždy změní, až když dojde k přijmutí nové zprávy.

Výsledný Java script bude poměrně dlouhý, jak je uvedeno níže.