Operácie

Komunikácia a micro:bit: Rozdiel medzi revíziami

Zo stránky SensorWiki

Balogh (diskusia | príspevky)
Balogh (diskusia | príspevky)
Riadok 83: Riadok 83:


'''Neoprávnené vysielanie na cudzom kanáli, obzvlášť na č. 1, bude potrestané odpočítaním 10 bodov!!!'''
'''Neoprávnené vysielanie na cudzom kanáli, obzvlášť na č. 1, bude potrestané odpočítaním 10 bodov!!!'''
Príloha: Konfiguračný súbor pre program SerialPlotter
<source lang="ini">
[MainWindow]
size=@Size(927 689)
pos=@Point(218 102)
activePanel=Port
hidePanels=false
maximized=false
state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x3\x9f\0\0\x2n\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x3\0\0\0\f\0t\0\x62\0P\0l\0o\0t\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x1a\0t\0\x62\0P\0o\0r\0t\0\x43\0o\0n\0t\0r\0o\0l\x1\0\0\0\xb0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x10\0t\0\x62\0R\0\x65\0\x63\0o\0r\0\x64\x1\0\0\x1\xcf\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
[Port]
selectedPort=COM8
baudRate=115200
parity=none
dataBits=8
stopBits=1
flowControl=none
[DataFormat]
format=ascii
[DataFormat_Binary]
numOfChannels=4
numberFormat=uint8
endianness=little
[DataFormat_ASCII]
numOfChannels=3
[DataFormat_CustomFrame]
numOfChannels=1
numberFormat=uint8
endianness=little
frameStart=AA BB
fixedSize=false
frameSize=1
checksum=false
debugMode=false
[Channels]
channel\1\name=Zrychlenie X
channel\1\color=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\0\0VV\0\0)
channel\1\visible=true
channel\2\name=Zrychlenie Y
channel\2\color=@Variant(\0\0\0\x43\x2\xff\xff-o\xc7\xf5\xff\xff\0\0)
channel\2\visible=true
channel\3\name=Zrychlenie Z
channel\3\color=@Variant(\0\0\0\x43\x2\xff\xff\x19\xed\xfa\xb4\xf0s\0\0)
channel\3\visible=true
channel\4\name=Channel 4
channel\4\color=@Variant(\0\0\0\x43\x1\xff\xff\xfe\xfe\x89\x89\0\0\0\0)
channel\4\visible=true
channel\size=4
[Plot]
numOfSamples=1000
indexAsX=true
xMax=1000
xMin=0
autoScale=false
yMax=1023
yMin=-1023
darkBackground=true
grid=true
minorGrid=true
legend=true
multiPlot=false
symbols=auto
[Commands]
command\1\name=Command 1
command\1\type=ascii
command\1\data=ok
command\2\name=Zastav meranie
command\2\type=ascii
command\2\data=stop
command\size=2
[Record]
autoIncrement=true
recordPaused=true
stopOnClose=true
header=true
disableBuffering=false
separator=","
</source>


[[Category:Základy počítačov]][[Category:micro:bit]]
[[Category:Základy počítačov]][[Category:micro:bit]]

Verzia z 23:06, 26. november 2017

Sériová linka

Teória a podrobnejšie informácie o sériovej linke: RS-232.


Programovanie komunikácie v micro:bite je pomerne jednoduché pomocou blokov z knižnice Serial. Vyskúšajte:


Dáta vieme posielať cez USB rozhranie, ktorým je micro:bit pripojený k počítaču. Okrem toho, že micro:bit sa tvári ako USB disk pripojený k počítaču a je cez toto rozhranie aj napájaný, vieme vytvoriť virtuálny sériový port, ktorý sa potom objaví aj v Správcovi zariadení - budeme ho potrebovať, aby sme zistili, aké číslo portu priradil operačný systém:

Programovanie micro:bitu potom spočíva vo volaní blokov z knižnice Serial.

Na strane PC však nevieme prijímať dáta priamo v prostredí simulátora, preto potrebujeme špeciálny program. Je ich mnoho, ale len niektoré z nich umožňujú spustenie pod Windows bez administrátorského oprávnenia. My budeme používať tieto dva:


Serial Terminal by Bray

Na testovanie a prvé pokusy so sériovým rozhraním sa vám určite zíde aj nejaký terminálový program, masochisti môžu použiť aj Hyperterminál z Windows. Terminál je jednoduchý program, v ktorom sa zobrazujú všetky prijaté znaky a naopak, je možné nejaké iné znaky odvysielať. Dajú sa samozrejme aj nastaviť základné komunikačné parametre.


Ukážka práce s Terminalom vrátane správneho nastavenia parametrov

Serial Plotter

Serial Plotter je trocha sofistikovanejší program ako Terminal, jeho úlohou je zakresliť graficky všetky prijaté informácie. Najjednoduchšie je posielať mu čísla, pričom




Úloha:
Zobrazte v programe SerialPlot všetky tri osi akcelerometra a predveďte, že meria skutočne aj gravitačné zrýchlenie.

