Čo ma naučilo IoT

Júl 2020

Medzi moje koníčky patrí aj IoT. Predovštekým som sa pomocou neho chcel zlepšiť v C/C++ a vyskúšať si iné programovanie, ako bežne robím v práci. Je iné mať k dispozícii 8GB a iné 80KB RAM.

Pôvodne som rozmýšľal o tom zadovážiť si Raspberry Pi a vyrobiť si meteostanicu, ale odradili ma veci ako absencia obvod reálneho času, komplikovanejšie pripojenie snímačov, SD karta (radi odchádzajú kvôli zápisom Linuxu). Ale náhodou som narazil na vývojovú sadu ESP-201 osadenú modulom ESP8266.

S ESP8266 sa začínalo ľahko, najskôr v Arduino IDE (rozhodne to nie je IDE), neskôr vo Visual Studiu s pluginom pre vývoj jedno-čipových dosiek. To mi umožňovalo použiť C++11 a tým sa starosti zo správou pamäte stali minulosťou (uniq_ptr).

ESP2866

Nakoniec sa mi podarilo meteostanicu vytvoriť. ESP8266 zbieralo dáta každých 5 minút a raz za pol hodinu sa pripojilo na WiFi, pomocou protokolu MQTT odoslalo údaje na Azure IoT Hub, kde ich jedna Azure Function uložila do Blob Storage. Ďalšia Azure funkcia mi fungovala ako minimalistická stránka s REST API.

O asi dva roky sa mi dostala do rúk vývojová doska Avnet MT3620 Starter KitAzure Sphere. Azure Sphere je systém na čipe vyvinutý Microsoftom pre moderné IoT aplikácie a snaží sa pomôcť riešiť ich najpálčivejšie problémy. Po technickej stránke obsahuje jadro ARM Cortex-A7 a dve jadrá Cortex-M4. No hlavný rozdiel s pohľadu vývoja je, že Azure Sphere je pripravený pre priemyselné použitie.

Avnet MT3620 Starter Kit

Na Azure Sphere je možné požiť dva procesory, jeden klasický, na ktorom beží malý Linux a druhý pre realtime proces (ak chceme využiť realtime proccesor, tak sa nasadzujúd dva programy - jeden bežiaci pod OS na jednom procesore a druhý pre realtime procesor, tieto programi môžu kominukovať pomocou zasielania správ). Samozrejmosťou je aj vyriešená podpora aktualizácií, certificate pinning,… No najviac ma zaujalo, že s aplikáciou sa nasazduje manifest, ktorý funguje ako firewall – definujú sa na ňom, na aké domény môže doska pristupovať, ktoré hardvérové piny idú na čo použiť,… To celé posúva bezpečnosť tejto dosky niekde úplne inde, ako je v IoT zvykom.

Azure Sphere
(Zdroj: https://docs.microsoft.com/en-us/azure-sphere/product-overview/what-is-azure-sphere)

Čo ma naučilo IoT?

Iné programovanie

Programovaním IoT zariadení sa človek dostáva do úplne iného sveta ako pri programovaní backendu. Zrazu musí šetriť pamäť a počíta každý bajt a to nie len počas behu programu v RAM, ale aj pri prenose (SigFox, Lora). Niekedy treba šetriť aj batériu.

Zaujímavou skúsenosťou je programovanie na niečo, čo nemá operačný systém. Ďalšími aspektami sú hardvérové prerušenia, globálne premenné vynútené API, obtiažne logovanie,…

Neveriť knižniciam

Počas experimentovania s metostanicou som potreboval pre ESP8266 rôzne knižnice pre protokoly, senzory a mnoho z nich malo chyby a plno z nich chýbali akékoľvek náznaky zabezpečenia.

Keďže to „I“ v IoT je internet, tak bezpečnosť by mala hrať adekvátnu rolu.

V jednom prípade šlo o MQTT knižnicu, ktorá trpela buffer owerflow zraniteľnosťou. (Ak niekoho napadne, že v jeho obľúbenom jazyku by sa to nestalo, tak treba vedieť, že pri malej RAM by sa z buffer owerflow stala DoS zraniteľnosť.)

Arduino je na vzdelávanie

ArduinoRaspberry Pi boli vymyslené na vzdelávanie a hranie sa, nie je dobre ich používať na seriózne veci. Na sériovú výrobu sa nehodia, Razzbery Pi používa SD-kartu, ktorá rada odchádza,…

Tieto „hračky“ sa naozaj hodia na vzdelávanie a prototypovanie, no pre priemyselné použitie a domácu automatizáciu odporúčam použiť veci na to určené (kludne aj Azure Sphere, ten bol konštruovaný pre priemysel a používa ho napríklad Starbucks).

Záver

Vďaka IoT som si vyskúšal iný pohľad na programovanie. Najmä človeka teší, že to čo vytvoril má nejakú fyzickú podobu, reaguje to v skutočnom svete a dá sa to chytiť do ruky.