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.
Upozornenie
Pokiaľ používate mikrokontrolér Raspberry Pi Pico, nemusí uspávanie fungovať korektne. Vyskúšať preto môžete alternatívny firmvér z projektu micropython-pico-deepsleep.
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…
Upozornenie
Ak máte požičanú dosku Raspberry Pi Pico WH od cvičiaceho, tak pred odchodom z cvičenia prosím:
- zmažte obsah Flash pamäte mikrokontroléra nahratím fimrvéru flash_nuke.uf2
- nahrajte na mikrokontrolér najnovší firmvér
Ďalšie úlohy
- V prípade akýchkoľvek problémov nezabudnite prejsť do stavu
Error
a reprezentovať vzniknutú chybu potrebným blikaním.
Ďalšie zdroje
- MicroPython Chapters: Nízka spotreba