Postup:

  • vytvorte program v prostredí makecode
  • program preneste do micro:bitu
  • skontrolujte v správcovi zariadení, aké číslo portu mu pridelil OS Windows (v prípade, že žiaden nevidíte, môže pomôcť vytiahnutie a opätovné pripojenie micro:bitu)
  • spustite program Terminal, nastavte komunikačné parametre 115200,n,8,1 a stlačte Connect - v terminálovom okne by ste mali vidieť prijaté znaky. Ak je formát vyhovujúci, odpojte port (Disconnect) a pokračujte ďalej
  • Nastavte parametre pre grafický program SerialPlot. Zapisujú sa do textového súboru .ini, musíte ho editovať v Notepade alebo podobnom editore. Po spustení programu SerialPlot by ste mali vidieť grafické priebehy

Ďalšie informácie:




Bezdrôtový prenos

Bezdrôtový prenos medzi dvoma micro:bitmi je realizovaný pomocou špeciálneho firemného protokolu, ktorý sa však pomocou blokov v knižnici Radio realizuje veľmi jednoducho. Najprv treba nastaviť číslo skupiny v ktorej bude modul komunikovať, číslo 1 je na cvičení vyhradené pre učiteľa, ostatní použijú pridelené číslo.

Potom používame dve funkcie: radio_send_number, ktorá na danom kanáli odvysiela príslušné číslo z argumentu a on_radio_received, ktorá vyvolá príslušnú akciu vždy, keď je prijatý rádiový paket. Výsledok príjmu máte k dispozícii v premennej.


Pri použití komunikácie v simulátore sa objaví druhý modul, ktorý je však naprogramovaný rovnako ako prvý. Vyskúšajte vyššie uvedený program. Jeho funkcia spočíva vo výmene hodôt zrýchlenia v osi x medzi dvoma microbitmi, pričom pohyb prvého sa zobrazuje ako stĺpcový graf na druhom a naopak. Zároveň sa údaje zobrazujú aj graficky v simulátore.


Úloha: Schôdzka naslepo.
Zistite, ktorý spolužiak má rovnaké číslo ako vy. Naprogramujte micro:bit, aby na pridelenom kanáli vysielal vaše meno (alebo nick), a zároveň na tom istom kanáli počúvajte, či niekto nevysiela svoje meno. Zobrazte si prijatý reťazec a vyplňte správne dvojicu vysielač / prijímač. Za správne spárovanie získate 2 body. Ak si myslíte, že váš program je správny a chyba je len v protistrane, potom môžete využiť služby verejného majáku na kanáli č. 1. Ten vysiela nepretržite a tak zistíte, či vám program funguje.

Namiesto funkcie radio_send_number použite blok radio_send_string.

Neoprávnené vysielanie na cudzom kanáli, obzvlášť na č. 1, bude potrestané odpočítaním 10 bodov!!!


Príloha: Konfiguračný súbor pre program SerialPlotter

[MainWindow]
size=@Size(927 689)
pos=@Point(218 102)
activePanel=Port
hidePanels=false
maximized=false
state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\0\0\0\x3\x9f\0\0\x2n\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x3\0\0\0\f\0t\0\x62\0P\0l\0o\0t\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x1a\0t\0\x62\0P\0o\0r\0t\0\x43\0o\0n\0t\0r\0o\0l\x1\0\0\0\xb0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x10\0t\0\x62\0R\0\x65\0\x63\0o\0r\0\x64\x1\0\0\x1\xcf\xff\xff\xff\xff\0\0\0\0\0\0\0\0)

[Port]
selectedPort=COM8
baudRate=115200
parity=none
dataBits=8
stopBits=1
flowControl=none

[DataFormat]
format=ascii

[DataFormat_Binary]
numOfChannels=4
numberFormat=uint8
endianness=little

[DataFormat_ASCII]
numOfChannels=3

[DataFormat_CustomFrame]
numOfChannels=1
numberFormat=uint8
endianness=little
frameStart=AA BB
fixedSize=false
frameSize=1
checksum=false
debugMode=false

[Channels]
channel\1\name=Zrychlenie X
channel\1\color=@Variant(\0\0\0\x43\x1\xff\xff\xff\xff\0\0VV\0\0)
channel\1\visible=true
channel\2\name=Zrychlenie Y
channel\2\color=@Variant(\0\0\0\x43\x2\xff\xff-o\xc7\xf5\xff\xff\0\0)
channel\2\visible=true
channel\3\name=Zrychlenie Z
channel\3\color=@Variant(\0\0\0\x43\x2\xff\xff\x19\xed\xfa\xb4\xf0s\0\0)
channel\3\visible=true
channel\4\name=Channel 4
channel\4\color=@Variant(\0\0\0\x43\x1\xff\xff\xfe\xfe\x89\x89\0\0\0\0)
channel\4\visible=true
channel\size=4

[Plot]
numOfSamples=1000
indexAsX=true
xMax=1000
xMin=0
autoScale=false
yMax=1023
yMin=-1023
darkBackground=true
grid=true
minorGrid=true
legend=true
multiPlot=false
symbols=auto

[Commands]
command\1\name=Command 1
command\1\type=ascii
command\1\data=ok
command\2\name=Zastav meranie
command\2\type=ascii
command\2\data=stop
command\size=2

[Record]
autoIncrement=true
recordPaused=true
stopOnClose=true
header=true
disableBuffering=false
separator=","