Rozsáhlejší projekty, kterými stavba robotů nebo elektronických přístrojů bezesporu jsou, obvykle vyžadují hlubší znalosti z elektroniky i programování. Dokonce i malé projekty, u nichž jste od počátku přesvědčeni, že vám nezaberou víc než pár hodin, se vám často pod rukama postupně změní v nepřehledný chumel drátů a součástek, které se rozpadají už při křivém pohledu, a stejně tak program naroste do obludných rozměrů, že se v něm ani sami nevyznáte, natož aby fungoval jak má, i když se jedná třeba jen o čtení a zobrazování dat z nějakých senzorů. V tomto článku představíme TotemBus, který může pomoci oba problémy vyřešit.
TotemBus je systém, navržený pro využití – jak už název napovídá – ke stavebnici Totem. Kromě Totemu ho však můžeme využít i jinde, není na tuto šikovnou stavebnici pevně vázaný, a proto se podíváme na jeho vlastnosti blíže.
Prvotní inspirací pro TotemBus byla idea převedení principu objektového programování do fyzického světa elektroniky.
Hned v prvním náčrtu koncepce si autoři stanovili následující podmínky. Systém musí být:
• jednoduše rozšiřitelný,
• kompatibilní se zařízeními současnými i těmi, které teprve svět spatří,
• snadno integrovatelný do systémů internetu věcí,
• snadno použitelný a uživatelsky přívětivý.
Autoři proto vyšli ze dvou osvědčených průmyslových řešení: na nízké úrovni komunikace zvolili přenos dat sběrnicí CAN a pro vysokoúrovňový přenos zpráv použili protokol MQTT (který jsme představili v předchozím článku).
Sběrnice CAN
Sběrnice CAN pracuje spolehlivě s velkým počtem uzlů na jedné sběrnici a dovoluje přenos dat vysokou rychlostí i na větší vzdálenosti. To vyřešilo rozšiřitelnost – v systému TotemBus je možné pospojovat jednotlivé moduly a komunikovat mezi nimi rychlostí až jednotek megabitů za sekundu. V běžném případě ale uživatel nepotřebuje tyto nízkoúrovňové detaily znát, a proto se ve zbytku článku budeme zabývat už jen vyššími vrstvami návrhu.
MQTT
MQTT je jeden z nejrozšířenějších průmyslových protokolů pro přenos dat mezi zařízeními. Používá se pro komunikaci mezi miliony různých senzorů, menších zařízení i počítačů. Pokud jste někdy nahlédli trochu hlouběji do světa Internetu věcí (IoT), zjistili jste nejspíš, že propojená zařízení spolu komunikují právě protokolem MQTT. Protokol MQTT se používá i pro transport dat do cloudů. A právě zásluhou tohoto protokolu je možno k jednotlivým zařízením, připojeným na sběrnici TotemBus, přistupovat jako k objektům.
Použití tohoto komunikačního protokolu zaručuje TotemBusu nejen robustnost, ale i kompatibilitu s budoucími zařízeními. Tím vám zjednoduší tvorbu prototypů i finálních zařízení.
Základní stavební prvky TotemBus
Systém TotemBus je složen ze dvou hlavních částí: Komunikační moduly (Baseboards) jsou propojeny sběrnicí a zajišťují síťovou komunikaci s vnějším světem pomocí protokolu MQTT. Výkonné moduly (Functionboards) jsou výměnné moduly, které se liší provedením; mohou pracovat jako vstupy / výstupy (GPIO), vstupy pro senzory, ovladače serv, stejnosměrných nebo krokových motorů a pod.
V současné době jsou k dispozici dva typy základních modulů, X2 a X3:
Komunikační modul X2
Desky X2 jsou základním stavebním blokem sběrnice – každá komunikační deska připojená na sběrnici funguje jako samostatný klient MQTT s vlastní sadou řídících funkcí (dle terminologie MQTT „témat“).
Komunikační modul X3
Základní deska X3 přidává k funkcím desky X2 ještě rozhraní Bluetooth, přes které můžete ovládat všechna zařízení na TotemBus bezdrátově z libovolného zařízení, vybaveného technologií Bluetooth (notebook, tablet nebo chytrý telefon).
Pro předávání zpráv můžete s výhodou použít aplikaci pro chytrý telefon (Totem pro Android, TotemMaker pro iOS).
Výkonné moduly
Výkonný nebo také funkční modul se připojuje ke komunikačnímu modulu a vykonává činnosti, ke kterým je určen (např. řídí motorek nebo čte data ze senzoru). Všechny výkonné moduly jsou plně kompatibilní s oběma typy komunikačních modulů. Kdykoli připojíte ke komunikačnímu modulu modul výkonný, sběrnice ho automaticky detekuje a začlení ho do systému. Vy pak jen pro něj vytvoříte nová pravidla chování.
Velkou výhodou je, že moduly můžete vyměňovat za běhu systému, takže odpadá nahrávání nového kódu, hledání chyb při kompilaci nebo zdlouhavé restartování.
Různé typy výkonných modulů
Jako první autoři systému TotemBus vydali moduly pro řízení motorků, v přípravě je řada dalších. Postupně, jak budou vycházet, budeme vás s nimi zde seznamovat.
Použití v praxi
Systém TotemBus je velice dobře použitelný tam, kde potřebujeme komunikovat s řadou různých malých modulů a nechceme se zabývat vývojem vlastní elektroniky ani programováním obsluhy modulů, senzorů, aktuátorů na nízké úrovni, ale chceme se raději soustředit na hlavní funkčnost.
Pro vytvoření celého systému potřebujeme řídící zařízení, což může být například smartphone, který dokáže komunikovat pomocí MQTT (například díky aplikaci Totem pro Android nebo TotemMaker pro iOS). Také to může být nějaký mikrokontroler v roli MQTT klienta (jak na to jsme ukázali v předchozím článku).
Do zařízení zapojíme jeden komunikační modul X3, ke kterému připojíme postupně potřebný počet komunikačních modulů X2. Moduly se propojují do série („daisy chain“). Ke každému komunikačnímu modulu můžeme připojit jeden funkční modul, který zajišťuje potřebnou funkci systému vzhledem k okolí, například něco měřit nebo ovládat motorek či servo.
Pak zbývají už jen dvě věci: připojit se ke komunikačnímu modulu „z dálky“ a vytvořit ovládací aplikaci.
Připojení je díky Bluetooth přímočaré. Při použití zmíněných aplikací to je uživatelsky velmi jednoduché – prostě vyhledáme dané zařízení a připojíme se k němu.
Druhou věc, kterou je potřeba udělat, je s takto propojeným zařízením komunikovat a řídit ho, aby vykonávalo požadovanou činnost. To je věc návrháře logiky aplikace či systému. V případě zmíněných aplikací pro smartphone to může znamenat jednoduché natahání ovládacích prvků po displeji a jejich přiřazení konkrétním funkcím výkonných modulů (tomu se budeme věnovat v některém z příštích článků). A samozřejmě je tu i možnost vytvořit si aplikaci vlastní, která bude používat pro řízení MQTT. Základní řešení jsme ukázali v minulém článku, ale také to je samozřejmě možné udělat i jinak, třeba jako součást výrazně větší aplikace. To už je ale mimo rozsah tohoto článku a ponecháme to laskavému čtenáři k vlastnímu vyřešení.
(Tento článek vznikl z původního příspěvku na blogu Totemu Přeložením, mírným doplněním a vyjasněním některých částí)