9. 電源制御

ESP8266 は、臨機応変に CPU 周波数を変更できますし、ディープスリープ状態に入ることもできます。どちらも消費電力の管理に使用できます。

9.1. CPU 周波数の変更

machine モジュールには、CPU 周波数を取得および設定する機能があります。現在の周波数を取得するには次のようにします:

>>> import machine
>>> machine.freq()
80000000

デフォルトで CPU は 80MHz で動作します。消費電流を犠牲にして、処理能力がさらに必要な場合は、160MHz に変更できます。

>>> machine.freq(160000000)
>>> machine.freq()
160000000

コードが重い処理をしている間はより高い周波数に変更して、完了したら元に戻すようにもできます。

9.2. ディープスリープモード

ディープ・スリープモードは、WiFi を含む ESP8266 とそのペリフェラルをすべてシャットダウンします(ただし、チップを起動するために使用されるリアルタイムクロックは含みません)。これにより、消費電流が大幅に削減され、バッテリで長時間にわたって動かせるデバイスを作れるようになります。

ディープスリープ機能を使用するには、GPIO16 をリセットピン(Adafruit Feather HUZZAH ボードの RST)に接続する必要があります。次のコードを使うと、デバイスを動作状態からスリープ状態にすることができます。

import machine

# デバイスを起こすための RTC.ALARM0 を設定
rtc = machine.RTC()
rtc.irq(trigger=rtc.ALARM0, wake=machine.DEEPSLEEP)

# 10秒後に RTC.ALARM0 を発火して、デバイスを起こすよう設定
rtc.alarm(rtc.ALARM0, 10000)

# ディープスリープに入る
machine.deepsleep()

チップがディープスリープから復帰したとき、チップはすべてのメモリを含めて完全にリセットされることに注意してください。ブートスクリプトは通常どおりに実行されます。ブートスクリプトには、リセット原因がディープスリープから目を覚ましたことであるかのチェックを入れておけます。たとえば、リセット原因を表示するには、次のコマンドを使います。

if machine.reset_cause() == machine.DEEPSLEEP_RESET:
    print('woke from a deep sleep')
else:
    print('power on or hard reset')