VYSOKÁ ŠKOLA POLYTECHNICKÁ JIHLAVA Katedra elektrotechniky a informatiky Obor Počítačové systémy
Vy u ž i t í p ro t o k o l u A N T p ro o v l á d á n í elektrických zařízení bakalářská práce
Autor: Tomáš Kratochvíl
Vedoucí práce: doc. Ing. Bc. Michal Vopálenský, Ph.D.
Jihlava 2015
Abstrakt Účelem této bakalářské práce je seznámit se se specifiky protokolu ANT/ANT+ s následným porovnáním s konkurenčními protokoly a vytvořit komunikační řídicí uzel pro ovládání elektrických zařízení. Obsahem práce je vytvoření programového vybavení pro Android zařízení a mikrokontrolér, které svojí interakcí vytvoří jednoduchou komunikaci master/slave. Součástí je i návrh a mechanická realizace interface desky pro připojení integrovaného modulu ANT k platformě Arduino Uno.
Klíčová slova ANT/ANT+ komunikační protokol, Arduino, interface deska, Android
Abstract The purpose of this bachelor thesis is to explore the specifics of the ANT/ANT+ protocol, followed by a comparison with the competing protocols, and to create a communication node for control of electrical devices. The thesis deals with creating the software, which would allow a simple master/slave communication between Android devices and microcontroller-based nodes. It also describes the design and mechanical realization of a developed interface board used to connect the integrated ANT module to Arduino Uno board.
Key words ANT/ANT+ communication protocol, Arduino, interface board, Android
Prohlašuji, že předložená bakalářská práce je původní a zpracoval/a jsem ji samostatně. Prohlašuji, že citace použitých pramenů je úplná, že jsem v práci neporušil/a autorská práva (ve smyslu zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů, v platném znění, dále též „AZ“). Souhlasím s umístěním bakalářské práce v knihovně VŠPJ a s jejím užitím k výuce nebo k vlastní vnitřní potřebě VŠPJ. Byl/a jsem seznámen s tím, že na mou bakalářskou práci se plně vztahuje AZ, zejména § 60 (školní dílo). Beru na vědomí, že VŠPJ má právo na uzavření licenční smlouvy o užití mé bakalářské práce a prohlašuji, že s o u h l a s í m s případným užitím mé bakalářské práce (prodej, zapůjčení apod.). Jsem si vědom/a toho, že užít své bakalářské práce či poskytnout licenci k jejímu využití mohu jen se souhlasem VŠPJ, která má právo ode mne požadovat přiměřený příspěvek na úhradu nákladů, vynaložených vysokou školou na vytvoření díla (až do jejich skutečné výše), z výdělku dosaženého v souvislosti s užitím díla či poskytnutí licence. V Jihlavě dne
............................................... Podpis
Poděkování Na tomto místě bych rád poděkoval svému vedoucímu práce doc. Ing. Bc. Michalovi Vopálenskému, Ph.D. za poskytnutí tématu a možnosti vytvářet ho pod jeho vedením. Dále děkuji panu Ing. Ivanu Krejčímu, CSc., za podnětné rady při vytváření hardwarové části a v neposlední řadě bych chtěl poděkovat své rodině, přítelkyni a přátelům za podporu během studia.
Obsah 1
Úvod.......................................................................................................................... 8
Obecný popis technologie ANT/ANT+ .......................................................................... 10
2
3
1.1
Současný stav ANT na trhu.............................................................................. 10
1.2
Vznik technologie ANT/ANT+........................................................................ 10
1.3
Výhody a nevýhody ANT ................................................................................ 11
Technická specifikace ............................................................................................. 12 2.1
Model ISO/OSI protokolu ANT....................................................................... 12
2.2
Topologie sítě ................................................................................................... 13
2.3
Technické parametry ........................................................................................ 14
ANT a konkurenční technologie ............................................................................. 15 3.1
4
5
Komunikační protokol ANT ................................................................................... 17 4.1
Parametry komunikačního kanálu .................................................................... 17
4.2
Mechanismus párování..................................................................................... 20
4.3
Master/slave komunikace ................................................................................. 21
4.4
Popis řídicí datové zprávy ................................................................................ 22
Hardwarová část ..................................................................................................... 23 5.1
Arduino Uno..................................................................................................... 23
5.2
ANT Modul AP2 a ANTUSB2 ........................................................................ 24
5.3
Propojení mikrokontroléru Arduino Uno a AP2 .............................................. 25
5.3.1
Transformace z 5 V logiky na 3,3 V logiku ............................................. 26
5.3.2
Asynchronní komunikace ......................................................................... 27
5.3.3
Kompletní návrh interface desky .............................................................. 27
5.4 6
Porovnání základních technických parametrů ................................................. 15
Připojené periferie k Arduinu........................................................................... 29
Softwarová část ....................................................................................................... 30
6.1
Řídicí program pro mikrokontrolér .................................................................. 30
6.2
Arduino IDE ..................................................................................................... 31
6.2.1 6.3
7
Struktura programu ................................................................................... 32
Aplikace pro mobilní platformu Android ........................................................ 40
6.3.1
Android SDK ............................................................................................ 40
6.3.2
Struktura programu ................................................................................... 41
Závěr ....................................................................................................................... 56
Seznam použité literatury ............................................................................................... 58 Seznam obrázků .............................................................................................................. 61 Seznam tabulek ............................................................................................................... 63 Seznam použitých zkratek .............................................................................................. 64 Přílohy (Obsah přiloženého CD) .................................................................................... 66
1 Úvod Bezdrátové sítě jsou v současné době nezanedbatelnou součástí našeho života. Nabízejí v principu stejné služby jako sítě drátové, pomineme-li přenosové rychlosti, jmenovitý dosah a zpoždění dat. Minimalizace mechanických dílů, jako jsou optické nebo metalické kabely, vede k rozvoji nových bezdrátových technologií. Bylo vytvořeno mnoho protokolů, jejichž vhodnost závisí na aplikaci. Především v oblasti sportu doznává vývoj zlatou horečku z důvodu atraktivnosti a finančním injekcím, které jsou do této oblasti pumpovány. Zajímavé jsou aplikace pro analýzu tréninkového procesu, měření uběhlé vzdálenosti a tepové frekvence. Jedním z protokolů, který je určen pro takovéto aplikace, kde není kladen důraz na přenos velkých datových objemů na krátkou vzdálenost, je ANT. Cílem bakalářské práce je vytvořit bezdrátový systém pro dálkové ovládání elektrických zařízení zastřešený protokolem ANT. Základní motivací pro tuto práci byla myšlenka ovládání např. žaluzií či osvětlení v pokoji z chytrého mobilního telefonu. Takový systém by byl použitelný například v domácí automatizaci bez potřeby dalších proprietárních ovladačů. Systém řešený v rámci práce sestává z jednoho řídicího uzlu, realizovaného platformou Arduino Uno a modulem ANT, a ovládacího zařízení, kterým může být obecně jakýkoliv přístroj disponující modulem ANT, v rámci práce pak mobilní telefon. Teoretická část se zaměřuje na obecný popis technologie ANT s rešerší trhu, diskusí specifik a porovnáním s konkurenčními technologiemi. V hardwarové části je popsána interfacová deska pro Arduino Uno. Softwarová část je zaměřena na strukturu a nejdůležitější funkce řídicího programu pro vývojový kit Arduino a mobilní aplikaci vytvořenou pro platformu Android. Integrovaný modul (řídicí uzel) bude v síti master/slave reprezentovat zařízení slave, to znamená, že bude nastaven primárně pro příjem dat. Druhé zařízení může být simulováno pomocí simulačního programu ANTwareII nebo vytvořenou mobilní aplikací. Svítivá dioda neboli LED (Light-Emitting Diode) bude simulovat osvětlení v místnosti s možností změny úrovně jasu.
8
Dále bude snímána teplota vzduchu s relativní vlhkostí pomocí čidla BMP085 a atmosférický tlak čidlem DHT22. V současné době již existuje aplikace na ovládání světelných zdrojů ANT Lighting Control Demo. Tato aplikace pracuje se sdílením kanálu, zatímco vyvinutá aplikace v rámci bakalářské práce bude pracovat pouze s jedním nezávislým kanálem, kde lze ovládat pouze jediné zařízení současně.
9
Obecný popis technologie ANT/ANT+ Kapitola je zaměřena na současnou dostupnost a využití technologie ANT/ANT+ na trhu s následným rozborem jejího vzniku. Dále jsou diskutovány základní nevýhody a výhody této technologie.
1.1 Současný stav ANT na trhu V mnoha průmyslových aplikacích i ve spotřebitelském průmyslu se uplatňují bezdrátové protokoly pro přenos dat převážně ze senzorů. S rozmachem bezdrátových sportovní technologií se čím dál více nasycuje trh sportovními pomůckami, jako jsou pásové měřiče tepové frekvence, různé měřiče vzdálenosti a kalibrační nástroje pro cyklistiku nebo mobilní aplikace pro analýzu tréninkového procesu. V současnosti se ANT/ANT+ technologie nejvíce využívá pro přenos dat ze senzorů tepové frekvence, otáček, polohy, teploty a váhy. Tyto údaje se dají přeposlat do přenosných zařízení pomocí modulu ANT přijímače/vysílače, nebo má zařízení přímo vestavěnou podporu (tzv. embedded zařízení). Lze využít kompletně řešené moduly s vestavěnou anténou postavené na procesorech podporující ANT, které jsou vyráběny firmou Dynastream Innovations nebo pouze procesory (čipy) podporující ANT vyráběné firmami Texas Instruments a Nordic Semiconductor. V průmyslu není tento protokol zatím tak rozšířen, protože jsou zde konkurenti z rodiny standardně využívaných protokolů, mezi které patří ZigBee, Bluetooth a samozřejmě technologie Wi-Fi (Wireless Fidelity). Moderní protokol se využívá především ve sportovním odvětví jako je cyklistika, plavání, lyžování, běh, fitness, ale mezi nezanedbatelnou oblast spadá i lékařství a inteligentní domy. Přední výrobci elektroniky tento protokol začínají integrovat do standardní výbavy mobilních platforem, notebooků, hodinek či brýlí. [1]
1.2 Vznik technologie ANT/ANT+ ANT bezdrátová technologie nespadá mezi standardy IEEE (Institute of Electrical and Electronics Engineers), náleží mezi bezdrátové protokoly pro oblast sítí PAN (Personal Area Network).
10
Protokol je vyvíjen od roku 2003 a má primárně za cíl nízkou spotřebu, která je vyžadována ve WSN (Wireless Sensor Network) sítích, kde není kladen takový důraz na vysoké přenosové rychlosti. Vývojem ANT protokolu vzniká v roce 2004 protokol ANT+, který je určený k otevřené interoperabilitě. Standard ANT+ garantuje interoperabilitu s více než čtyřmi sty certifikovanými výrobky, přičemž se jejich skupina neustále rozrůstá o další různé přístroje. Původní ANT protokol je rozšířen o tzv. profily, což je sada rolí a síťových pravidel pro přenos dat pro určitý použitý případ (senzor od různých výrobců). V současnosti vzniká společenství ANT+ Alliance, která seskupuje již stovky firem a angažuje se ve vývoji produktů a dalším rozvoji v oblasti PAN. V současné době ANT/ANT+ využívá více než 60 milionů zařízení po celém světě. [1]
1.3 Výhody a nevýhody ANT Omezený výběr standardizovaných protokolů, které by splňovaly hlavní požadavky ve WSN (ultra nízkou spotřebu a značnou potřebu miniaturizace), vedl ke vzniku technologie ANT/ANT+. ANT má tyto výhody:
ultra nízká spotřeba (optimalizace pro nízký datový tok);
škálovatelnost a flexibilita (rozšiřitelnost sítě a reakce na změny v síti);
nízká latence (zpoždění přijímaných/vyslaných dat).
Mezi největší nevýhody patří nižší dosah a přenosová rychlost oproti jiným technologiím; je to dáno tím, za jakým účelem se protokol vyvíjel a vyvíjí. ANT má tyto nevýhody:
není založeno na standardu IEEE;
nominální dosah v řádu 30 m;
malá vestavěná podpora embedded zařízení a jejich funkcí;
větší uživatelská režie z hlediska zabezpečení sítě. 11
2 Technická specifikace Kapitola je věnována zasazení ANT protokolu do referenčního modelu ISO/OSI [2] (International Organization for Standardisation/Open Systems Interconnection). Z hlediska bezdrátové ANT sítě jsou diskutovány podporované topologie s následnými technickými parametry.
2.1
Model ISO/OSI protokolu ANT
ANT implementuje pouze vrstvy používané pro přenos dat (vrstva 1–4) a zavádí nízkoúrovňové zabezpečení sítě, zatímco uživatel definuje vrstvy pro podporu aplikací (vrstva 5–7) včetně vysokoúrovňového zabezpečení (ověřování nebo šifrování). Níže uvedený obrázek 1 demonstruje ANT protokol v referenčním ISO/OSI modelu, který znázorňuje komunikaci v počítačových sítích, kde vzájemná komunikace vrstev je řízena pomocí přesně definovaných rolí a pravidel.
Obrázek 1: Model ISO/OSI protokolu ANT
ANT+ Alliance je skupina, která má za cíl standardizovat komunikaci mezi zařízeními pracujícími s bezdrátovým protokolem ANT. Z tohoto důvodu vznikly ve vrstvách pro podporu aplikací tzv. profily zařízení. Tyto profily ANT+ jsou multiplatformní a zajištují minimalizovaný standard, který umožňuje přenesená data zpracovat i na zařízeních od jiných výrobců. Na obrázku 2 je vidět komunikace mezi ANT a ANT+. Je patrné, že různá zařízení přes ANT protokol nemohou spolu interagovat, pokud uživatel nedefinuje vzájemnou komunikační logiku, ale ani poté není zaručena podstata ANT+, kterou je otevřená interoperabilita. [3] 12
Obrázek 2: Vzájemná kompatibilita mezi ANT+ a ANT
2.2 Topologie sítě Topologie sítě mapuje fyzické, elektrické a logické uspořádání dané sítě. V bezdrátových sítích typu ANT/ANT+ jsou podporovány topologie hvězda, strom, mesh nebo P2P (Peer to Peer). Není podporová kruhová topologie neboli Token ring a sběrnicové rozložení sítě. Na obrázku 3 jsou zobrazeny základní podporované topologie. Detailnější popis síťových topologií je uveden v katalogových listech výrobce [4].
Obrázek 3: Základní podporované topologie v ANT a ANT+ síti
13
ANT umožňuje vytvářet sítě, které poskytují jak poloduplexní komunikaci, tak i duplexní (někdy označovanou jako plně duplexní). Aktivní člen (koordinátor sítě) může komunikovat s plně funkčním (senzor) zařízením pomocí jednotlivého nezávislého kanálu nebo sdíleného kanálu, kde koordinátor sítě zpracovává komunikaci s více uživateli (senzory). Pokud zařízení disponuje vestavěnou funkcí ANT-FS (ANT File Share), může být komunikace více kontrolována.
2.3 Technické parametry Zde jsou specifikovány základní technické parametry technologie ANT/ANT+, které se vztahují k použitému modulu AP2 [4]. Některé parametry se na určitých modulech liší – propustnost sítě, vysílací výkon a jiné.
frekvenční rozsah: 2,4 GHz v ISM (Industrial, Scientific and Medical Band) pásmu;
jmenovitý dosah: až 30 m;
maximální datová přenosová rychlost (propustnost sítě): 20 kbps až 60 kbps;
šířka pásma: 1 MHz;
rychlost odezvy: ~0s;
počet měnitelných frekvenčních kanálů: 78;
jmenovitý vysílací výkon: +4 dBm;
modulace: GFSK (Gaussian Frequency Shift Keying);
metoda přenosu: TDMA (Time Division Multiple Access);
počet adresovatelných zařízení v síti: 232;
kódování a bezpečnost: AES-128 (Advanced Encryption Standard) a 64 bitový síťový klíč – AP2 nepodporuje AES-128;
ochrana dat: 16 bit CRC (Cyclic Redundancy Check).
14
3 ANT a konkurenční technologie Kapitola charakterizuje a porovnává ANT protokol v základních technických parametrech vzhledem k nejznámějším konkurenčním bezdrátovým technologiím Bluetooth, ZigBee, Wi-Fi a UWB (Ultra Wide-Band).
3.1 Porovnání základních technických parametrů Níže uvedený obrázek 4 ukazuje pozici ANT vzhledem k zavedeným standardům Bluetooth, ZigBee, Wi-Fi a UWB v závislosti nominálních vzdáleností na přenesených datech. Zde je patrné, pro jakou oblast je ANT technologie vyvinuta.
Obrázek 4: Porovnání bezdrátových technologií [5]
V tabulce 1 jsou uvedeny technologie, které si za určitých okolností konkurují, a sice ANT, ZigBee a Bluetooth ve verzi Low Energy. Uvedené technologie využívají volné pásmo 2,4 GHz (ZigBee kromě toho i jiné frekvence). ANT technologie umožňuje nejvíce měnitelných frekvenčních kanálů, které využívají rozestup 1 MHz mezi frekvencemi. Maximální datová přenosová rychlost (neformálně nazývaná propustnost sítě) a nominální dosah jsou naopak nejmenší, což je dáno účelem technologie ANT. Doba čekání na příjem dat (latency) by měla být za určitého předpokladu nejkratší, ale vše záleží na vlivu vnějších podmínek a použitých módech.
15
ANT podporuje největší škálu topologií, mezi výhody patří multiplikování v topologii hvězda. Jako metoda přenosu je použita TDMA, která umožnuje sdílet stejný frekvenční kanál pomocí časových rámečků. Při vytvoření multi-user komunikace je přenos dat k jednotlivým uživatelům doručován v nesouvislém tvaru. Vysokofrekvenční signál je modulován pomocí binární modulace GFSK a pro jednotlivé kanály je poskytnut standard AES, který umožňuje zašifrování dat pomocí symetrické proudové šifry. K detekci chyb je použit cyklický redundantní součet (CRC). Tabulka 1: Typické parametry bezdrátových technologií ANT, BLE, ZigBee [6], [7]
Technologie
ANT
Bluetooth LE
ZigBee
IEEE standard
vlastní standard ANT+
802.15.1
802.15.4
Frekvenční rozsah [GHz]
2,4
2,4
0,868 0,915 2,4
20–60
<300
~0,250
~30
~60
Šířka pásma [MHz]
1
2
Běžné podporované topologie
p2p, star, tree, mesh
p2p, star
Počet měnitelných frekvenčních kanálů
78
40
Rychlost odezvy [ms]
~0
~3
Modulace
GFSK
GFSK
Metoda přenosu Počet adresovatelných zařízení v síti
TDMA
FHSS
10–100 0,3 0,6 2 p2p, star, tree, mesh 1 10 16 ~15 BPSK(+ASK) O-QPSK DSSS
232
232
> 65000
Kódování a bezpečnost
AES-128 64 bit klíč 16 bit CRC
AES-128
AES-128
24 bit CRC
16 bit CRC
Maximální datová přenosová rychlost (propustnost sítě) [kbps] Jmenovitý dosah [m]
Ochrana dat
16
4 Komunikační protokol ANT V této kapitole budou zmíněny základní parametry komunikačního kanálu s použitými datovými typy přenosu (všesměrový a potvrzovaný) a mechanismus párování s následnou ukázkou navázání jednoduché komunikace mezi uzlem master/slave. Obecné poznatky jsou čerpány z katalogových listů výrobce protokolu [4], [8], [9] a [10]. Nachází se zde detailnější popis všech komunikačních parametrů a párovacího mechanismu, včetně řídicích zpráv.
4.1 Parametry komunikačního kanálu Každý uzel ANT sítě může být reprezentován jako master nebo slave zařízení. Pro jednoznačnou identifikaci a správné fungování v bezdrátové síti je nutné nastavit korektní parametry komunikačního kanálu.
Obrázek 5: Komunikace mezi dvěma uzly ANT
Master uzel je především využíván pro přenos dat ze senzorů, zatímco slave může plnit roli diagnostického zařízení. Po otevření kanálu je spuštěn proces hledání a kontrola, zda není přenos v rozporu s jiným zařízením. Následně v každé vysílací periodě budou odeslána data pomocí časového rámečku neboli intervalu. Na obrázku 5 je zobrazena obousměrná komunikace mezi dvěma uzly. Mezi základní parametry patří režim komunikace, frekvence, identifikační číslo kanálu, vysílací perioda, síťové informace a typy datových přenosů.
17
Režim komunikace Specifikuje režim komunikace, který bude na daném kanálu. Umožňuje nastavit kanál pouze pro příjem/odeslání dat nebo jako obousměrný a to pro master uzel i slave uzel. Tabulka 2: Režimy komunikace
Hodnota Popis komunikace na jednotlivých kanálech 0x00 0x10 0x20 0x30 0x40 0x50
obousměrný slave obousměrný master sdílený obousměrný slave sdílený obousměrný master slave pouze pro příjem master pouze pro odeslání
Poslední možností je využívat sdíleného kanálu, kde se jedná o nezávislý kanál, který umožňuje zpracovat více dat z multi-uzlové komunikace. Frekvence Požadovaná frekvence komunikačního kanálu musí být známa na obou stranách zvolené komunikace, dána je derivátem 125 různých frekvencí od základní frekvence 2400 MHz. Výpočet bezrozměrné frekvenční konstanty zvolené frekvence, která se dosadí do příslušné řídicí zprávy, je prováděn pomocí vzorce 1. Frekvenční konstanta
fPožadovaná – 2400 MHz 1 MHz
(1)
Čitatel udává rozdíl požadované frekvence a základní frekvence, zatímco jmenovatel je dán offsetem mezi jednotlivými kanály. Následně by měla být provedena kontrola, zda požadovaná frekvence leží v pásmu ISM. ID kanálu Nejvýznamnější ANT parametr z hlediska popisu sítě je identifikátor kanálu, který umožňuje dané zařízení v síti rozlišit. Identifikátor je složen ze tří složek:
typ zařízení – využívá se pro odlišení typu zařízení mezi více uzly; 18
typ přenosu – definuje se přenosová charakteristika zařízení (nezávislý kanál, sdílený kanál, globální data – ANT+);
číslo zařízení – jedinečný identifikátor zařízení.
Vysílací perioda Reprezentuje přenosovou rychlost datové zprávy, která může být v rozmezí 0.5 Hz až 200 Hz v sounáležitosti s použitou aplikací. Výpočet konstanty pro periodu je prováděn pomocí vzorce 2. Konstanta periody
3276 Požadovaná přenosová frekvence
(2)
ANT síť ANT podporuje unikátní sítě, které mohou být veřejné (public), řízené (managed) nebo privátní (private). Síť rozlišuje dvě složky:
číslo sítě – jednoznačný identifikátor pro rozdělení sítí na segmenty;
síťový klíč – poskytuje určitou míru zabezpečení a formu řízení.
Ve výchozím nastavení je nastaveno číslo sítě 0, které specifikuje síť jako veřejnou. Typy dat ANT podporuje čtyři typy datových přenosů – všesměrový (broadcast), potvrzovaný (acknowledged), burst a burst s rozšířením. Broadcast je základní nepotvrzovaný typ přenosu dat s nejmenší spotřebou elektrické energie, který odesílá data v každém časovém rámečku z uzlu master. V opačném směru jsou data ze slave zařízení odeslána pouze jedenkrát. Problémem jsou redundantní data, která mohou zahltit sériovou komunikaci, pokud není zapnuta jejich filtrace.
19
Acknowledged je typ přenosu dat, který je využíván v obousměrné komunikaci. Potvrzovaná data jsou odeslána pouze v jednom časovém rámečku (v dalším časovém rámečku jsou již všesměrová) a uzel, který data odeslal, je informován o jejich stavu. V případě neúspěšného odeslání neexistuje žádný opravný algoritmus pro odeslání. Oproti všesměrovému vysílání používají větší šířku frekvenčního pásma a spotřebovávají více energie.
4.2 Mechanismus párování Z hlediska párování je ID kanálu hlavní parametr, který umožňuje jednoznačnou identifikaci zařízení v síti. Párování je proces (slave zařízení bude spárováno s prvním zařízením master), kdy zařízení typu slave získá kompletní ID kanálu master. V multiuzlové síti je problematický výskyt více zařízení se stejným ID z důvodu, že nelze jednoznačně rozlišit zařízení, které má být spárováno. Identifikace zařízení může být provedena skrze různé rozšířené režimy párování:
seznam zahrnutí/vyloučení – umožňuje zahrnout nebo vyloučit jednotlivá zařízení nebo skupiny zařízení;
proximity hledání – párovaní z hlediska relativní vzdálenosti mezi zařízeními;
párovací bit – nejvýznamnější bit, který se nastavuje u typu zařízení, který umožňuje jednoduchou abstrakci párování.
Slave zařízení může být nastaveno k úplnému řízení párovacího procesu (všechny parametry ID kanálu jsou známé) nebo řízení pomocí divoké karty nastavené na jednotlivých parametrech ID kanálu. Významným parametrem je vyhledávací čas, kdy zařízení slave hledá v časovém intervalu zařízení master. Většina zařízení umožňuje vyhledávat pomocí nízké priority a vysoké priority hledání – lze využít jednotlivě. Rozdíl těchto módů je jak hledání ovlivňuje již spuštěné kanály a rychlost s jakou je zařízení master nalezeno. Nejprve se vyhledává v režimu nízké priority, poté v režimu vysoké priority. Po překročení vyhledávacího limitu (může být i nekonečný) je kanál uzavřen.
20
4.3 Master/slave komunikace Komunikace mezi dvěma uzly probíhá na úrovni master a slave v závislosti na konfiguraci kanálu, způsobu a směru odeslání dat. Rozhodnutí, které zařízení bude master nebo slave, záleží na konkrétní aplikaci, dané topologií sítě a energetické závislosti. Na obrázku 6 je ukázán proces vytváření jednoduché komunikace pro oba případy (master/slave).
Obrázek 6: Proces vytváření komunikace mezi master a slave síťovým uzlem
V kapitole 6.1.3 bude řešen detailnější popis konfiguračních datových zpráv kromě vysílacího výkonu. Červené bloky jsou povinné – musí být nakonfigurovány. U žlutých nepovinných příkazů bude nastavena defaultní hodnota. Hledací čas je využit pouze u zařízení slave.
21
4.4 Popis řídicí datové zprávy Typická standardní řídicí datová zpráva mezi MCU (Micro Controller Unit) a zařízením, které podporuje ANT protokol, je zobrazen na obrázku 7. Jednotlivé bajty datové zprávy jsou posílány tak, že prvním bitem je vždy nejméně významný bit. Příjemce rozpozná začátek každé datové zprávy pomocí synchronizační značky, poté následuje počet bajtů datového obsahu (Payload, viz obr. 7), identifikační číslo zvoleného příkazu a vlastní datový obsah. Sekvence každé řídicí zprávy je ukončena kontrolním součtem.
Obrázek 7: Standardní formát datové zprávy [8]
Datové zprávy pro komunikaci jsou ve třech verzích (Standard, Flagged extended, Legacy extended). Rozšířený formát datové zprávy Flagged extended oproti Legacy extended obsahuje příznak Flag, po kterém následují parametry sítě jako číslo zařízení, typ zařízení a typ přenosu. Další rozdíl je v pozici těchto dat: zatímco zpráva Legacy obsahuje informace před vlastními daty, tak u Flagged jsou až po datovém obsahu. Resumé standardního datového bloku včetně velikostí a významu jeho součástí je uvedeno v tabulce 3. Tabulka 3: Vysvětlení standardního datové zprávy
Název
Velikost [bajt]
Význam
Sync ML ID CN PAYLOAD CS
1 1 1 1 8 1
synchronizační bajt velikost zprávy v bajtech ID požadovaného příkazu číslo využitého kanálu vlastní datová zpráva kontrolní exkluzívní logický součet celé zprávy
22
5 Hardwarová část Tato kapitola je věnována hardwarovému návrhu interface desky pro připojení Arduina Una a AP2 modulu. Popsán bude využitý vývojový kit, modul ANT s USB (Universal Serial Bus) stickem a logické úrovně jednotlivých komponent včetně jejich korektní transformace. Komentován bude také výsledný návrh včetně připojených periferií.
5.1 Arduino Uno Arduino Uno [11] je open source vývojová sada s vestavěným zavaděčem (bootloaderem), díky kterému se nemusí použít pro importování zdrojového kódu speciální externí hardware neboli programátor procesorů. Kit je založený na mikroprocesoru ATmega32 [12], který pracuje s maximálním pracovním napětím 6 V. Deska má integrováno 14 digitálních vstupně/výstupních pinů, z nichž 6 může být použito na pulzně šířkovou modulaci, 6 analogových vstupů a napájecí vstupy. Součástí vývojové řady Uno není klasický USB převodník FTDI, místo toho je použit mikrokontrolér ATmega16U2, který je naprogramován jako USB-serial konvertor. V porovnání s typem Arduino Mega, který obsahuje 3 sériová rozhraní, má Arduino Uno vestavěn pouze jedno, které komunikuje skrze digitální piny RX (Receive) a TX (Transmit). Modul lze napájet přes USB rozhraní nebo síťovým adaptérem. Doporučené napájecí napětí se pohybuje v rozmezí 7–12 V. V případě nižšího napájecího napětí se vývojový kit může stát nestabilní. Naopak při použití vyššího napájecího napětí může dojít ke zničení regulátoru.
Obrázek 8: Vývojový kit Arduino Uno [11]
23
5.2
ANT Modul AP2 a ANTUSB2
ANT přijímací/vysílací modul AP2 [4] je založený na referenčním návrhu nRF24AP2 nové generace ANT čipů od výrobce NS, který je optimalizován pro nízkou spotřebu a pracovní napětí 3,3 V. Moduly se vyrábějí jak v provedení pro povrchovou montáž (ANTAP281M4IB), tak s konektorem Molex (ANTAP2 1M5IB). Obě varianty modulů pracují ve volném pásmu 2,4 GHz a umožnují až
samostatných kanálů ANT. Moduly
obsahují vestavěnou anténu, přes kterou mohou být data vyslána jako všesměrová, potvrzovaná nebo v režimu burst vysílání. V tabulce 4 jsou uvedeny jednotlivé významy pinů.
Obrázek 9: Modul ANT AP2 (ANTAP281M4IB) [4]
Mezi přednosti modulu AP2 patří Scanning mode, který je koncipován pro aplikace, kde je důraz kladen na nízkou latency. Podporován je proces párování vzhledem k relativní vzdálenosti slave zařízení. Modul nedisponuje vestavěnou funkcí ANT-FS, která rozšiřuje základní ANT protokol o robustní strukturu starající se o výměnu dat mezi zařízeními, autentifikaci a šifrovaní. Dále AP2 nepodporuje RSSI mód (Received Signal Strength Indication), který umožňuje párovat zařízení pomocí síly signálu. Šifrování dat frekvenčního kanálu pomocí blokové šifry AES-12 , také není podporováno. Při návrhu napájení pro modul AP2 lze provést teoretické ověření doby životnosti při specifickém typu bateriového napájení pomocí online kalkulačky na stránkách výrobce. Ta umožňuje zadat přesný typ modulu a podrobnější specifikaci, jako je počet kanálu provozovaných na modulu, jaký typ dat bude přijat/odeslán a jiné. AP2 obsahuje 32 kHz krystal, který lze využít jako zdroj hodin v nízkopříkonovém režimu. Modul je možné uvést do režimu spánku.
24
Tabulka 4: Popis jednotlivých pinů ANT modulu
Číslo pinu
Název pinu
Popis pinu
1
TEST
TEST – připojen k GND
2
RST
reset zařízení
3 4 5
Vcc GND NC
napájení GND nepřipojený pin
6
SUSPEND
suspend mód – volitelné
7 8 9 10 11 12 13 14 15 16 17
povolení spánkového módu – volitelné SLEEP nepřipojený pin NC výběr asynchronního nebo synchronního režimu PORTSEL výběr komunikační rychlosti BR2 vysílání dat TXD0 příjem dat RXD0 výběr komunikační rychlosti BR1 výběr komunikační rychlosti BR3 rezervovaný pin – připojen k GND RESERVED2 rezervovaný pin – připojen k GND RESERVED1 požadavek na vyslání dat ze strany ANT modulu RST
Mezi užitečné zařízení využité k testování komunikace patří ANTUSB2, což je USB stick, sloužící k připojení zařízení, která nemají vestavěný čip ANT.
Obrázek 10: ANTUSB2 stick
5.3 Propojení mikrokontroléru Arduino Uno a AP2 Primárním prvkem celého návrhu je komunikační modul AP2, který umožňuje komunikovat s MCU pomocí komunikačního sériového rozhraní. 25
Návrh byl koncipován pro využití sériového asynchronního přenosu.
5.3.1 Transformace z 5 V logiky na 3,3 V logiku U moderních digitálních obvodů se setkáváme s použitím 3,3 V logiky místo 5 V logiky, a to z důvodu snižování spotřeby energie. Na obrázku níže jsou patrné rozlišovací úrovně jednotlivých úrovňových logik Arduina Uno a AP2 modulu.
Obrázek 11: Logické úrovně AP2 [4] a Arduina Uno [12]
Z obrázku 11 je patrné, že modul AP2 a Arduino nelze přímo propojit bez přizpůsobení napěťových úrovní. Při komunikaci ze strany Arduina musí být na výstupních portech snížena logická úroveň z 5 V na 3,3 V, aby na vstupních portech AP2 byla dosažena správná logická úroveň. Pokud bychom tak neučinili, mohlo by dojít ke zničení připojeného modulu. Při opačné komunikaci by se zdálo, že je nutné zvýšit logickou úroveň z 3,3 v na 5 V, ale v zásadě tato korekce není nutná, protože minimální úroveň logické 1 na výstupu AP2 je ještě spolehlivě rozpoznána jako log. 1 na vstupu Arduina (analogicky platí i pro úrovně log. 0). Úrovně lze přizpůsobit výměnou napěťového regulátoru a dalšími drobnými úpravami přímo na desce Arduina, nebo externím převodníkem, který může být realizován k tomu určeným integrovaným obvodem, nebo i jinak. Pro jednosměrnou korekci napěťových úrovní byla zvolena nejjednodušší varianta a to skrze napěťový dělič, kde je pomocí vhodné kombinace rezistorů nastavena požadovaná logická úroveň 3,3V při konverzi signálů ve směru Arduino – AP2; logické úrovně při komunikaci AP2 – Arduino jsou ponechány bez úpravy.
26
5.3.2 Asynchronní komunikace Na obrázku 12 je zobrazeno typické propojení ANT modulu s MCU. Asynchronní vysílání je tvořeno start bitem, osmi datovými bity a ukončovacím bitem. Po stop bitu se linka nachází v klidovém stavu (logická úroveň 1) a čeká se na další start bit.
Obrázek 12: Klasické asynchronní propojení MCU s ANT modulem [10]
Nastavení komunikační rychlosti baud rate se provádí přivedením příslušné logické úrovně na příslušné piny AP2 modulu. Tabulka 5: Nastavení asynchronní rychlosti [10]
Komunikační rychlost [bps] BR3 BR2 BR1 4800 19200 38400 50000 1200 2400 9600 57600
0 0 0 0 1 1 1 1
0 1 0 1 0 1 0 1
0 0 1 1 0 0 1 1
5.3.3 Kompletní návrh interface desky Interface deska je navržena jako oboustranná deska plošných spojů v programu EAGLE 6.5.0 Light ve FREE verzi. Realizované řešení umožňuje šetřit určité využité piny procesoru, které lze pomocí jumperů přepojit na defaultní hodnotu nebo úplně vypnout. Napěťové děliče plní roli převodníku logických úrovní. Sériová komunikace probíhá na emulovaném portu a neumožňuje přímé programování daného modulu. 27
Nastavení komunikační rychlosti baud rate mezi ANT modulem a mikrokontrolérem poskytuje přepínač S1. Pro modul AP2 byla vyrobena vlastní knihovna, ve které byl vytvořen otisk modulu jako samostatná součástka. Free verze neumožňuje přenositelné knihovny. Otisk Arduina byl převzat z knihovny E14_Arduino [13], který byl následně upraven do finální podoby.
Obrázek 13: Schéma kompletního řešení interface desky
Na obrázku 14 je zobrazena fotografie realizované interface desky s osazeným ANT modulem. Konečným procesem výroby je vytištění předlohy plošného spoje na průsvitný papír nebo fólii. Dále se deska s pozitivním fotorezistem vystaví působení ultrafialovému záření po dobu tří minut. Posledním krokem je osvícenou plochu vyvolat vývojkou a vyleptat leptacím roztokem.
Obrázek 14: Výsledný realizovaný návrh interface desky s ANT modulem
28
5.4 Připojené periferie k Arduinu Pro simulaci elektrických zařízení byl vybrán senzor BMP085, senzor DHT22 a svítivá dioda (LED). Senzorem BMP0 5 bude měřen atmosférický tlak. Relativní vlhkost a teplota vzduchu je snímána čidlem DHT22. LED bude simulovat změnu úrovně jasu. Popsány budou pouze využité senzory.
Obrázek 15: Zapojení jednotlivých periferií a výsledné řešení
Senzor tlaku a teploty BMP085 Jedná se o piezo-rezistivní tlakový (umožňuje měřit i teplotu) digitální senzor od firmy Bosch. Doporučené napájecí napětí se pohybuje v rozmezí 1, –3,6 V. Klidový proud je 0,1 µA, při měření jednoho vzorku za sekundu je spotřeba závislá na použitém módu přesnosti. Měřený rozsah atmosférického tlaku je 300–1100 hPa s přesností 0,03hPa při nastavení nejpřesnějšího módu měření. Citlivost měřené veličiny je 0,01 hPa. Komunikace s procesorem je zprostředkována přes I2C (Inter-Integrated Circuit) protokol [14]. Senzor vlhkosti a teploty DHT22 Digitální senzor DHT22 umožňuje měřit relativní vlhkost a teplotu. Pracovní napětí je určeno výrobcem od 3,3–6 V. Klidový proud je 50 µA. Při konverzi může být spotřeba až 1,5 mA. Rozsah měření vlhkosti je 0–100% s udávanou přesností 2 až 5 %. Rozsah měření teploty se pohybuje od -40 do +80 C s přesností 0,5 °C. Senzor umožňuje měřit vlhkost v rozlišení 0,1 % a teplotu s citlivostí 0,1 °C. Komunikace probíhá přes proprietární rozhraní [15]. 29
6 Softwarová část Softwarová část je rozdělena na dvě části – řídicí program pro mikrokontrolér Arduina a aplikaci pro mobilní platformu Android. U těchto aplikací budou diskutovány nástroje využité při vývoji aplikací s následnou strukturou programu. Nedílnou součástí je vysvětlení nejzásadnějších funkcí programů a řídicích zpráv. Komunikační uzel master bude reprezentován mobilním zařízením, které bude umožňovat přímou interakci s řídicím uzlem slave, který je složen z mikrokontroléru a integrovaného modulu AP2. Vzájemná komunikace mezi zařízeními bude probíhat podle zobrazeného protokolu na obrázku 16. Odeslána je vždy zpráva s příslušným řídicím příznakem na prvním místě v datovém obsahu.
Obrázek 16: komunikace mezi mobilní aplikací a Arduinem + AP2
6.1 Řídicí program pro mikrokontrolér Řídicí
program
pro
mikrokontrolér
Arduino_Control
zajišťuje
přímé
ovládání integrovaného modulu AP2 a ovládání elektrických zařízení. 30
Vytvořen je obousměrný nezávislý komunikační kanál slave provozovaný ve veřejné síti na frekvenci 2466 MHz. Uživatelská data jsou přijímána/odesílána každých 250 ms. Slave zařízení nemá nastaven úplný režim párovacího procesu, tzn. spárovat lze pouze zařízení, které bude mít stejné parametry ID, kromě parametru číslo zařízení, které je libovolné. Připojit lze zařízení provozované na nezávislém kanálu s libovolným sériovým číslem (číslem zařízení) a identifikátorem (typ zařízení) reprezentujícím místnost, kde se zařízení nachází (např. v použitém řešení koupelna). Pro zlepšení ochrany komunikace bylo implementováno ověření heslem (123A) a 120 s limit pro zamezení, aby byl uživatel neustále připojen. Jednoduché zabezpečení je dáno i neznámostí parametrů sítě pro okolní zařízení (frekvence, typ zařízení, nezávislý kanál). Pokud dvě zařízení vyžadují párování současně, připojení proběhne náhodně. Po spárování a procesu autentifikace je možné ovládat připojená elektrická zařízení. Atmosférický tlak je získán ze senzoru BMP085. Relativní vlhkost a teplota vzduchu je snímána čidlem DHT22. Získané fyzikální veličiny jsou využity s přesností udanou výrobcem zařízení – není provedena žádná kalibrace. Data jsou transformována pouze pro odeslání. U LED je možná změna úrovně jasu. V případě nepřipojeného zařízení nedojde k uzavření komunikační kanálu, ale k přechodu do režimu nepřetržitého vyhledávání. V rámci řešení bakalářské práce byla ještě vytvořena knihovna AntController pro snadné ovládání ANT modulu ve formě řídicích zpráv. Součástí je třída AntChannelParams, která zajišťuje uchování parametrů komunikačního kanálu. Pro využité senzory byly importovány knihovny bmp085 [16] a DHTlib [17], které jsou šířeny jako svobodný software.
6.2 Arduino IDE Ovládací program Arduino_Control je vytvořen v open source integrovaném multiplatformním
grafickém
vývojovém
prostředím
Arduino
IDE
(Integrated
Development Environment) [18] s vestaveným sledovačem sériové linky. Programovací jazyk vychází z jazyka Wiring a je syntakticky podobný C/C++. Framework Arduina zajišťuje samotný běh aplikace, linkuje potřebné knihovny pro inicializaci procesoru, nastavení bootloaderu a vlastní programovací rutiny. 31
Každý sketch neboli vytvořený program musí obsahovat funkce setup a loop. První funkce se provede pouze jedenkrát a slouží k nastavení počátečních stavů mikroprocesoru. Do loop funkce se píše samotný kód aplikace, který je prováděn cyklicky. Vytvořený kód je zkompilován a následně je umístěn přímo do mikrokontroléru za použití protokolu STK500. [11]
Obrázek 17: Grafické vývojové prostředí Arduino IDE
6.2.1 Struktura programu Na obrázku 1
je zobrazen zjednodušený princip funkce řídicího programu. Po
připojení napájecího napětí nebo stisku vestavěného resetovacího tlačítka na desce Arduina je zavolána funkce setup.
Obrázek 18: Zjednodušený princip funkce řídicího programu
32
Zde je provedena inicializace mikroprocesoru, modulu AP2 a elektrických zařízení, pokud to vyžadují. Pro zamezení chybných dat je před vlastní komunikací vyprázdněn buffer sériové linky. void setup() { initiateArduino(); // Inicializace Arduina initiateAP2Module(); // Inicializace modulu AP2 initiateBMP085(); // Inicializace senzoru BM085 _serial.flush(); // Vyčištění UART bufferu }
Funkce initiateArduino nastavuje jednotlivé piny jako vstupní nebo výstupní s danou inicializační úrovní. Nastavena je také komunikační rychlost sériové linky na 9600 bps. void initiateArduino() { pinMode(PIN_PWM_LIGHT, OUTPUT); // Vstupní/výstupní mód pinu digitalWrite(PIN_PWM_LIGHT, HIGH); // Inicializační úroveň pinu … // Další piny _serial.begin(9600); // Nastavení komunikační rychlosti UART }
Funkce initiateBMP085 inicializuje knihovnu BMP0 5 (třídu). Výpočet tlaku bude proveden ze zadané nadmořské výšky 427 m se standardní přesností. Provedena je inicializace I2C sběrnice pro komunikace se senzorem. void initiateBMP085() { Wire.begin(); // Inicializace I2C sběrnice bmpSenzor.init(MODE_STANDARD, 42700, true); // Inicializace BMP085 }
Funkce initiateAP2Module umožňuje odeslat řídicí zprávy v pořadí, ve které je vytvořena jednoduchá komunikaci slave. Inicializován je objekt třídy (knihovny) AntController, který obsahuje jednotlivé obslužné zprávy pro ANT modul.
33
void initiateAP2Module() { ANT.initiateChannel(initiateChannelParameters(), &_serial); // Inicializace objektu AntController ANT.resetModule(); // Reset modulu AP2 delay(2000); // Zaspání systému ANT.assignChannel(); // Přiřazení kanálu // Další řídicí zprávy ANT.openChannel(); // Otevření kanálu }
Rutina initiateChannelParameters inicializuje parametry komunikačního kanálu. Mohou být využity defaultní parametry nebo definovány vlastní. AntChannelParams initiateChannelParameters() { AntChannelParams parametrs; // Parametry kanálu … // Další nastavení parametrů parametrs.setRFFrequency(0x42); // Použitá frekvence - 2466MHz return parametrs; // Vrácení parametrů }
V programové smyčce loop se provádí příjem a zpracování zpráv od ANT modulu. Dostupná data na sériové lince jsou přijata pomocí funkce _serial.read po jednotlivých bajtech. Velikost jednotlivých přijatých datových zpráv se může lišit, a proto je pro načítání bajtů do bufferu využit druhý příznak, který určuje velikost datového obsahu. void loop() { while(_serial.available()) { // Čtení ze sériové linky _buffer[_bufferIndex++] = (UCHAR) _serial.read(); if (_buffer[1] + 3 < _bufferIndex) { // Kompletní zpráva _bufferIndex = 0; // Nulování indexu doParseData(); // Parsrování dat } } }
34
Standardní datová zpráva je navíc rozšířena o jeden bajt, který obsahuje informaci, z jakého kanálu byla zpráva přijata. Po načtení správného počtu bajtů je volána funkce doParseData, kde je zajištěno rozlišení datového typu zprávy pomocí třetího příznaku. void doParseData() { switch (_buffer[2]) { case 0x4F: // Potvrzovaná data if (isWatchDog){ // Kontrola stavu watchDogu if (_buffer[4] == 0xBB) // Příznak hesla doCheckPassword(); // Kontrola hesla if (isPassword) // Kontrola stavu hesla doControlDevice(); // Ovládání elektrických zařízení } break; case 0x4E: // Všesměrová data doWatchDog(); // Kontrola watchdogu break; case 0x40: // Událost kanálu if (_buffer[5] == 0x08) // Přechod do vyhledávání initiateChannel(); // Obnovení kanálu pro novou komunikaci break; } }
Pokud je zachycena událost přechodu kanálu do vyhledávání (nekonečné), je program zinicializován pro novou komunikaci metodou initiateChannel. void initiateChannel() { … // Inicializace příznaků heslo první dat, watchdogu včetně synchronizace, ANT.channelID(); // Obnovení ID _serial.flush(); // Vyčištění UART bufferu }
35
Nutné je obnovit ID kanálu pro připojení nového zařízení, protože by se připojovalo pouze předešlé spárované zařízení. Při indikaci všesměrových dat je spuštěn rutinou doWatchDog 120 s watchdog, který je realizovaný jako počítadlo příchozích zpráv. Inkrementace probíhá každých 250 ms. Na začátku nové komunikace je provedena ještě synchronizace watchdogu a odesláno oznámení o spárování připojeného zařízení včetně odeslání inicializačních dat z elektrických zařízení. V případě překročení nastaveného limitu je odeslán požadavek na ukončení komunikace. doWatchDog() { watchDog++; // Watchdog +1 if ((watchDog == 8) && isFirstData) { // Přijata nová první data watchDog = 0; // Synchronizace watchdogu isFirstData = false; // První data byla přijata doGetDataFromDevice(); // Získání dat z elektrických zařízení _data[0] = 0xAA; // Příznak začátku komunikace ANT.sendAcknowledgedData(_data); // Odeslání dat } if (watchDog >= WATCHDOG_TIME) { // Kontrola přetečení watchdogu isWatchDog = false; // Změna stavu watchdogu _data[0] = 0xFF; // Příznak konce komunikace ANT.sendAcknowledgedData(_data); // Odeslání dat } }
Řízení elektrických zařízení probíhá skrze potvrzovaná data, aby došlo k jisté filtraci (přijato pouze jedenkrát) a nemusela být řešena jejich redundance. Funkce doControlDevice definuje samostatnou činnost, která bude vykonávána za předpokladu správné autentifikace uživatele funkcí doCheckPassword a nepřekročení časového limitu. Příchozí heslo je převedeno na znaky a sloučeno do řetězce. Následně je heslo porovnáno a informace o správnosti hesla je odeslána.
36
void doCheckPassword() { String password = ""; for (int i = 5; i < 12; i++) { // Převod dat na řetězec password += (char)(_buffer[i] & 0xFF); } if (password.equals(PASSWORD)) { // Porovnání hesla _data[0] = 0xCC; // Příznak správného hesla isPassword = true; // Příznak správného hesla … // Synchronizace watchdogu a odeslání dat } else { _data[0] = 0xEE; // Příznak špatného hesla ANT.sendAcknowledgedData(_data); // Odeslání dat } }
Při indikaci příznaku pro osvětlení je změna jasu světelného zdroje interpretována na pinu Arduina, který umožňuje pulzně šířkovou modulaci pomocí funkce analogWrite. Příchozí hodnota je vynásobena 25 krát. void doControlDevice() { switch (_buffer[4]) { // Příznak ovládání elektrických zařízení case 0xDA: // Ovládání DHT22 a BMP0 5 senzor doGetDataFromDevice(); // Získání dat z elektrických zařízení _data[0] = 0xBA; // Příznak DHT22 a BMP0 5 senzor // Synchronizace watchdogu a odeslání dat break; case 0xDB: // Ovládání osvětlení light = _buffer[5] * 0x19; // Hodnota osvětlení (0-10)*25 analogWrite(PIN_PWM_LIGHT, light); // Pulzně šířková modulace // Synchronizace watchdogu a zaspání systému 10 ms break; } }Každá
získaná aktuální veličina je kvůli přenosu transformována do dvou bajtů.
Výsledná datová zpráva se všemi měřenými veličinami je odeslána k uživateli.
37
Příznakem pro ovládání DHT22 a BMP0 5 senzoru jsou načteny fyzikální veličiny atmosférický tlak, teplota vzduchu a relativní vlhkost. Teplota je přijata jako celé číslo, které musí být pro získání rozlišení 0,1 °C vydělena deseti. Tlak je udáván v rozlišení 0,01 hPa. V naší aplikaci postačuje rozlišení 0,1 hPa, proto hodnota je vydělena tisícem. Naopak vlhkost je udána již jako reálné číslo. Hodnota jasu světelného zdroje je odeslána z důvodu inicializační zprávy na začátku komunikace. void doGetDataFromDevice() { // Proměnné využité pro tlak, teplotu, vlhkost bmpSenzor.getPressure(&pressure); // Získání tlaku z BMP085 dhtSenzor.read22(DHT22_PIN); // Čtení dat ze senzoru DHT22 humidity = dhtSenzor.humidity; // Získání vlhkosti z DHT22 temperature = dhtSenzor.temperature; // Získání teploty z DHT22 _data[1] = light; // Přečtení aktuální hodnoty osvětlení _data[2] = (char)temperature; // Transformace teploty _data[3] = abs((int)(temperature *10) - ((int)temperature*10)); _data[4] = (UCHAR)(pressure / 1000); // Transformace tlaku _data[5] = (UCHAR)((pressure % 1000) / 10); _data[6] = (char)humidity; // Transformace vlhkosti _data[7] = (int)(humidity *10) - ((int)humidity*10); }
Celá a desetinná část je rozdělena do dvou bajtů. Výsledná datová zpráva je odeslána s daným příznakem. Časový watchdog je synchronizován při každém čtení ze senzorů nebo ovládání osvětlení. Jednotlivé řídicí funkce obsažené v knihovně AntController jsou uvedeny prototypem funkce a jejich popisem. V každé funkci je definována vlastní řídicí zpráva (obrázek 7) s nastavenými příznaky. Zprávy jsou odeslány po vybrané sériové lince.
void initiateChannel(AntChannelParams, Stream*) – inicializuje
parametry
komunikačního kanálu s ukazatelem na používané UART rozhraní.
void checkSumFrame(UCHAR*) – kontrolní exkluzívní logický součet celé zprávy. Využito při každém příkazu. 38
void checkSumFrame(UCHAR*) – kontrolní exkluzívní logický součet celé zprávy. Využito při každém příkazu.
void serialSendFrame(UCHAR*) – zajišťuje odeslání zprávy po sériové lince. Součástí je prodleva před vlastním odesláním dat.
void resetModule() – nastavení modulu do předem daných podmínek.
void assignChannel() – definuje vlastní ANT síť. Přiřazuje číslo využívaného kanálu, určuje typ kanálu a číslo sítě.
void channelID() – identifikuje komunikační kanál v síti. Nastavuje se číslo zařízení, jeho typ a druh přenosu.
void channelFrequency() – nastavení požadované frekvence kanálu podle vzorce (1).
void channelPeriod() – nastavení časových intervalů, v jakých budou data přijímána/odesílána. Požadována kanálová perioda je nastavena podle vzorce (2).
void channelLowPrioritySearchTimeout() – časový
interval
nízké
priority
vyhledávacího režimu.
void channelSearchTimeout() – časový interval vyhledávacího režimu vysoké priority.
void openChannel() – otevření komunikačního kanálu.
void closeChannel() – uzavření komunikačního kanálu.
void unassignChannel() – zrušení komunikačního kanálu.
void sendBroadcastData(UCHAR*) – zajišťuje odeslání dat od uživatele ve všesměrové zprávě.
void sendAcknowledgedData(UCHAR*) – zajišťuje odeslání dat od uživatele v potvrzované zprávě.
39
6.3 Aplikace pro mobilní platformu Android Mobilní Intelligent_House aplikace vyvíjená pro mobilní platformu Android zajišťuje bezdrátové ovládání mikrokontroléru a tím řízené ovládání elektrických zařízení. Nutný předpoklad pro bezdrátové komunikování je minimální verze operačního systému Android 4.0 a podpora ANT, kterou je nutné v integrované podobě zapnout (pravděpodobný restart telefonu) nebo připojit USB-Stick (tato možnost u telefonu netestována) a aplikace ANT Radio Service pro ovládání ANT čipu. Vytvořen je obousměrný nezávislý komunikační kanál master se zadanými identifikačními parametry (lze vyměnit za předdefinované) provozovaný ve veřejné síti na definovaných frekvencích 2458 MHz, 2460 MHz a 2466 MHz. Pro odesílání/přijímání uživatelských dat byla zvolena frekvence 4 Hz. Po procesu spárování a autentifikace (zadáním hesla 123A) je možné ovládat elektrická zařízení připojená k mikrokontroléru. Při opuštění zóny dosahu je komunikační kanál stále aktivní pokud nedojde k jeho vypnutí. Primárním zdrojem informací při vývoji aplikace Intelligent_House byla developerská stránka pro Android [19] a kniha Android 4 [20]. Jednotlivé zdroje seznamují programátora s hlavními základními bloky, na kterých je aplikace vystavěna a s ukázkovými příklady jejich správného použití. Obrázky využité v aplikaci jsou převzaty z www.openclipart.org, kde jsou obrázky publikovány pod licencí Public License.
6.3.1 Android SDK Pro vývoj aplikace bylo použito programovací prostředí Eclipse IDE [21] s přidaným zásuvným modulem ADT (Android Development Tools), které je určeno pro vývoj aplikací Android. Tento modul rozšiřuje základní verzi o množství integrovaných doplňků pro usnadnění vývoje (programovanou aplikaci lze spouštět jako běžný projekt Java v Eclipse, grafická podpora tvorby uživatelských rozhraní a další). Eclipse IDE je součástí Android SDK (Android Software Development Kit), které poskytuje aplikační interface a nástroje jak pro vývoj, tak i debugging. Android SDK může být volně stažen z developerských stránek. 40
Balíček Android SDK obsahuje následující komponenty:
Eclipse + ADT plugin;
Android SDK tools + platform tools;
nejnovější verze Androidu + emulátory pro vývoj.
Mezi základní nástroje Android SDK tools patří DDMS (Dalvik Debug Monitor Server) sloužící k debugging programu a SDK manager monitorující nainstalované balíčky (platformy Android), nástroje nebo utility. Obsahuje také nástroje pro vývoj aplikací bez použití fyzických zařízení jako AVD (Android Virtual Devices) Manager a Android Emulator, který reprezentuje virtuální zařízení. SDK Platform-tool obsahuje nástroje specifické pro konkrétní verze.
Obrázek 19: Načítání prostředí Eclipse s nástroji pro vývoj Android aplikací
6.3.2 Struktura programu Aplikace Intelligent_House využívá tří nezávislých aktivit, kde každá odpovídá v aplikaci jedné obrazovce s obsahem grafického uživatelského rozhraní a specifickou funkcí. Služba běžící na pozadí umožňuje udržovat spojení na požadovanou dobu mezi aktivitami a ANT bez interakce uživatele (připojení k službě ANT Radio Service, která umožňuje ovládat ANT vestavěný nebo externí čip). Hierarchie aktivit, služeb a třídy zajišťující API (Application Programming Interface) pro ovládání ANT je zobrazena na obrázku 20.
41
Obrázek 20: Hierarchie aplikace
Komunikace mezi Android aplikací a ANT vysílačem/přijímačem (čipem) je tvořena následujícími kroky:
kontrola, zda obsahuje zařízení ANT čip;
připojení ke službě ANT Radio Service;
získání jednotlivých kanálů pomocí ANT Channel Provideru;
parametrizace kanálu a jeho řízení;
uvolnění kanálu a zrušení komunikace s ANT Radio Service.
Obrázek 21: Systémové a aplikační požadavky
Detailnější popis jak vytvořit ANT Android aplikaci je dostupný v dokumentu Creating ANT Android Applications [22], podle kterého byla vytvořena výsledná aplikace. V aplikaci jsou použité knihovny, které byly vyjmuty z ANT_Android_SDK. Aplikaci ANT Radio Service je nutné nainstalovat (lze nalézt v ANT_Android_SDK nebo stáhnout z Google Play Store). 42
SplashActivity Tato aktivita je spuštěna po startu aplikace. Jejím úkolem je zobrazit úvodní obrázek na dobu 3 s, zkontrolovat zda má mobilní přístroj vestavěný čip ANT a spustit aktivitu MainActivity.
Obrázek 22: SplashActivity obrazovka pro orientaci na výšku i na šířku
Celá operace uspání na 3 s je prováděna ve zvláštním pracovním vlákně, které neovlivňuje svým během UI (User Interface) vlákno. Spuštěno je metodou execute po inicializaci vzhledu aktivity ve funkci newSplashAsyncTask. private void newSplashAsyncTask() { new CustomAsyncTask().execute(); // Vytvoření nové úlohy v AsyncTask }
Po spuštění vlákna je nejprve volána metoda onPreExecute, kde je provedena kontrola vestavěného čipu a zobrazena informace, že zařízení neobsahuje ANT čip. protected void onPreExecute() { hasAntFeature = AntSupportChecker.hasAntFeature(context); // Kontrola vestavěného ANT if (!hasAntFeature) // Zobrazení zprávy Toast }
Následně je volána metoda doInBackground, která vykoná požadovanou úlohu v pracovním vlákně. Pro průběžné informování o stavu operace může být využita metoda onProgressUpdate (v aplikaci není implementována).
43
Po skončení práce na pozadí je provedena metoda onPostExecute, ve které je provedeno spuštění MainActivity. V případě, že zařízení neobsahuje ANT čip, aktivita je pouze ukončena. Přímou interakci s UI vláknem umožňují onPreExecute, onProgressUpdate a onPostExecute. public class CustomAsyncTask extends AsyncTask
{ private boolean hasAntFeature = false; @Override protected Void doInBackground(Void... params) { SystemClock.sleep(3000); // Uspání systému return null; } protected void onPostExecute(Void unused) { if (hasAntFeature) startActivity(new Intent(SplashActivity.this, MainActivity.class)); // Spuštění activity finish(); // Ukončení aktivity overridePendingTransition(R.anim.enter, R.anim.exit); // Nastavení animace } }
MainActivity Je rozcestníkem celé aplikace, který umožňuje přechod do ControlActivity nebo do dialogu pro nastavení. Zajišťuje komunikaci se službou ChannelControlService, která se stará o udržování a ovládání ANT čipu.
Obrázek 23: MainActivity obrazovka pro orientaci na výšku i na šířku
44
Vždy, když se aktivita dostane do popředí, je volána metoda životního cyklu aktivity onResume. Zde je volána funkce startMyService, ve které je služba spuštěna metodou startService. Takto spuštěná služba je explicitně aktivní dokud není zavolána metoda stopService pro její ukončení. Asynchronní volání vlastní implementované služby ChannelControlService probíhá na klientské úrovni (aktivit), které se připojují k API služby pomocí funkce doBindService. Tato metoda provádí připojení ke službě skrze metodu bindService. protected void onResume() { super.onResume(); startMyService(); // Spuštění služby doBindService(); // Bindování ke službě }
Metoda onServiceConnected je volána, jakmile je navázáno spojení se službou. Lze získat objekt typu Binder, který služba vrací v metodě onBind. Pro opačnou komunikaci (směrem k aktivitě) je implementováno rozhraní CallBackListener, které musí být zaregistrováno funkcí registerCallBackListener. Metoda onServiceDisconnected je volána při ztracení komunikace se službou. private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className, IBinder service) { ServiceChannelControl = (ChannelControlBinder) service; // Získání objektu Ibinder serviceChannelControl.registerCallBackListener( // Registrace přijímače pro zprávy od ANT new CallBackListener() { // reakce na příjem události od ANT }, getBaseContext()); } @Override public void onServiceDisconnected(ComponentName arg0) { serviceChannelControl = null; // Zrušení provázání se službou exceptionError("Service Disconnected"); // Chybový stav } };
45
Při přechodu aktivity do pozadí je volána metoda onPause, kde je provedena funkce doUnbindService, která zruší provázání se službou využitím metody unbindService a provede odhlášení CallBackListener metodou unregisterCallBackListener. Pokud není žádný klient připojen, je služba zastavena, jestliže není spuštěna pomocí příkazu startService. protected void onPause() { super.onPause(); doUnbindService(); // Odbindování od služby }
Celkové odpojení od služby je provedeno v poslední metodě životního cyklu onDestroy, která je volána před tím, než je aktivita zničena. public void onDestroy() { stopService(serviceIntent); // Zastavení služby super.onDestroy(); }
Stisk tlačítka switchOn je povolen, pokud ANT čip umožňuje vytvořit komunikační kanál. Prvním stiskem je provedeno přiřazení kanálu s následným otevřením kanálu s nastavenými parametry. Při dalším stisku je kanál pouze uzavřen nebo otevřen. Stisk tlačítka control je umožněn pouze v případě, že je kanál aktivní a je provedena správná
autentifikace.
Poté
je
spuštěna
aktivita
ControlActivity
metodou
startActivityForResult, kdy je vrácen výsledek aktivity po jejím zrušení. Stiskem tlačítka settings je vyvolán dialog nastavení, kde lze měnit parametry komunikačního kanálu a zadat uživatelské heslo. Tyto parametry zůstanou uloženy i po opuštění aplikace. Uložení nastavení probíhá pomocí sdílených preferencí – viditelné pro všechny komponenty aplikace (programátor se nemusí starat o ukládání do konfiguračního souboru). Všechna tlačítka využívají funkci setAnimation, která definuje animaci při stisku tlačítka. Při dlouhém stisku je možné prohodit tažením jednotlivá tlačítka. 46
Dále je definováno zpoždění kvůli zákmitům tlačítek, které obstarává funkce delayClick. Po dokončení animace je provedena příslušná
akce v metodě
onRotationFinished. @Override public void onRotationFinished(final CustomImageView view) { delayClick(view); // Zpoždění pro zákmity switch (view.getId()) { case R.id.imageViewSwitchOn: try { if (!serviceChannelControl.channelIsAdd()) // Test zda je kanál přiřazený addChannel(); if (!serviceChannelControl.channelIsOpen()) { // Test zda je kanál otevřený setChannelParams(); openChannel(); } else closeChannel(); } catch (NullPointerException e) { exceptionError(e.getMessage()); } break; // Akce pro tlačítko control // Akce pro tlačítko settings }
Po spárování jsou data indikována přes rozhraní CallBackListener, které obsahuje metody
pro
příjem
dat
z ANT
kanálu
downloadAcknowledgedData
a
downloadInfoData. Po příjmu příznaku pro spárování je zkontrolován stav dialogu (zda není již zobrazen) a zobrazen potvrzovací dialog, ve kterém lze vybrat mezi heslem přednastaveným a uživatelem zadaným. Tento typ dialogu je využíván i při stisku tlačítka zpět a menu, pouze je definován jiný vzhled a funkcionalita, která je rozlišena pomocí jména dialogu.
47
// Zobrazení potvrzovacího dialogu dialogufragmentDialog = CustomAlertDialog.newInstance(getString(R.string.alertDialog_pair)); fragmentDialog.show(getSupportFragmentManager(), "alert_dialog_pair");
Následuje akce v závislosti na typu dialogu (ukončení aktivity, odeslání hesla nebo zobrazení nápovědy). Při indikaci příznaku o správnosti hesla je provedeno zpřístupnění tlačítka control. Dále jsou inicializační data ze senzorů připravena pro zaslání do ControlActivity. Pokud je přijat příznak nesprávnosti hesla nebo ukončení komunikace, je kanál uzavřen. @Override public void downloadAcknowledgedData(final byte[] data) { runOnUiThread(new Runnable() { // Provedení s okamžitou prioritou na UI vlákně public void run() { switch (data[0]) { case (byte) 0xAA // Přijat příznak spárování getStateFragment(false); // Stav dialogu break; … // Akce pro přijatý příznak 0xCC …// Akce pro přijatý příznak 0xEE …// Akce pro přijatý příznak 0xFF } } }); }
Při chybových stavech je volána funkce exceptionError, která provádí znovuobnovení celé aktivity funkcí recreate. private void exceptionError(String text) { // Zobrazení zprávy Toast recreate(); // Refresh aktivity }
48
@Override public void downloadInfoData(int type, String message) { switch (type) { case 4: // Komunikační kanál je dostupný switchOn.setEnabled(true); // Zpřístupnění tlačítka … // Zobrazení zprávy Toast break; case 5: // Komunikační kanál je nedostupný switchOn.setEnabled(false); // Zpřístupnění tlačítka switchOn.setImageResource(R.drawable.switchoff); // Nastavení pozadí tlačítka control.setEnabled(false); // Znepřístupnění tlačítka … Zobrazení zprávy Toast break; default: // Chybové události exceptionError(message); break; } }
Pokud je komunikační kanál dostupný, je zpřístupněno tlačítko switchOn. Následně lze vytvořit komunikační kanál. V případě nedostupnosti kanálu lze provést pouze vstup do nastavení a ukončení aplikace. Informace jsou v aktivitách poskytovány uživateli ve formě zpráv Toast, které po zobrazení automaticky zmizí. // Zobrazení zprávy Toast CustomToast.showToastMessage(MainActivity.this, getString(R.string.channel_connect_nok));
Mezi aktivitami je prováděna při startu i konci přechodová animace. // Zobrazení zprávy Toast CustomToast.showToastMessage(MainActivity.this, getString(R.string.channel_connect_nok));
49
ControlActivity Aktivita zajišťuje rozhraní pro ovládání elektrických zařízení. Připojení ke službě je založené na stejném principu jako v aktivitě MainActivity.
Obrázek 24: ControlActivity obrazovka pro orientaci na výšku i na šířku
Při inicializaci aktivity jsou získána a na obrazovce zobrazena inicializační data z příchozího záměru od MainActivity. extras = getIntent().getExtras(); // Získání inicializačních dat ze záměru temperature = extras.getFloat("temperature", 0); // Teplota
Pro jednoduchou změnu intenzity světelného zdroje byl vybrán z palety komponent posuvník, který implementuje tři metody pro jeho ovládání. Po dokončení uživatelského dotyku je volána metoda onStopTrackingTouch, kde jsou odeslána aktuální data s příslušnou změnou indikačního obrázku podle stavu intenzity. Z důvodu rychlých změn posuvníku byla přidána metoda delayClick. @Override public void onStopTrackingTouch(SeekBar seekBar) { delayClick(seekBar); // Zpoždění pro zákmity … Změna obrázku a textu dle aktuální hodnoty osvětlení sendData((byte) 0xDB, (byte) progress); // Odeslání dat s příslušným příznakem }
V metodě onProgressChanged je zaznamenána aktuální hodnota posuvníku. Metoda onStartTrackingTouch je využívána k vykonání akce při započetí dotyku (v aplikaci není implementována). 50
@Override public void onProgressChanged(final SeekBar seekBar, int progresValue, boolean fromUser) { progress = progresValue; // Aktuální hodnota posuvníku // Nastavení aktuální hodnoty intenzity světla }
Získání teploty vzduchu, atmosférického tlaku a relativní vlhkosti je realizováno kliknutím na obrázek teploměru. Proběhne odeslání dat s příslušným příznakem pomocí metody onClick, kde je zjištěno jaké tlačítko bylo stisknuto. @Override public void onClick(final View view) { delayClick(view); // Zpoždění pro zákmity switch (view.getId()) { case R.id.imageViewLight: … // Nastavení opačného stavu žárovky a změna textu seekBar.setProgress(progress); // Nastavení aktuálních dat po stisku obrázku sendData((byte) 0xDB, (byte) progress); // Odeslání dat s příslušným příznakem break; … // Akce pro teploměr Odeslání dat s příslušným příznakem } }
Příchozí data jsou opět indikována přes rozhraní CallBackListener stejně jako v aktivitě MainActivity. Ukázka zpětné transformace celé a desetinné části veličin: case (byte) 0xBA: // Příchozí řídící znak float temperature = (float) (data[2]) + (float) data[3] / 10; // Transformace dat float pressure = (float) ((data[4] & 0xFF) * 10) + (float) (data[5] & 0xFF) / 10; float humidity = (float) (data[6]) + (float) (data[7]) / 10; myTextView1.setText(getString(R.string.control_textTemperature) + "\n" + Float.toString(temperature)); // Zobrazení dat … // Zobrazení pro tlak a vlhkost break;
51
Při opuštění aktivity, minimalizování nebo jakéhokoliv chybového stavu mezi aktivitou a službou je komunikační kanál uzavřen a aktivita ukončena. Tato aktivita je spuštěna metodu startActivityForResult, která umožňuje zpětné odeslání dat do původní aktivity přes nastavený výsledek aktivity. returnIntent.putExtra("result_message", value); // Vložení dat setResult(RESULT_OK, returnIntent); // Nastavení výsledku aktivity finish(); // Ukončení aktivity
Tento výsledek je předán do MainActivity, kde je následně zpracován v metodě onActivityResult. Při chybovém stavu (404) je provedeno znovuobnovení aktivity. Při uzavření kanálu (255) je pouze změněn obrázek switchOn. Při opuštění zóny dosahu ANT není aktivita zrušena. V případě opětovného připojení je proveden proces autentifikace v této aktivitě. Služba ChannelControlService Je primárním řídicím prvkem celé aplikace a zajišťuje neustále připojení ke službě ANT Radio Service (nemusí se vytvářet pro každou aktivitu nové připojení). V metodě onCreate je vytvořena instance třídy ChannelControlBinder a vytvořeno pracovní čekací vlákno. Po jeho skončení je provedeno připojení k ANT Radio Service a registrace BroadcastReceiver. Metoda onDestroy je volána, když má být služba zastavena. Má opačnou funkci než metoda onCreate. // Provázání se službou - získání API serviceBound = AntService.bindService(getApplicationContext(), serviceConnection); receiver = new MyReceiver(); // Vytvoření instance receiveru // Registrace broadcastReceiveru se zadaným filtrem příchozích záměrů registerReceiver(receiver, new IntentFilter( AntChannelProvider.ACTION_CHANNEL_PROVIDER_STATE_CHANGED));
52
Při připojení ke službě je vytvořena instance třídy AntService, která poskytuje objekt AntChannelProvider. Tento získaný prostředník umožňuje získat rozhraní pro komunikaci s kanálem ANT (objekt typu AntChannel). @Override public void onServiceConnected(ComponentName className, IBinder service) { // Získaný prostředník poskytuje vazbu mezi jednotlivými kanály ANT čipu myAntChannelProvider = ANTRadioService.getChannelProvider(); // Poskytnutí prostředníka třídě ChannelControlBinder binder.create(myAntChannelProvider, getApplicationContext()); … // Kontrola zda je kanál dostupný }
Zpětná vazba neboli přímá interakce klientům (Aktivit) se službou je tvořena metodou onBind, která vrací objekt umožňující provázání s aktivitami nebo jinými službami. @Override public IBinder onBind(Intent arg0) { return binder; // Vrací objekt Ibinder, který prováže službu s klientem }
Pro příjem informací o dostupnosti kanálu (zasíláno automaticky) je implementován BroadcastReceiver s nastaveným filtrem zprávy. Tímto způsobem například lze omezit počet komunikačních kanálů, které může aplikace využívat. Objekt BroadcastReceiver je nutné registrovat metodou registerReceiver a odregistrovat unregisterReceiver. private class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { … // Kontrola zda je kanál dostupný } }
53
Třída ChannelControlBinder Třída pro klientský přístup je potomkem třídy Binder, která obsahuje API pro ovládání ANT kanálu. Vytvořeno je zde rozhraní, které je využito pro komunikaci služby s vybranou aktivitou. public interface CallBackListener { public void downloadAcknowledgedData(byte[] data); // Stahování dat je kompletní public void downloadInfoData(int type, String message); // Zobrazení chybového stavu }
Třída ChannelEventCallback implementuje rozhraní typu IAntChannelEventHandler, které obsahuje metody pro příjem dat z ANT kanálu. public class ChannelEventCallback implements IAntChannelEventHandler { @Override public void onChannelDeath() { … // Odeslání chybového stavu } @Override public void onReceiveMessage(MessageFromAntType dataType, AntMessageParcel parcelData){ if (dataType.equals(MessageFromAntType.ACKNOWLEDGED_DATA)) { // Potvrzovaná data data = new AcknowledgedDataMessage(parcelData).getPayload(); myCallBackListener.downloadAcknowledgedData(data); // Odeslání přes rozhraní směrem k aktivitě
} } }
Metoda onChannelDeath infikuje, že je kanál nečinný. V metodě onReceiveMessage je porovnán příchozí typ zprávy s následným získáním datového obsahu. Data jsou následně předána přes CallBackListener připojené aktivitě.
54
Řídicí metody volané uživatelem z různých aktivit:
public void addChannel() – slouží k vytvoření komunikačního kanálu ANT (získán je objekt typu AntChannel, který obsahuje funkce z ANT protokolu) skrze ANT prostředníka. Kanálu je nastaveno rozhraní pro příjem dat a kanál je přiřazen.
public void openChannel() – otevírá požadovaný kanál s danými parametry.
public void closeChannel() – uzavírá daný komunikační kanál.
public void sendAcknowledgedData(byte[]) – slouží k odeslání všesměrových dat ze zvolené aktivity k otevřenému komunikačnímu kanálu.
public void registerCallbackListener(CallbackListener, Context) – zajišťuje registraci komunikačního interface pro příjem dat z ANT čipu pro zvolenou aktivitu.
public void unregisterCallbackListener() – odhlášení listeneru pro zvolenou aktivitu.
public void destroy() – zrušení kanálu z čipu ANT, je nutné opětovné přiřazení kanálu.
public void create(AntChannelProvider) – slouží k počáteční inicializaci třídy.
public void setChannelParams(ANTChannelParams) – nastavuje
jednotlivé
parametry komunikačnímu kanálu.
public void errorMessage(int, String) – odeslání chybového stavu.
public boolean channelIsAdd() – poskytuje informaci o stavu přiřazení kanálu.
public boolean channelIsOpen() – zpřístupňuje informaci, zda je kanál zavřen nebo otevřen.
55
7 Závěr Teoretická část bakalářské práce obsahuje stručný úvod do bezdrátové technologie ANT/ANT+. Tato technologie je rozebrána a porovnána s konkurenčními protokoly v technických parametrech. V hardwarové
části
je
představen
vývojový
kit
Arduino
Uno
a
modul
ANTAP281M4IB. Rozebrán je návrh interface desky pro připojení ANT modulu k Arduinu a rozebrání možností korekce logických úrovní. Vytvořená interface deska byla navržena s ohledem na možnosti využití dalších pinů pro připojení různých periferií. Využitá elektrická zařízení (svítivá dioda a senzory pro měření tlaku, teploty a vlhkosti) jsou v této kapitole také popsány. Prvotním záměrem bylo vytvořit multifunkční redukční desku, která by umožňovala korekci logických úrovní pomocí rezistorů nebo integrovaným převodníkem. V řešení s integrovaným převodníkem však docházelo k problémům při komunikaci, a proto bylo zvoleno řešení pouze s odporovým děličem. Softwarovým cílem bylo vytvoření ovládacího programu pro mikrokontrolér, který bude umožňovat svými funkcemi řídit komunikační modul AP2 – odesílat/přijímat data a ovládat připojená elektrická zařízení. Pro platformu Android byla implementována uživatelsky příjemná aplikace Intelligent_House, která umožňuje zasílat řídicí instrukce pro ovládání mikrokontroléru. V softwarové části jsem byl limitován funkcemi modulu AP2, který obsahuje jen málo využitelných ovládacích funkcí z celé palety ANT protokolu (primárně je určen pro vysílání dat). Framework pro mobilní aplikace Android je také značně omezen, zatím chybí podpora pro vytvoření vlastní zabezpečené (privátní) sítě a ANT-FS. I když celkový koncept není zatím tak propracovaný jako v případě Bluetooth, je tento způsob komunikace zajímavý a ve světě stále více oblíbený. Vyvinuté aplikace a konstrukce interface desky splnily stanovené cíle a jsou plně funkční pro další vývoj. Celkové řešení umožňuje sledování aktuální teploty, atmosférického tlaku a relativní vlhkosti vzduchu v místnosti.
56
Umožněna je i změna jasu osvětlení simulována pomocí LED. Aplikace obsahuje nápovědu, ve které je popsáno, jaké parametry musí být nastaveny pro spárování s Arduinem. V další fázi práce by bylo možné se zaměřit na zpracování spotřeby jednotlivých zařízení komunikačního uzlu (Arduino Uno + AP2) a efektivitu kódu ANT, kde se jedná o poměr mezi objemem odeslaných dat a objemem samotné zprávy. Přidány by mohly být další funkce, elektrická zařízení (např. pro ovládání oken a dveří), provedení kalibrace používaných senzorů a implementace opravného algoritmu v případě neúspěšného odeslání všesměrových dat. Pro zvýšení komfortu by mohla aplikace navíc zahrnovat funkci pro ovládání hlasem a podporu více jazyků (zatím pouze čeština). Vytvořena
by
mohla
s implementovanou
být
robustnější
komunikací
pomocí
síť,
založená
sdíleného
na
kanálu
protokolu místo
ANT,
jednotlivých
nezávislých kanálů, která by umožnovala řízení více zařízení současně (zapnutí/vypnutí zařízení nebo celé skupiny). Do budoucna přemýšlím nad tímto rozšířením, aby mobilní aplikace fungovala jako multifunkční ovladač celého domu.
57
Seznam použité literatury [1]
HISTORY ADVANCED CLUB SOLUTIONS. DYNASTREAM INNOVATIONS INC. DYNASTREAM INNOVATIONS [online]. 2014 [cit. 201401-11]. Dostupné z: http://www.dynastream.com/company/history
[2]
ISO/IEC 7498-1:1994(E). Information technology – Open Systems Interconnection – Basic Reference Model: The Basic Model. 2nd edition. 199408-15. Dostupné z:http://standards.iso.org/ittf/PubliclyAvailableStandards /s020269_ISO_IEC_7498-1_1994(E).zip
[3]
ANT+:ANT / ANT+ Defined: What is the difference between ANT and ANT+. DYNASTREAM INNOVATIONS INC. THIS IS ANT - the Wireless Sensor Network Solution [online]. 2014 [cit. 2014-01-11]. Dostupné z:http://www.thisisant.com/developer/ant-plus/ant-antplus-defined/
[4]
DYNASTREAM INNOVATIONS INC. AP2 RF Transceiver Module [online]. Rev 1.8. 2012 [cit. 2014-01-11]. Dostupné z:http://www.thisisant.com/resources/ant-ap2-transceiver-moduledatasheet/
[5]
NIKKEI BUSINESS PUBLICATIONS. Short-Range Communication: Bluetooth Low Energy and ANT [online]. 2011 [cit. 2014-02-07]. Dostupné z: http://techon.nikkeibp.co.jp/english/handbook/smartphone/46.html
[6]
JIN-SHYAN LEE, YU-WEI SU, AND CHUNG-CHOU SHEN. A Comparative Study of Wireless Protocols: Bluetooth, UWB, ZigBee, and Wi-Fi [online]. 2007 [cit. 2014-02-02]. Dostupné z:http://eee.guc.edu.eg/Announcements/ Comparaitive_Wireless_standards.pdf
58
[7]
Technical Information: About Bluetooth® Low Energy Technology. BLUETOOTH SIG, Inc. Bluetooth Technology Website[online]. 2014 [cit. 201408-08]. Dostupné z: http://www.bluetooth.com/Pages/low-energy-tech-info.aspx
[8]
DYNASTREAM INNOVATIONS INC. ANT Message Protocol and Usage [online]. Rev 5.0. 2013 [cit. 2014-08-11]. Dostupné z: http://www.thisisant.com/resources/ant-message-protocol-and-usage/
[9]
DYNASTREAM INNOVATIONS INC. ANT Channel Search and Background Scanning Channel [online]. Rev 2.1. 2009 [cit. 2014-08-10]. Dostupné z: http://www.thisisant.com/resources/an11-ant-channel-search-andbackground-scanning-channel/
[10] DYNASTREAM INNOVATIONS INC. Interfacing with ANT General Purpose Chipsets and Modules [online]. Rev 2.1. 2010 [cit. 2014-08-17]. Dostupné z: http://www.thisisant.com/resources/interfacing-with-ant-generalpurpose-chipsets-and-modules/ [11] ARDUINO. Arduino Uno [online]. 2010 [cit. 2014-02-02]. Dostupné z: http://arduino.cc/en/Main/arduinoBoardUno [12] ATMEL CORPORATION. 8-bit Microcontroller with 4/8/16/32K Bytes InSystem Programmable Flash: ATmega48PA ATmega88PA ATmega168PA ATmega328P [online]. Rev. 8161D–AVR–10/09. 2009 [cit. 2014-02-12]. Dostupné z:http://www.atmel.com/Images/doc8161.pdf [13] JOEMAN. The element14 Arduino CadSoft Library [Software]. 28.10.2013 [cit. 2014-01-02]. Dostupné z: http://www.element14.com/community/docs/DOC-64069/l/theelement14-arduino-cadsoft-library [14] BOSCH SENSORTEC. BMP085 Digital pressure senzor [online]. Rev. 1.2. 2009 [cit. 2015-05-20]. Dostupné z: http://media.digikey.com/pdf/ Data%20Sheets/Bosch/BMP085.pdf
59
[15] AOSONG ELECTRONICS. Digital-output relative humidity & temperature sensor/module DHT22 (DHT22 also named as AM2302) [online]. [cit. 2015-0518]. Dostupné z:https://www.sparkfun.com/datasheets/Sensors/ Temperature/DHT22.pdf [16] VIEIRA, Filipe. BMP085/I2C (Digital Pressure Sensor) library for Arduino [Software]. Rev 0.4. 2010 [cit. 2015-05-12]. Dostupné z: https://code.google.com/p/bmp085driver/ downloads/detail?name=bmp085v0.4.zip&can=2&q= [17] TILLAART, Rob. DHT Temperature & Humidity Sensor library for Arduino [Software]. VERSION 0.1.20. [cit. 2015-05-12]. Dostupné z: http://playground.arduino.cc/Main/DHTLib [18] ARDUINO. Arduino: Home [online]. 2014 [cit. 2014-08-15]. Dostupné z: www.arduino.cc [19] Android Developers [online]. 2014 [cit. 2014-08-12]. Dostupné z: http://developer.android.com/index.html [20] ALLEN, Grant. Android 4: průvodce programováním mobilních aplikací. 1. vyd. Brno: Computer Press, 2013, 656 s. ISBN 9788025137826. [21] ECLIPSE FOUNDATION. Eclipse [online]. 2014 [cit. 2014-08-15]. Dostupné z: www.eclipse.org [22] DYNASTREAM INNOVATIONS INC. Creating ANT Android Applications [online]. Rev 4.2.0. 2013 [cit. 2014-08-12]. ISBN D00001576. Dostupné z: http://www.thisisant.com/resources/android-ant-sdk-package/
60
Seznam obrázků Obrázek 1: Model ISO/OSI protokolu ANT................................................................... 12 Obrázek 2: Vzájemná kompatibilita mezi ANT+ a ANT ............................................... 13 Obrázek 3: Základní podporované topologie v ANT a ANT+ síti ................................. 13 Obrázek 4: Porovnání bezdrátových technologií [5] ...................................................... 15 Obrázek 5: Komunikace mezi dvěma uzly ANT ............................................................ 17 Obrázek 6: Proces vytváření komunikace mezi master a slave síťovým uzlem ............. 21 Obrázek 7: Standardní formát datové zprávy [ ]............................................................ 22 Obrázek : Vývojový kit Arduino Uno [11] ................................................................... 23 Obrázek 9: Modul ANT AP2 (ANTAP281M4IB) [4].................................................... 24 Obrázek 10: ANTUSB2 stick ......................................................................................... 25 Obrázek 11: Logické úrovně AP2 [4] a Arduina Uno [12] ............................................ 26 Obrázek 12: Klasické asynchronní propojení MCU s ANT modulem [10] ................... 27 Obrázek 13: Schéma kompletního řešení interface desky .............................................. 28 Obrázek 14: Výsledný realizovaný návrh interface desky s ANT modulem ................. 28 Obrázek 15: Zapojení jednotlivých periferií a výsledné řešení ...................................... 29 Obrázek 16: komunikace mezi mobilní aplikací a Arduinem + AP2 ............................. 30 Obrázek 17: Grafické vývojové prostředí Arduino IDE ................................................. 32 Obrázek 1 : Zjednodušený princip funkce řídicího programu ....................................... 32 Obrázek 19: Načítání prostředí Eclipse s nástroji pro vývoj Android aplikací .............. 41 Obrázek 20: Hierarchie aplikace..................................................................................... 42 Obrázek 21: Systémové a aplikační požadavky ............................................................. 42
61
Obrázek 22: SplashActivity obrazovka pro orientaci na výšku i na šířku ...................... 43 Obrázek 23: MainActivity obrazovka pro orientaci na výšku i na šířku ........................ 44 Obrázek 24: ControlActivity obrazovka pro orientaci na výšku i na šířku .................... 50
62
Seznam tabulek Tabulka 1: Typické parametry bezdrátových technologií ANT, BLE, ZigBee [6], [7] . 16 Tabulka 2: Režimy komunikace ..................................................................................... 18 Tabulka 3: Vysvětlení standardního datové zprávy ........................................................ 22 Tabulka 4: Popis jednotlivých pinů ANT modulu .......................................................... 25 Tabulka 5: Nastavení asynchronní rychlosti [10] ........................................................... 27
63
Seznam použitých zkratek LED – Light-Emitting Diode IEEE – Institute of Electrical and Electronics Engineers PAN – Personal Area Network WSN – Wireless Sensor Network ISO/OSI – International
Organization
for
Standardisation/Open
Systems
Interconnection P2P – Peer to Peer ANT-FS – ANT File Share ISM – Industrial, Scientific and Medical Band GFSK – Gaussian Frequency Shift Keying TDMA – Time Division Multiple Access AES – Advanced Encryption Standard CRC – Cyclic Redundancy Check Wi-Fi – Wireless Fidelity UWB – Ultra Wide-Band BLE – Bluetooth Low Energy BPSK – Binary Phase Shift Keying ASK – Amplitude Shift Keying O-QPSK – Offset Quadrature Phase Shift Keying FHSS – Frequency Hopping Spread Spectrum DSSS – Direct Sequence Spread Spectrum MCU – Micro Controller Unit 64
USB – Universal Serial Bus RX – Receive TX – Transmit RSSI – Received Signal Strength Indication I2C – Inter-Integrated Circuit IDE – Integrated Development Environment ADT – Android Development Tools Android SDK – Android Software Development Kit DDMS – Dalvik Debug Monitor Server AVD – Android Virtual Devices API – Application Programming Interface UI – User Interface
65
Přílohy (Obsah přiloženého CD)
Bakalářská práce ve formátu bakalarska_prace.pdf
Kompletní projekt Intelligent_House (včetně apk souboru pro instalaci do mobilního zařízení)
Zdrojový kód Arduino_Control včetně použitých knihoven
Schéma a návrh desky plošných spojů
66