Nízka spotreba

softvérové a hardvérové prerušenia, zníženie pracovnej frekvencie, režimy spánku a prebudenie sa zo spánku

Motivácia

Jednou z výziev, ktorú prinieslo IoT, je aj nízka spotreba zariadení. A práve o zníženie spotreby nášho zariadenia sa pokúsime počas tohto cvičenia.

Postup

Zníženie spotreby znížením frekvencie

Prvý spôsob, ktorý použijeme na zníženie spotreby mikrokontroléra, je zníženie jeho pracovnej frekvencie. Zmenu tohto nastavenia umiestnime do súboru boot.py, ktorý sa spustí ako prvý po zapnutí mikrokontroléra. Nie je to totiž nastavenie, ktoré sa týka funkcionality programu, ale správania celého mikrokontroléra.

Pracovnú frekvenciu mikrokontroléra je možné zavolaním funkcie freq(), ktorá sa nachádza v module machine.

Task

V module boot.py nastavte pracovnú frekvenciu mikrokontroléra na hodnotu 50MHz.

Task

Overte správnosť svojej implementácie.

Správnosť môžete overiť napr. tak, že po nastavení frekvencie ju vypíšete do terminálu ešte v súbore boot.py.

Uspatie zariadenia

Chytrý senzor, ktorý vytvárame, bude merať vlhkosť a teplotu v pravidelných intervaloch. Interval merania môže byť v jednotkách, ale aj v desiatkach minút. Medzitým však zariadenie nebude robiť nič. Preto ho medzi jednotlivými meraniami uvedieme do režimu spánku.

Task

V stave Sleep uveďte zariadenie do hlbokého spánku podľa nastavenia interval v konfigurácii.

Task

Overte svoju implementáciu.

Po zobudení sa zariadenie reštartuje. Správanie môžete overiť napr. zmenou intervalu pomocou prokolu MQTT.

Prebudenie zariadenia z režimu spánku

Nie vždy však budeme chcieť čakať až na moment, keď sa zariadenie zobudí samo. Keďže je naše zariadenie vybavené tlačidlom, tak zabezpečíme, že po jeho stlačení sa zariadenie prebudí a reštartuje. Tým pádom ho budeme vedieť zobudiť predčasne kedykoľvek, keď to bude potrebné.

Task

Vytvorte ISR funkciu s názvom wake_from_sleep(), ktorá sa spustí po stlačení tlačidla a prebudení zariadenia z režimu hlbokého spánku.

Funkcia nemusí robiť nič. Jej úlohou je len prebudiť zariadenie z režimu spánku pomocou externého prerušenia.

Task

Pred prechodom do režimu spánku v stave Sleep zabezpečte, aby bolo pri stlačení tlačidlo ošetrené vzniknuté externé prerušenie funkciou wake_from_sleep().

Pri nastavovaní spúšťača si overte, či má k prerušeniu dôjsť pri zmene stavu z úrovne HIGH na LOW alebo opačne.

Task

Overte správnosť svojej implementácie.

Strážny pes

Počas fungovania zariadenia môže dôjsť k jeho uviaznutiu. To sa môže stať napr. zacyklením alebo vyvolaním výnimky, ktorá nebola ošetrená. Aby sa zaridenie dokázalo z takejto situácie zotaviť, je potrebné zapnúť špeciálny časovač Watchdog Timer.

Task

Aktualizujte svoj kód tak, aby ste aktivovali časovač Watchdog.

Pred odchodom z cvičenia…

Ďalšie úlohy

  1. V prípade akýchkoľvek problémov nezabudnite prejsť do stavu Error a reprezentovať vzniknutú chybu potrebným blikaním.

Ďalšie zdroje