Problem Set #1: TH Sensor
alebo chytrý senzor na meranie teploty a vlhkosti
Ciele
- Naučiť sa pracovať s prototypovacou doskou RPi Pico 2 WH
- Naučiť sa programovať v jazyku MicroPython
- Osvojiť si SOLID princípy pri navrhovaní a programovaní mikrokontroléra
- Naučiť sa opísať správanie chytrého zariadenia pomocou stavového stroja
- Naučiť sa ukladať citlivé údaje šifrovane
Chytré zariadenia
Chytré zariadenia, či už senzory alebo akčné členy, sú koncové zariadenia každej IoT infraštruktúry. Jeden typ zariadení je zdrojom údajov (senzory) a druhý typ zariadení je možné na diaľku ovládať pomocou príkazov (akčné členy). Najčastejšie však ide o kombináciu oboch typov - aj senzory dostávajú príkazy (napr. na zmenu nastavení) a rovnako tak aj akčné členy posielajú informácie o svojom stave.
Vašou úlohou je vytvoriť chytré zariadenie v jazyku MicroPython, ktoré bude:
- v pravidelných časoch odosielať namerané údaje,
- vedieť prijímať zmeny konfigurácie na diaľku,
- vedieť byť ovládané na diaľku,
- obsahovať webové rozhranie na zmenu nastavení,
- byť reprezentované ako stavový stroj,
- komunikovať pomocou protokolu MQTT,
- dbať na bezpečnosť,
- byť napájané z batérie,
- byť šetrné k zdrojom.
Zoznam komponentov
Chytré zariadenie sa bude skladať z týchto komponentov:
- prototypovacia doska RPi Pico 2 WH
- senzor teploty a vlhkosti DHT11/22
- hodinový modul DS3231
- tlačidlo na prebudenie zariadenia, vstup do konfigurácie a obnovenie továrenských nastavení (krátke a dlhé stlačenie)
- stavová LED dióda NeoPixel (RGB) na signalizáciu aktuálneho stavu zariadenia
Poznámka
Tlačidlo a NeoPixel sú súčasťou rozširujúcich dosiek Robo Pico a Maker Pi Pico Base, takže ich nie je potrebné zapájať samostatne.
Pre komplexnejší prehľad jednotlivých komponentov sa pozrite na stránku RPi Pico Kit.
Diagram stavov zariadenia
Správanie celého chytrého zariadenia bude reprezentované pomocou stavového stroja. Diagram stavov sa nachádza na nasledujúcom obrázku:
Význam jednotlivých stavov je nasledovný:
Init- Vstupný stav, do ktorého sa zariadenie dostane po stlačení tlačidla alebo po alarme z hodinového modulu (RTC). Overí sa prítomnosť a platnosť súboru/data/settings.jsona podľa toho, ako bolo zariadenie prebudené, sa rozhodne o ďalšom postupe: krátke stlačenie tlačidla otvoríConfiguration, dlhé stlačenie spustíFactory Reset. Ak nastavenia chýbajú alebo sú poškodené, prejde sa doConfiguration. V ostatných prípadoch (bežné prebudenie z RTC alarmu) sa pokračuje stavomMeasurement.Configuration- Zariadenie sa sprístupní používateľovi na zmenu nastavení prostredníctvom webového rozhrania (pozri Webové rozhranie). Používateľ tu zadá najmä parametre Wi-Fi siete a pripojenia k MQTT brokerovi.Commissioning- Uvedenie zariadenia do prevádzky. Nastavenia zadané v predchádzajúcom stave sa overia a uložia do/data/settings.json(citlivé údaje šifrovane). Ak niektorá z týchto operácií zlyhá, zariadenie sa vráti späť do stavuConfiguration, aby ich používateľ mohol opraviť. Po úspešnom dokončení sa zariadenie ukončí a pri ďalšom prebudení začne znova v staveInit.Measurement- Odčítanie teploty a vlhkosti zo senzora DHT11/22 spolu s časovou značkou z hodinového modulu DS3231. Namerané hodnoty sa uložia do lokálnej pamäte. Kým počet uložených meraní nedosiahne hodnotubatch size, zariadenie prejde rovno do stavuSleepa šetrí energiu. Po dosiahnutí tejto hodnoty sa pokračuje stavomConnect Network, aby sa dáta odoslali naraz. Ak sa meranie nepodarí, prechádza sa do stavuError.Connect Network- Pripojenie k Wi-Fi sieti podľa nastavení. Keďže ide o energeticky najnáročnejšiu činnosť, vykonáva sa iba vtedy, keď je čo odosielať. Pri neúspechu (sieť nie je dostupná, nesprávne prihlasovacie údaje, vypršanie časového limitu) sa prechádza do stavuError.Publish Data- Pripojenie k MQTT brokerovi, odoslanie nazbieraných meraní do témydataa aktualizácia stavu zariadenia v témestatus(pozri Podpora MQTT protokolu). Po úspešnom odoslaní sa uložené merania vymažú a pokračuje sa stavomOTA. Pri chybe sa prechádza do stavuError.OTA- Zmeny zariadenia na diaľku (over-the-air). Keďže je zariadenie už pripojené k sieti a k MQTT brokerovi, je to vhodný okamih na spracovanie všetkého, čo sa mu za čas spánku nazbieralo. Zariadenie tu spracuje správy z témset(zmena nastavení, teda aj konfigurácie zariadenia) acmd(príkazy na vzdialené ovládanie) a prípadne stiahne novú verziu firmvéru. Keďže sú tieto správy odoslané s príznakomretain, zariadenie ich dostane hneď po prihlásení na odber, aj keď boli odoslané v čase, keď spalo (pozri MQTT témy). Po spracovaní každej takejto správy ju zariadenie vymaže z brokera - publikuje do rovnakej témy prázdnu správu s príznakomretain- aby ju nespracovalo znova pri ďalšom prebudení. Po skončení sa zariadenie uspí v staveSleep, pri chybe prechádza do stavuError.Error- Spracovanie chýb, ktoré vznikli počas merania, pripájania alebo odosielania. Chyba sa zaznamená (napr. do logu a do témystatus, ak je to možné) a zariadenie prejde do stavuSleep, aby sa pri ďalšom prebudení pokúsilo o nový cyklus. Zariadenie sa tak nikdy nezasekne v cykle opakovaných pokusov, ktorý by vybil batériu.Sleep- Koncový stav pravidelného cyklu. Zariadenie nastaví ďalší alarm na hodinovom module a prejde do úsporného režimu (deep sleep). Prebudí ho až RTC alarm alebo stlačenie tlačidla, čím sa celý cyklus začne znova stavomInit.Service Terminal- Servisný režim určený pre vývojára a údržbu. Sprístupní terminál na priame ovládanie zariadenia a ladenie, bez spustenia bežného cyklu merania a odosielania. Po jeho ukončení sa zariadenie zastaví.Factory Reset- Návrat do továrenského nastavenia. Vymažú sa všetky nastavenia a uložené údaje vrátane šifrovaných prihlasovacích údajov, takže pri ďalšom spustení zariadenie nenájde platnýsettings.jsona začne stavomConfiguration. Po dokončení sa zariadenie zastaví.
Podpora MQTT protokolu
Keďže je infraštruktúra Smart Department založená na komunikačnom protokole MQTT, aj naše chytré zariadenie bude komunikovať práve pomocou tohto protokolu. Samotná komunikácia však bude mať niekoľko pravidiel.
Konfigurácia
Pri konfigurácii vlastností protokolu MQTT zariadenia nás budú zaujímať nasledujúce vlastnosti:
- adresa brokera
- port brokera
- podpora SSL/TLS
- prefix témy
- prihlasovacie údaje (prípadne certifikát pre overenie identity)
Všetky vlastnosti budú dostupné v skupine s názvom mqtt
v súbore s nastaveniami /data/settings.json.
MQTT témy
Aby vaše chytré zariadenie vedelo komunikovať v infraštruktúre Smart Department pomocou protokolu MQTT, je potrebné komunikovať pomocou konkrétnych tém. Štruktúra každej témy je záväzná a vyzerá takto:
<prefix>/<type>/<id>/<operation>
Význam jednotlivých častí je nasledovný:
<prefix>- Zariadenie chceme vytvoriť univerzálne, aby vedelo komunikovať aj mimo infraštruktúry Smart Department. To zabezpečuje práve tento prefix. V infraštruktúre Smart Department identifikuje umiestnenie zariadenia (buď v konkrétnom laboratóriu, napr.kpi/caprica, alebo v konkrétnej domácnosti, napr.household/ab123cd). Dôležité je, že sa tento prefix použije pred každou témou.<type>- Typ zariadenia, napr.thsensorpre naše chytré zariadenie.<id>- Identifikátor zariadenia. Ak nejde o špeciálne označené zariadenie (napr. predné/zadné dvere), používajte svoj študentský identifikátor v tvareab123cd.<operation>- Definuje typ operácie. Pre naše zariadenie ide o tieto možnosti:status- stav zariadenia; správa bude mať príznakretaindata- namerané dátaset- zmena nastavení zariadenia; správa bude mať príznakretain, zariadenie ju po spracovaní vymaže z brokeracmd- príkaz na vzdialené ovládanie; správa bude mať príznakretain, zariadenie ju po spracovaní vymaže z brokera
Webové rozhranie
Kostra projektu
Aktuálnu kostru projektu si môžete stiahnuť z tejto linky: 2026.2
Upozornenie
V prípade opravy existujúceho kódu alebo pridania nových vlastností, sa môže kostra projektu počas semestra zmeniť. Preto si ju nezabudnite v prípade vydania novej verzie aktualizovať vo svojom projekte.