Pojďme programovat elektroniku: Kouzelný kufřík BigClown

  • Dorazil nám červený kufřík BigClown
  • Český projekt nadchne nízkou spotřebou a bezdrátovou komunikací
  • Je to něco úplně jiného než Arduino

Na podzim jsem slíbil, že se v našem seriálu o programování elektroniky podíváme na stavebnici BigClown. Krátce před Vánocemi mi konečně dorazil červený kufřík plný modulů, a tak si to dnes vyzkoušíme.

BigClown je stavebnice, která budí emoce hned z několika důvodů. Tím prvním je samozřejmě skutečnost, že se jedná o unikátní český projekt s globálními ambicemi, který se zrodil pod křídly Jablotronu (dnes Hardwario), no a tím druhým pak to, že je to vedle prototypovacích desek, které můžete programovat v prostředí Arduino, naprosté zjevení.

Klepněte pro větší obrázek Klepněte pro větší obrázek Klepněte pro větší obrázek
Červený kufřík BigClown plný modulů

BigClown jde totiž opravdu vlastní cestou, což je v éře zmíněného Arduina, ze kterého se stal určitý standard, poměrně odvážné. Ale pěkně popořadě. O čem si tu dnes vlastně budeme povídat?

Armový bezdrátový „hamburger“

O stavebnici, ve které do sebe ve vrstvách zapojujete jednotlivé dostupné moduly, takže se u mnoha funkčních celků obejdete bez jakékoliv kabeláže. Je to vlastně stejný princip jako u nejrůznějších shieldů a hatů pro další stavebnice včetně Arduina a Raspberry Pi.

Jádrem podobné skládačky je vždy základní deska. Ve světě BigClownu se ji říká Core Module, svou velikostí se podobá třeba prototypovací desce NodeMCU a její mozek tvoří úsporný armový mikrokontroler STM32L083CZ (Cortex M0+) se 192kB úložištěm a 20 kB RAM. Na desku se vedle něj vešel ještě čip teploměru TMP112, trojosý akcelerometr LIS2DH12, RGB LED, kryptočip ATSHA204A a hlavně 868MHz vysílač SPIRIT1.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
Klíčový Core Module je mozkem každé stavebnice BigClown. Lze na něj připojovat další moduly z obou stran.

Když bychom měli pouze tuto základní destičku a nic jiného, můžeme s ní pracovat stejně jako s jakoukoliv jinou prototypovací deskou. Po obou stranách má řady dohromady s 18 piny GPIO, na kterých běží 3× UART, 2× I2C, 1× SPI, 5× analogový vstup a 2× analogový výstup. K desce bychom tedy kabeláží snadno připojili třeba nějaké čidlo a pomocí USB a textových nástrojů (toolchain) pro Windows, Linux a Mac OS přeložili a nahráli program, který bude číst hodnoty a vše vypisovat do počítače.

BigClown nenabízí vlastní editor zdrojového kódu a tedy kompletní IDE, jeho inženýři ale chystají návod, jak vše integrovat s těmi stávajícími – třeba s Atomem, KDevlop nebo VS Code.

Bezdrátový detektor pohybu na baterii

Jak jsem už napsal výše, BigClown není Arduino Uno, ale opravdu vertikální skládačka nejrůznějších modulů. Dejme tedy tomu, že bychom si chtěli postavit detektor pohybu, který nás bude informovat o narušení třeba přes internet.

V takovém případě využijeme právě to, co dělá BigClown BigClownem – jeho 868MHz bezdrátovou síť a důraz na co nejnižší spotřebu energie. Na rozdíl od ostatních prototypovacích stavebnic je totiž BC už od počátku navržen tak, abyste jej mohli dlouhodobě napájet třeba jen dvěma tužkovými bateriemi AAA. O to se elegantně postará Mini Battery Module, který zároveň umožňuje odečet napětí a tedy sledování stavu nabití článků.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
Mini Battery Module a společně s řídící jednotkou Core Module

Nízká spotřeba je opravdu unikátní a u mnoha modulů se počítá prakticky na mikroampéry, což je u Arduina a dalších stavebnic jen zbožné přání. Pokud se tedy bavíme o běhu na baterii, neznamená to, že na tu baterii poběží stavebnice den, ale mnohem, mnohem delší dobu. I to je jeden z důvodů, proč je jinak BigClown na první pohled mnohem dražší než ultralevné čínské destičky z eBaye a AliExpressu.

Do Core Module tedy zacvakneme bateriový modul a už nám zbývá pouze PIR Module – tedy pasivní infračervený detektor pohybu. Výsledkem bude malý blok, který stačí vložit do krabičky vyrobené třeba na 3D tiskárně a napsat program, který v případě zachycení pohybu odešle skrze rádiovou síť zprávu do centrály.

Klepněte pro větší obrázekKlepněte pro větší obrázek Klepněte pro větší obrázekKlepněte pro větší obrázek
PIR Module a „hamburger“ v celku: Řídící jednotka s vysílačem, zdroj energie a infračervený detektor pohybu. Stačí to položit kamkoliv v bytě.

