Při psaní složitějšího kódu nebo při testování periferních modulů se setkáme s problémy, kdy potřebujeme znát větší počet hodnot v reálném čase, abychom dokázali identifikovat chyby ve výpočtech, postupech nebo v komunikaci. K tomu potřebujeme jiný typ výstupu textu a numerických hodnot, než nám umožňuje displej micro:bitu.
název: B18 Sériový Monitor
kategorie: B mírně pokročilí
ref.číslo: B18
projekt: kurz micro:bit
verze: 01, 2017-10-28
autor: Ivo Obr, Lanškroun
MicroPython a API rozhraní nám umožňuje komunikovat po sériovém portu mezi PC a micro:bitem. Co k tomu budeme ještě potřebovat :
a) musíme si do PC nainstalovat “mbed serial driver”. Ten si můžete stáhnout na adrese :
https://developer.mbed.org/media/downloads/drivers/mbedWinSerial_16466.exe
Po stažení spustíme instalaci a pokračujeme podle instalačního návodu. Po instalaci doporučuji restartovat PC.
b) Dále je třeba nainstalovat program sériového monitoru (Serial Monitor) jménem “Tera Term”. Já jsem si ho stáhnul ze serveru :
http://tera-term.en.lo4d.com/download
Po stažení spustíme instalaci a pokračujeme podle instalačního návodu. Na přednastavených hodnotách nic neměníme. Po instalaci doporučuji restartovat PC.
Tím máme tu nejhorší práci za sebou a můžeme přejít realizaci. Micro:bit a PC mezi sebou budou po sériové lince komunikovat, to je jedním drátem tam a druhým zpět. Rychlost této komunikace může být 9600, 14400, 19600, 38200, 57600 nebo 115200 baud/sec. Tato komunikační rychlost se nazývá “baudrate” a u našeho dvoustavové modulace je to počet bitů za sec. Pokud bychom to chtěli přepočíst na znaky, pak odhadem je to vždy desetina (počet přenesených bytů).
Přednastavená rychlost je obvykle 9600, to znamená asi 960 přenesených znaků za vteřinu. Pokud máme krátký kabel mezi PC a micro:bitem, není problém používat nejvyšší rychlosti 115200.
Vyzkoušíme si ten nejjednodušší program, který nám bude přenášet text “AHOJ” z micro:bitu na Serial Monitor:
from microbit import * uart.init(9600) while True: uart.write("AHOJ \n \r") sleep(500)
Na třetím řádku je příkaz uart.init(9600), který inicializuje sériovou linku na micro:bitu. Tím nastavíme hodnoty komunikace. Příkaz má ještě možnosti uvedením dalších hodnot, jako jsou stop bity, parita, TX a RX piny. V této lekci nechci rozvádět všechny možnosti, lekce by byla příliš rozsáhlá. Pokud máte zájem o další informace, odkazuji na server :
http://microbit-micropython.readthedocs.io/en/latest/uart.html
Na čtvrtém řádku máme nekonečný cyklus, kterým posíláme na sériovou linku řetězec znaků. Za slovem “AHOJ” jsou uvedeny řídící znaky. Ty se na zobrazovacích zařízeních nezobrazují ale řídí tok textu. Zpětné lomítko uvozuje řídící znak. Kombinace “\n” je “posun o řádek”, kombinace “\r” je “návrat vozu”, což je ještě stará terminologie, kdy se tisková hlava vracela na začátek řádku. U Serial Monitoru je místo tiskové hlavy kurzor.
Program můžeme ze stránek okopírovat přímo do editoru Mu. Program nahrajte do micro:bitu a nechte kablík USB spojený s PC. Pokud totiž při inicializaci sériové linky příkazem uart.init(9600) nezadáme parametry TX a RX pro výstupní a vstupní pin na micro:bitu, bude přenos dat realizován přes USB kabel.
Na PC spustíme program Tera Term. Otevře se nám okno Tera Term: New connection ve kterém zaklikneme ve spodní části Serial a ze seznamu vybereme mbed Serial Port() (může mít jiné číslo portu než je na obrázku). Klikneme na OK.
Otevře se nám okno terminálu, ve kterém si v nabídce funkcí v horním řádku vybereme Setup a ze seznamu vybereme Serial port... Otevře se nám okno pro nastavení portu. Vybereme si přenosovou rychlost 9600 (tu jsme si nastavili v programu micro:bitu). Ostatní parametry necháme tak je je na obrázku.
Po kliknutí na tlačítko OK by se na ploše okna monitoru měl zobrazovat text “AHOJ” (každou vteřinu 2x).
Jak vypsat číslo ukazuje další kód programu. Musíme nejdříve z čísla udělat řetězec a ten teprve vypsat.
from microbit import * uart.init(9600) i = 0 while True: uart.write(str(i)) uart.write("\n \r") i += 1 sleep(500)
Pokud vypisujete větší množství dat, doporučuji zvýšit přenosovou rychlost až na 115200. Protože jsme v předchozím mluvili o dvou drátech a přenosu dat v obou směrech, můžeme přenášet data ze Serial Monitoru (PC) jako řetězec znaků do micro:bitu.
Použijeme k tomu dva příkazy. První příkaz uart.any() vrací hodnotu False, pokud není co číst (nic nebylo odesláno z PC) nebo vrací hodnotu True, když přišlo něco po sériové lince.
Druhý příkaz uart.readline() bude mít hodnotu přečtené zprávy. V následujícím je krátký program, který si nahrajte do micro:bitu.
from microbit import * uart.init(9600) prijem = "" while True: while uart.any(): prijem = uart.readline() display.scroll(prijem) prijem = "" uart.write("Heart Beat \n \r") sleep(1000)
Zprávu, kterou napíšeme v Serial Monitoru nám program zobrazí na displeji micro:bitu. Tak jdeme na to:
Každou vteřinu se nám na monitoru vypisuje zpráva, že program žije. Klikneme v nabídce funkcí na Control a pak následně na Broadcast command. Otevře se nám okno Tera Term:Broadcast command, kde si vybereme port, na který budeme data posílat (modře – musí být vybrán), ostatní parametry nastavíme dle obrázku a do prvního řádku vepíšeme zprávu. Po kliknutí na tlačítko Submit se zpráva odesílá do micro:bitu a vypíše se na displeji micro:bitu.
K čemu je to dobré? Při ladění složitějšího programu můžeme zasahovat online do jeho běhu a měnit za chodu různá nastavení a to tím, že testujeme obsah proměnné “prijem” a dle toho se rozhodujeme – například.
Poznámka :
Serial Monitor Tera Term má mnoho nastavení, která si vyzkoušejte. Například si tmavé pozadí okna monitoru změňte na bíle, písmo bude černé. Zvětšete si písmo v okně a pod. Serial Monitor využijeme také v dalších lekcích při výpisu většího množství dat.