Hardwario Tower – rychlá ochutnávka

pebr0u mi poslal článek o vývojovém setu Hardwario Tower. Za článek děkuji.

Ze schránky vypadla obálka a v ní nová hračka. Na první pohled to vypadá jako stopadesátý klon Arduina – tentokrát s procesorem STM32.

Jenže omyl. Jedná se o prvky stavebnice HARDWARIO TOWER IoT Kit (dříve BigClown) – vpravo na obrázku je Core module a uprostřed je Barometer Tag a vlevo je kompatibilní WiFi modul s ESP8266 od chiptron.cz. A k tomu je potřeba říct základní informaci, kterou si z tohoto článku odnesete:

HARDWARIO TOWER není Arduino! Ano, vzhled desky láká to tak vnímat. Ale TOWER nejsou prototypové desky pro návrh ve stylu Arduina.

Čím se to liší?

HARDWARIO TOWER je modulová stavebnice, ze které můžete své IoT projekty sestavit – a přímo použít v provozu.

OK, ale takových stavebnic je plný Aliexpress. Kde je přínos třeba proti M5Stack?

První rozdíl je v tom, že celá stavebnice je vytvářená s ohledem na spotřebu. Když do sebe zacvaknete Core module, Battery module (nebo Mini battery module) a nějaké senzory, získáte zařízení, které na alkalické články AAA poběží rok či déle.

Druhý rozdíl je v tom, jak je řešena konektivita. Core module nemá energeticky náročné WiFi. Místo toho má vlastní úsporné rádio v pásmu 868 MHz, se šifrovaným provozem a bezpečnostním čipem pro ukládání šifrovacích klíčů. No a k čemu se takovým rádiem připojí? Buď k dalším Core modulům, nebo k bráně připojené na internet, což může být třeba Raspberry Pi se zapojeným Radio Dongle. Standardní implementace tedy vypadá tak, že k internetu je připojená jen brána s Radio Dongle a všechny Core moduly si povídají s ní.

Třetí rozdíl není na první pohled vidět, ale je nejdůležitější. Aby všechno fungovalo správně a spotřeba zařízení byla minimální, HARDWARIO TOWER má vlastní vývojový toolchain postavený výrazně odlišně, než jsme zvyklí z prostředí Arduina.

Když programujete mikrokontrolér “arduinovým” přístupem, máte procesor plně pod kontrolou a řešíte kompletní životní cyklus aplikace včetně správy napájení. Najdete knihovny pro všechna zařízení, která máte připojena – a naučíte se je používat, protože každá knihovna se ovládá trochu jinak. A pak píšete aplikaci: probudit periferie, načíst a zpracovat hodnoty, odeslat, nakonfigurovat režim spánku, uspat zařízení. A tak stále dokola.

Ve světě Hardwaria je tomu jinak.

Pokud programujete přímo mikrokontrolér, máte v SDK k dispozici kompletní knihovny na obsluhu všech běžných periferií. Všechny části knihoven se chovají konzistentně, programují se obdobným způsobem. Jednotlivé funkce jsou postavené odlišně, než se běžně dělá v arduino světě – všechny operace, kde to dává smysl, jsou asynchronní. Ke každému zařízení nastavíte callback, který je zavolán při získání hodnoty nebo když periferie nahlásí alert. Stejně tak píšete i jednotlivé funkce vaší aplikace – nastavíte, za jak dlouho se má která akce spustit. I interrupty se skryjí za callbacky a nemusíte je nijak řešit. Pokud vyvíjíte v JavaScriptu, budete se tady cítit jako doma.

Na rozdíl od běžného vývoje ve světě Arduina nemáte přístup k power managementu a neřídíte běžný běh aplikace. Jen reagujete na události tak, jak vám je SDK předává. Knihovny Hardwaria pak samy rozhodnou, kdy se vyplatí procesor či periferie uspat a na jakou dobu. Výsledkem je maximalizace výdrže na baterku.

Proč je zvýrazněno “pokud programujete přímo mikrokontrolér” – ono to jde i jinak?

Ano. Můžete samozřejmě v céčku naprogramovat přímo kód pro mikrokontrolér – v terminologii stavebnice TOWER jde o vytvoření firmware. Ale nemusíte.

Pro spoustu základních použití je již firmware připravený. Takže spojíte potřebné moduly, do Core Module nahrajete hotový firmware a “mobilní” část řešení je hotová. Výstupy jsou přes rádio předané do brány s Radio Dongle … a tam běží druhá polovina softwarového stacku, Hardwario Playground, což je MQTT server a Node-RED, ve kterém se jednoduše nakliká reakce na jednotlivé zprávy ze zařízení. Tak jednoduše, že Hardwario má přímo celou sekci hotových jednoduchých projektů pro výuku dětí. Bez programování.

