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.
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.
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.
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.
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.
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.
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ů.
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á.
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í.
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.