Jelikož je veškerá elektronika BigClownu navržená s důrazem na co nejnižší spotřebu (proto na žádné desce nenajdete třeba LED, která permanentně svítí), krabičku nemusíte napájet skrze USB, ale díky dvěma alkalickým bateriím ji můžete položit kdekoliv v bytě s ideálním výhledem do míst, která má PIR s dosahem až 10 metrů vlastně sledovat.

Teď už stačí mít po ruce jen další Core Module, který bude sloužit jako základna a bude pomocí USB připojený třeba k Raspberry Pi, které poslouží jako brána do internetu. BigClown na toto myslí, takže prodává Core Module i ve formě zakrytovaného USB Dongle, který poté může sloužit jako pojítko mezi 868MHz sítí a internetem nebo třeba nějakou databázovou aplikací třeba zrovna na Raspberry Pi.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
Hlavní jednotka ve formě zakrytovaného USB Dongle, který může sloužit jako brána mezi 868MHz bezdrátovou sítí BigClownu a PC/internetem.

Když tedy krabička s detektorem v jedné místnosti zachytí pohyb, odešle zprávu do druhé jednotky a ta skrze internet, třeba službu IFTTT, odešle notifikaci přímo do mého mobilního telefonu. Heuréka!

A teď to oživím bez řádky vlastního kódu

Každý trošku pokročilejší bastlíř by si tento jednoduchý scénář samozřejmě naprogramoval sám podle dokumentace a tímto způsobem se naučil základy BigClownu jako takového, stavebnice nicméně nabízí ještě jednu cestu pro ty, kteří nenapíšou ani řádku kódu, případně chtějí podobný detektor postavit co nejrychleji, aby jej zapojili do nějakého již existujícího ekosystému.

Klepněte pro větší obrázek
Textové prostředí BigClown Toolchain pro Windows. Příkazem bcf list jsem si nechal vypsat seznam dostupných hotových firmwarů pro různé role, aniž bych je musel programovat.

V takovém případě stačí nahrát do jednotlivých jednotek už předem připravený firmware pro každou z rolí a krabičky poté budou s okolním světem komunikovat skrze BigClown Gateway, populární komunikační protokol MQTT a webové prostředí Node-RED pro flow-based návrh architektury pomocí skládání diagramu.

Klepněte pro větší obrázek
Grafické webové vývojové prostředí Node-RED, ve kterém jsem nejprve obě jednotky spároval. Spodní část diagramu pak plní roli podmínky: Pokud obdržím data z PIRu, vytvořím HTTP dotaz na službu IFTTT, které konečně pošle notifikaci do mého telefonu. V pravé části je panel se všemi MQTT zprávami z BigClowna. Vedle údajů z PIRu jednotka na baterii průběžně posílá i údaj o teplotě a také napětí v bateriích

Veškerý tento software můžete nainstalovat na Windows, Mac OS a Linux v rámci balíku Playground a BigClown nabízí i upravenou distribuci Raspbian pro Raspberry Pi, na které už bude vše předinstalované.

Stačí tedy do USB Donglu a naší skládačky s detektorem nahrát připravený firmware, poté USB Dongle připojit do Raspberry Pi, podle návodu na webu vše nastavit a nastartovat, a když pak projdete okolo PIRu, do mobilu s nainstalovaným klientem IFTTT vám dorazí zpráva.

Klepněte pro větší obrázek
Schéma celého zapojení a zpracování dat. Použil jsem tento příklad z webu stavebnice, kde najdete podrobný postup.

Stavebnici BigClown lze tedy oživit nízkoúrovňovou cestou, kdy si napíšete vlastní firmware od A do Z, jak jsme byli v našem seriálu doposud zvyklí, a budete tak mít naprostý přehled o tom, co se uvnitř děje, anebo bude stavebnice sloužit jako hotová elektronika, kdy se vůbec nemusíte starat o to, jak to v nitru funguje, protože vás zajímají jen výstupní data, která získáte třeba zrovna na Raspberry Pi v prostředí Node-Red a díky MQTT.

Klepněte pro větší obrázek
Prošel jsem okolo detektoru a za chvíli na mobil dorazila notifikace. To vše, aniž bych musel napsat jedinou řádku kódu. Jen jsem na Raspberry Pi rozjel zmíněné nástroje a do Core Modulu detektoru a brány nahrál firmware pro tento scénář.

Jak vlastně vypadá surový kód programu?

Přiznávám se bez mučení, že jsem fanoušek nízkoúrovňové cesty, a spíše než abych používal hotová řešení, jejichž studiem strávím snad ještě více času, raději si všechno vytvořím sám na míru.

Pokud v prostředí Arduino umíte programovat třeba základní Arduino Uno s čipem ATmega328p, velmi rychle zvládnete i populární Wi-Fi čip ESP8266. V obou případech se totiž bude kostra programu skládat z esenciálních funkcí setup a loop.

