Protokol DPA
Protokol Direct Peripheral Access (DPA) je jednoduchý, bajtově orientovaný protokol používaný k řízení služeb a periferií zařízení IQMESH sítě (koordinátor a nody) pomocí rozhraní SPI nebo UART. Implementace protokolu DPA je distribuována ve formě plug-inů IQRF.
Protokol DPA používá ke komunikaci v síti IQMESH strukturované bajtové zprávy. Každá zpráva vždy obsahuje čtyři povinné parametry NADR, PNUM, PCMD a HWPID. Zpráva může volitelně obsahovat další data (pole bajtů označované jako PDATA).
NADR je síťová adresa, kterou získalo zařízení během procesu bondování (přidání) do sítě. Uvedená adresa je adresa cílového zařízení, které má daný příkaz zpracovat. Koordinátor má adresu 0, nody pak adresu 1–239. Další adresy jsou pak rezervované, lokální, dočasné nebo broadcast.
PNUM je číslo periferie, se kterou budete chtít komunikovat. Mohou to být například různé typy pamětí, UART, SPI, IO piny, indikační LED, teploměr, případně jiné či uživatelské periferie. Hodnoty 0×00–0×1F jsou rezervované pro „embedded“ periferie, 0×40–0×7F pro standardizované periferie IQRF.
PCMD je příkaz, který přísluší zvolené periferii a který má být vykonán. Jeho povolené hodnoty závisí na zvolené periferii. U periferie LEDR můžete pomocí příkazu červenou LED například zapnout, vypnout, bliknout s ní nebo vyvolat opakované blikání.
HWPID slouží jako filtr. Jedinečně specifikuje funkčnost zařízení, jeho implementované uživatelské periferie, jeho chování atd. Pouze zařízení, které má stejné HWPID jako je uvedeno v DPA příkazu, bude na příkaz reagovat. Pokud je zadáno 0×FFFF, pak všechna zařízení s jakýmkoli HWPID zadaný příkaz vykonají. V posledních dvou letech dochází k certifikaci unikátních HWPID, podle kterých lze dané zařízení identifikovat v IQRF repozitáři. Podle něj lze pak v repozitáři dohledat informace o zařízení, jeho ovladače a další užitečné funkce. Certifikaci provádí pro své členy IQRF Alliance.
PDATA je pole obsahující volitelně až 56 bajtů dat.
Zjištění teploty
Využijeme toho, že transceivery IQRF jsou (většinou, závisí na volbě typu transceiveru) vybaveny teplotním čidlem a pomocí příkazu zjistíme, jakou teplotu na nodech naměříme.
V prvním příkladu se na teplotu zeptáme nodu č.1.
V IQRF IDE nastavíme v políčku NADR adresu nodu č.1, v seznamu periferií vybereme pomocí kontextového menu Thermometer (odpovídá hexadecimální hodnotě PNUM=0×0A), a jako příkaz vybereme z kontextového menu u PCMD položku Get temperature (odpovídá hexadecimální hodnotě PCMD=0×00). V HWPID necháme hodnotu 0×FFFF (bez filtrace typu hardwaru). Tlačítkem Send příkaz odešleme.
V okně Terminal Log je vidět probíhající komunikace. První paket odpovídá odeslanému požadavku, druhý paket je potvrzení o převzetí zprávy koordinátorem a třetí paket je odpověď od nodu č.1. Pro zjištění obsažených detailů stačí dvakrát myší klepnout na zvolený paket a v okně Packet Inspector uvidíme detaily. V našem případě je vidět naměřená teplota 30°C.
Více můžete vidět ve video tutoriálu:
Stejným způsobem se můžeme dotázat na teplotu nodu č.2.
Protože se jedná o stejný typ informace (sběr teploty), můžeme využít unikátní funkci IQRF – příkaz Fast Response Command. Tím lze získat z celé sítě všechny informace najednou. Více si o směrování v síti IQRF a o příkazu FRC řekneme v příští kapitole.
Jelikož se jedná o periferii koordinátoru, zvolíme v políčku NADR adresu koordinátoru – 0.
V políčku PNUM zvolíme periferii FRC (odpovídá hodnotě PNUM=0×0D), PCMD nastavíme na příkaz Send (odpovídá hodnotě PCMD=0×00), do PDATA vložíme příkaz 0×80.00.00 (specifikuje dotaz na získání 1bajtové teploty) a bez filtrace hardwaru odešleme do sítě.
V příchozím paketu najdeme 1bajtovou teplotu ze všech zařízení v naší malé síti.
Na průběh vytvoření paketu a získání teplot pomocí FRC se můžete podívat ve video tutoriálu.
Indikace pomocí LED
V některých případech je potřeba lokalizovat dané zařízení. K tomu lze využít indikační LED přítomné na transceiveru IQRF. Ukážeme si, jak na nodu č.2 rozsvítíme, zhasneme, blikneme a opakovaně blikáme červenou LED.
NADR nastavíme na adresu nodu č.2, v PNUM vybereme periferii LEDR (odpovídá hodnotě PNUM=0×06) a v poli PCMD postupně vybereme Set on, Set off, Pulse a Flashing (odpovídá postupně hodnotám PCMD=0×01, 00, 03 a 04). Vždy příkaz pošleme a pozorujeme světelný projev na nodu č.2.
Pozn.: Pokud jste vytvořili nody s využitím STD plug-inů, pak v případě rozsvícení LED trvale svítí, v případě Flashing LED opakovaně bliká. Pokud jste vytvořili nody s využitím LP plug-inů (což se v případě bateriových zařízení doporučuje), pak je třeba počítat s tím, že nody pracují v úsporném režimu, a tudíž nelze očekávat, že bude LED trvale svítit či opakovaně blikat.
Video s ukázkou LED indikace:
V příštím díle si vysvětlíme, jak přesně probíhá směrování v síti IQRF a jak funguje příkaz FRC (Fast Response Command).
Další informace
- Web technologie www.iqrf.org
- Video tutoriál zabývající ovládáním sítě IQRF
- Video tutoriál týkající se směrování v síti IQRF a příkazu FRC