Dobře, ale já bych chtěl programovat, ne klikat v GUI. Jak je to složité?

Tak si to předvedeme. Není to složité.

Programování firmware pro HARDWARIO TOWER

Instalace vývojového toolchainu je popsána zde a je jednoduchá:

– Nainstalujete si Visual Studio Code, které se používá jako editor

– Nainstalujete si Hardwario Toolchain. Hardwario Toolchain je sada commandline nástrojů a hlavně nakonfigurovaný shell se správnou konfigurací.

Vytvoření, sestavení a nahrání aplikace do Core Module jde také rychle:

– Vytvoříte si prázdný adresář.

– Spustíte shell Hardwario Toolchainu, přejdete do vytvořeného prázdného adresáře a napíšete
bcf create my_project

– Toolchain vytvoří adresář my_project a v něm nainicializuje nový projekt – vytvoří kostru aplikace a z GITu stáhne SDK.

– Přejdete do adresáře projektu a spustíte VS Code:
cd my_project

code .

– Ve VSCode upravíte aplikaci.

– Sestavení aplikace provedete pomocí Ctrl-Shift-B.

– Vzniklou aplikaci nahrajete do zařízení přes USB kabel příkazem
bcf flash

Visual Studio Code s aplikací a výstupem sestavení:

Nahrání aplikace do zařízení:

Na následujícím snímku je vidět struktura aplikace na disku. Vaše zdrojové soubory jsou v adresáři app, knihovny hardwaria jsou vloženy jako GIT submodul do adresáře sdk. Makefile je připraven už z toolchainu, není potřeba na něj sahat. Sestavená aplikace je v souboru firmware.bin.

Aplikace pro TOWER má dvě funkce – na první pohled podobné jako v Arduinu:

void application_init(void) je volána při startu aplikace,

void application_task(void) je základní akce aplikace. Nicméně nejde o ekvivalent loop() v Arduinu, protože není volána opakovaně, pokud si o to sama neřekne.

Pro začátek si zkusíme obsloužit akcelerometr vestavěný v Core Module. Ukázka předvede jak běžné periodické načítání hodnoty z periferie, tak zpracování alertů.

Dokumentace k akcelerometru je zde.

Nejprve si nadefinujeme objekt akcelerometru a objekt pro nastavení alarmu akcelerometru:
twr_lis2dh12_t a;

twr_lis2dh12_alarm_t alarm1;

Ve funkci application_init() nastavíme, že se chceme používat akcelerometr, chceme snímat hodnoty periodicky každých 10 sekund a chceme se okamžitě dozvědět o situaci, kdy zrychlení v ose X překročí 1.5 g.

Výstupy budeme posílat na sériový port.

void application_init(void)

{

     // nastaveni logovani na seriovy port

     twr_log_init(TWR_LOG_LEVEL_DUMP, TWR_LOG_TIMESTAMP_ABS);

     // zapneme I2C

     twr_i2c_init( TWR_I2C_I2C0, TWR_I2C_SPEED_400_KHZ );

     // nastaveni akcelerometru na I2C sbernici 0

     twr_lis2dh12_init(&a, TWR_I2C_I2C0, 0x19);

     // chceme dostat alarm v pripade zrychleni nad 1.5 g v ose X

     alarm1.x_high = true;

     alarm1.threshold = 1.5;

     twr_lis2dh12_set_alarm(&a, &alarm1);

     // pokud se neco stane, zavolá se funkce lis2_event_handler()

     twr_lis2dh12_set_event_handler(&a, lis2_event_handler, NULL);

     // a chceme dostat hodnotu jednou za 10 sekund

     twr_lis2dh12_set_update_interval(&a, 10000);

}

Sdílejte článek:

Související články

Všemi směry propíraný jednotný konektor do všech malých a středních výrobků je USB-C.

Mezi námi je spousta lidí, kteří věří.

Filament naKVADRAT ! Že netušíte, co to je? To je název nového filamentu vyrobeného speciálně pro pajenicko.

První prázdninový měsíc nám naložil pěknou řádku novinek.

Digital Discovery je nezbytným doplňkem, pokud jste používali Analog Discovery 2, ale rychlost vzorkování byla nedostatečná, počet dostupných digitálních kanálů příliš malý nebo šumy příliš velké pro přečtení dat přenášených většími rychlostmi.