Stavebnice BigClown na to jde úplně jinak. S Arduinem má společný (částečně) jen programovací jazyk. Zatímco jeho čipy se programují v čistém C, Arduino používá místy lehce ořezané a objektově-orientované C++.

Klepněte pro větší obrázek Klepněte pro větší obrázek
Příkazem bcf create nazev jsem založil nový projekt. BigClown vytvoří jeho adresářovou strukturu, stáhne z GitHubu všechny knihovny a také hlavní soubory application.c a application.h s ukázkovým kódem, které už mohu upravovat v libovolném editoru.

Vše ostatní se liší včetně základního paradigmatu struktury programu. Namísto smyčky loop, která se opakuje stále dokola a tak rychle, jak to jen zvládne řídící čip, BigClown vsadil na událostně řízenou architekturu.

To v praxi znamená, že funkci setup sice nahradí analogická application_init, ve které se po startu vše nastaví, ale nenajdete tu žádný nekonečný loop. Takže namísto toho, abyste v loopu třeba stále dokola četli stav pinu, ke kterému je připojené tlačítko a podle toho pak určili, jestli je stisknuté, nebo není, hned na začátku stanovíte, co se má stát, když jej stisknete.

BigClown zároveň dokáže hromadu špinavé práce překrýt a to díky tomu, že jeho knihovny pamatují na všechny moduly stavebnice.

Zdrojový kód v C pro BigClown, který zapojí do hry modul s detektorem pohybu PIR a v případě detekce vypíše zprávu skrze USB do libovolného terminálu sériové linky, by tedy mohl vypadat třeba takto:

#include <application.h>

// Modul detektoru pohybu PIR
bc_module_pir_t pir;

// Tato funkce se zpracuje, pokud PIR zachyti pohyb
void detekce_pohybu(bc_module_pir_t *self, bc_module_pir_event_t event, void *event_param)
{
    (void) self;
    (void) event_param;

    // Pokud PIR zachytil pohyb
    if (event == BC_MODULE_PIR_EVENT_MOTION)
    {
        // Poslu skrze USB radek se zpravou o delce 13 znaku
        bc_usb_cdc_write("Zly zlodej!\r\n", 13);
    }
}

// Tato funkce se zpracuje hned po spusteni cipu
void application_init(void)
{
    // Nastartovani USB komunikace
    bc_usb_cdc_init();
    // Nastartovani detektoru PIR
    bc_module_pir_init(&pir);
    // Nastaveni detektoru pohybu na stredni citlivost
    bc_module_pir_set_sensitivity(&pir, BC_MODULE_PIR_SENSITIVITY_MEDIUM);
    // Nastaveni funkce, ktera se ma zavolat, pokud PIR zaznamena pohyb
    bc_module_pir_set_event_handler(&pir, detekce_pohybu, NULL);
}

Pro začátečníka odkojeného Arduinem, kde se pro zápis víceslovných výrazů používá styl CammelCase, tedy třeba mojeKrasnaFunkce, může být kód zpočátku hůře čitelný, BigClown totiž používá styl Snake case, kdy se jednotlivá slova oddělují podtržítkem: moje_krasna_funkce, takže zápis mnoha funkcí je docela dlouhý.

Ačkoliv má každý programovací jazyk určitý zažitý styl a ortodoxní fanoušci cammelu a snaku by si nejspíše dokázali šuplerami vypíchat oči, jedná se pouze o styl zápisu, takže vlastní kód samozřejmě můžete psát tak, jak se vám zlíbí.

Kód mohu v každém případě vytvořit v libovolném textovém editoru a pro překlad a nahrání programu do Core Module použiji terminál BigClown Toolchain a příkazy make a bcf flash -dfu.

Klepněte pro větší obrázekKlepněte pro větší obrázekKlepněte pro větší obrázek
PIR Module zacvaknutý do Core Module, překlad a nahrání programu pomocí textové konzole a konečně výstup USB CDC/sériové lince

Zdrojový kód je odlišný než na Arduinu, pokud jste však pravidelnými čtenáři našeho seriálu, jistě jej bez problému přečtete

Takto tedy v principu funguje BigClown. V příštím roce se podíváme, jak by vypadal mnohem zajímavější kód třeba zrovna s využitím rádiové komunikace.

Červenému kufříku jsme se věnovali i v Týdnu Živě:

Diskuze (12) | Spotify a Deezer tlačí na EU. Bojí se Applu a Googlu

Témata článku: Pojďme programovat elektroniku, Windows, Kód, C++, Linux, Programování, Atom, eBay, Mobilní telefon, Arduino, BigClown, USB, Baterie, Raspberry Pi, GitHub, Stavebnice, RGB LED, Řídící čip, Nejrůznější modul, Nízká spotřeba, Adresářová struktura, Jablotron, #include, Playground, Celé zapojení

Určitě si přečtěte


Aktuální číslo časopisu Computer

Zachraňte nefunkční Windows

Jak nakupovat a prodávat kryptoměny

Otestovali jsme konvertibilní notebooky

Velký test 14 herních myší