BigClown: IoT jako modulární stavebnice

13. 7. 2016
Doba čtení: 8 minut

Sdílet

Ilustrační obrázek
Autor: Depositphotos – stori
Ilustrační obrázek
Po odbočení k MQTT se vraťme k představení hardwarové platformy BigClown. Tentokrát si posvítíme na jeho modulární koncepci, rozšiřitelnost a další vlastnosti s tím spojené.

Jak zaznělo už v prvním díle, BigClown není jen jedna deska, jeden program, jeden modul, ale celá stavebnice (či „modulární systém“ pro ty, kterým slovo stavebnice připadá nedůstojné dospělého člověka). Skládá se z různých komponent, které lze spolu spojovat do funkčních celků.

Core Module

Základní stavební modul je Core Module. Představili jsme si ho už v prvním díle našeho seriálu, tak jen stručně připomeňme: ARM procesor STM32L083CZ – low power, integrované USB, ROM bootloader, AES-128 a TRNG.

Autor:

Při pohledu na zapojení vývodů (pinout) objevíme, jaké možnosti připojení nabízí. V první řadě zaujmou dvě sběrnice I2C – jedna systémová (SDA#SYS, SCL#SYS) a jedna aplikační (SDA, SCL). Toto rozdělení má své důvody, ke kterým se za chvíli dostaneme. Dále nabízí sběrnici SPI (známé signály SCLK, MOSI, MISO, CS) a klasické sériové rozhraní UART (TX, RX). Aplikační I2C, SPI a UART mohou sloužit i jako obecné vstupně-výstupní signály (GPIO, označujeme je jako Pin, zkráceně Px), pokud by nestačilo deset dedikovaných pinů na druhé pinové liště. Šest z těchto pinů může být nastaveno jako analogové vstupy, případně dva analogové výstupy. Všechny signály s označením Px jsou připojené pouze do mikrokontroléru a nejsou sdílené s dalšími periferiemi na Core Module. Kromě těchto signálů je z modulu vyvedeno už jen napájení (VDD, GND), výstup z integrovaného stabilizátoru (VDD#USB) a signály RESET, BOOT, a INT (umožňuje probuzení mikrokontroléru z deep-sleep režimu).

Přímo na Core modulu jsou připojeny i některé periferie. Na systémové sběrnici I2C jsou připojené čipy ATSHA204A (úložiště sdílených tajemství, které implementuje SHA-256), teploměr TMP112 a tříosý akcelerometr LIS2DH12. Samostatnou periferií je modul pro radiovou komunikaci SPSGRF-868 – ten je připojen přímo na dedikované piny procesoru a jeho sběrnice SPI není sdílená s okolním světem.

Modul Core je takto samostatně schopen fungovat a posílat data buď přes rádio, nebo přes USB CDC rozhraní. Stačí pouze připojit baterii (jsou připravené plošky pro držák knoflíkové baterie CR2032) a máte hotové zařízení, které měří a posílá např. teplotu nebo je schopné detekovat manipulaci s modulem. Modul má v sobě připravený univerzální firmware, který si však můžete upravit, případně vytvořit zcela vlastní firmware.

Moduly a tagy

Modul (Module) je v naší terminologii definovaný rozmístěním pinů a signálů tak, jak bylo popsáno výše u Core Module. Ve formátu modulu jsou kromě Core Module i některé senzory, nebo různé adaptéry. Některé senzory jsou malé a jednoduché a bylo by zbytečné pro ně dělat celou velkou desku s mnoha piny. Pro takové jsme zvolili formát malé destičky 15 × 15 milimetrů s vyvedenou sběrnicí I2C, napájením a přerušovacím signálem, a těmto komponentám říkáme tagy.

Ačkoli Core Module může pracovat samostatně, je jasné, že nenabídne všechny funkce, jako kompletní sestava (například spojení s internetem). Proto má vyvedené výše zmíněné signály. Dalšími stavebními prvky celého systému jsou takzvané moduly a tagy.

CO2

Příkladem může být CO2 senzor, který měří, jak název napovídá, obsah oxidu uhličitého ve vzduchu. Tento senzor komunikuje prostřednictvím sériového rozhraní na pinech P2 a P3 a přes sběrnici I2C (kterou se řídí některé další funkce, jako zapnutí napájení pro senzor). Tento senzor pracuje na principu infračervené spektroskopie (NDIR) a dosahuje vysoké přesnosti při velmi nízkém provozním příkonu.

Autor:

Battery Module

Dalším modulem je Battery Module, který umožňuje připojit dva alkalické články AAA a napájet z nich celou sestavu (všechny moduly mají poměrně široký rozsah napájecího napětí 2,0 – 3,6 V). Kromě baterií nabízí i pájecí plošky pro připojení vlastních periferií (jsou na ně vyvedené téměř všechny signály Core Module), konektor pro připojení externích senzorů (dvoukanálový s volitelně otevřeným kolektorem) a NOR FLASH paměť AT45DB641 s kapacitou 8 MB.

Autor:

Další moduly

Ve vývoji či v prototypech jsou i další moduly: modul s displejem a rotačním enkodérem, modul pro komunikaci přes Sigfox nebo takzvaný Quad I/O module, který nabízí čtyři reléové výstupy, čtyři opticky oddělené vstupy, možnost externího napájení, a rovněž sadu periferií jako u bateriového modulu (Flash, externí senzory). Chystáme i PIR Module a takzvaný Maker Module, což je v podstatě prototypovací deska s některými zajímavými vlastnostmi – ochrana napájení, vývody v rozložení jako má Arduino, Grove konektory apod.

Ve formátu tagu máme k dispozici barometr MPL3115, vlhkoměr HTS221, luxmetr OPT3001, NFC čip NT3H2111 s anténou či teploměr TMP112. Ve vývoji či v prototypové fázi jsou tagy pro měření tlaku či time-of-flight.

Autor:

Tyto tagy lze samozřejmě připojit přímo ke Core Module, ale takové řešení je omezeno na jeden či dva tagy. Proto jsme navrhli a připravili takzvaný Tag Module, což je modul o trochu větší než Core Module, který má vyvedenou šestici konektorů, ke kterým se dají přímo připojit další tagy.

Autor:

Na jedné straně jsou tři konektory připojené na aplikační I2C označené jako #APP, na druhé jsou tři konektory připojené na systémovou I2C označené jako #SYS. Každý konektor obsahuje zem, napájecí napětí, SCL, SDA a INT. Všechny INT výstupy všech tagů jsou připojené na systémový interrupt, takže firmware může zachytit žádost o přerušení a adekvátně na ni zareagovat. Samozřejmostí je, že tyto moduly a tagy hodláme dodávat i ve variantě bez konektorů – jejich propojení pak necháme na vás. Dalším častým dotazem je, zda bude k dispozici krabička: ano, máme připravený koncept modulárních plastových dílů, z nichž si seskládáte kryt na míru svým potřebám. (A protože jsme open-source, tak budou k dispozici i modely pro 3D tisk.)

Řešení překryvu I2C adres

Na sběrnici I2C jsou jednotlivá zařízení, jak jistě víte, odlišena nejčastěji pomocí sedmibitové adresy (popřípadě desetibitové u některých zařízení). Každý výrobce se snaží využít takovou adresu, která není zabraná, aby snížil pravděpodobnost konfliktů na sběrnici. Ovšem při sedmibitovém rozsahu je jasné, že ke konfliktům docházet bude a najdou se dvě zařízení, které budou mít stejnou adresu. U některých často používaných zařízení je dokonce i pravděpodobné, že se bude vyskytovat víc takových zařízení na jedné sběrnici, a proto je možné nastavit adresu každého zařízení ručně, pomocí kombinace propojek. Třeba námi používaný teploměr může mít adresy 0×48, 0×49, 0×4a a 0×4b, v závislosti na tom, kam je připojen vstup A0 na teploměru.

Důvod, proč jsou použity dvě sběrnice I2C, je zřejmý: V případě, že budete připojovat více zařízení stejného typu, například zmíněných teploměrů, máte už v základu dvě možnosti: buď na systémovou, nebo na aplikační. U teploměru si můžete navíc pomocí propojek na tagu změnit adresu z 0×48 na 0×49. Máte tedy čtyři kombinace, kam teploměr připojit. (Ve skutečnosti jen tři, protože kombinaci SYS/0×49 využívá teploměr na Core Module.) Snažili jsme se tím trochu snížit pravděpodobnost, že bude nutné použít I2C expandér.

Autor:

Kompletní sestava

Pojďme se teď od detailů podívat na celek. Jak už zaznělo v prvním díle, BigClown nekončí tím, že si poskládáte zařízení z modulů a tagů. Snažíme se pokrýt i další části IoT systémů.

Autor:

Až do této chvíle jsme si popisovali část, kterou nazýváme Node – na obrázku úplně vlevo. Skládá se z Core modulE a z dalších volitelných částí – připojených modulů a tagů. Node dokáže komunikovat s okolím buď po USB, nebo pomocí rádia. (Samozřejmě dokáže komunikovat i jakkoli jinak, pomocí různých rozhraní, které si sami naprogramujete, ale nejčastější bude právě asi USB a rádio.) Pomocí USB si můžete data vyčítat třeba přes Raspberry Pi a dál si s nimi dělat, co chcete. Pokud ale budete mít nodů víc, je rozumné použít rádiové spojení a nějaký koncentrátor. K tomu slouží základnová stanice (USB Gateway), která přijímá data z jednotlivých nodů a předává je po USB do hubu. Komunikace je samozřejmě obousměrná, takže gateway i vysílá.

Hub je vlastně ta nejzásadnější součást celého systému. Technicky je to softwarová komponenta, která běží na počítači – v praxi počítáme s Raspberry Pi a Turris Omnia, ale může být i jiný. Jeho úkolem je komunikovat přes USB CDC s gateway a převádět komunikaci z protokolu Red Nose (který jsme vyvinuli pro jednodušší komunikaci s nody – v zásadě jde o serializované MQTT) na protokol MQTT a zpět.

Další součástí tohoto systému jsou takzvané Hub Packy – technicky se jedná o jakékoli spustitelné programy, které běží jako daemon / služba a komunikují po MQTT. Hub Pack může sloužit třeba k logování provozu, nebo například k implementaci automatizační logiky. Hub Pack si můžete napsat v čemkoli, od Pythonu a JavaScriptu po C.

Linuxový počítač s hubem rovněž obsahuje MQTT broker a web server, pomocí kterého může celý systém komunikovat se světem. Přes MQTT / TLS nebo HTTPS REST můžete zařízení připojit k cloudovým aplikacím, zabudovaný web server může nabídnout i vlastní webové rozhraní či MQTT over WebSocket, může se k němu připojovat třeba mobilní aplikace… I integrace se službami, které využívají vlastní protokol (např. Blynk), je snadná.

Autor:

Gateway má v celém systému rovněž funkci jakéhosi centrálního bodu, s nímž se jednotlivé nody párují při prvotním nastavení. K tomu slouží už několikrát zmíněné NFC. Pomocí NFC si gateway a node domluví důležité informace, totiž hardwarovou konfiguraci nodu a sdílené tajemství („klíče“) pro šifrování a autentizaci. Podrobněji si celý bezpečnostní koncept probereme v dalším pokračování.

Systém je, jak už bylo několikrát zmíněno, modulární, a snažili jsme se, aby jednotlivé komponenty byly, pokud možno, použitelné i samostatně. To znamená, že node může fungovat jako sběrač dat u libovolného počítače, a obejdete se bez rádia. Nebo můžete použít rádiový přenos a gateway, a s tou komunikovat po sériovém portu (implementuje USB CDC) z libovolného počítače, aniž byste používali hub či MQTT. Zkrátka variabilitě se meze nekladou.

Programování

Zmínil jsem “přeprogramování firmware”. Jak to je s BigClown v tomto ohledu?

Naším cílem je, aby vstupní práh byl co nejnižší. Proto budou naše Core moduly už z výroby naprogramované generickým firmware, jehož jediným úkolem a jedinou funkcí bude komunikovat s připojenými moduly a tagy a předávat data po USB. Pokud tedy připojíte nějakou sadu modulů a tagů a zapnete vše k napájení, dostanete během pár sekund první data, aniž byste museli cokoli programovat. Snažíme se, aby firmware byl natolik komplexní a chytrý, aby pokryl nejčastější scénáře použití.

Školení Kubernetes

No a samozřejmě zůstává vždy možnost napsat si firmware vlastní, nebo upravit náš, přeložit si ho pomocí oblíbeného nástroje (my používáme GCC ARM) a nahrát výsledný .elf do Core modulu jako do jakékoli jiné vývojové desky, buď přes USB, nebo přes programátor, například Segger J-Link.

Pokud chcete vidět BigClown na vlastní oči a dozvědět se i něco o propojení BigClown s cloudem nebo o bezpečnosti Internetu věcí, jste srdečně zváni na představení 9. srpna.

Autor článku

Martin Malý je autorem serveru Bloguje, mikroblogu Teidu či služby pro zkracování odkazů Jdem.cz. Vedl také magazín Zdroják.