電源管理 V2¶
このモジュールを使うと、micro:bit V2 の電源モードを管理できます。
MicroPython から要求できる micro:bit ボードの低電力モードには2つあります:
- ディープスリープ: 複数のソース(端子、ボタン押下、UART データ、タイマー)
- オフ: 最も消費電力が少ない電源モードで、ボードを起動させる唯一の方法は、リセットボタンを使うか、バッテリー駆動中にUSBケーブルを接続することです。ボードが起床すると、再起動してプログラムを最初から実行します。
これらの低電力モードがどのように機能するかについて詳しくは 詳細情報の章 を参照してください。
関数¶
-
power.
off
()¶ ボードを可能な限り低い電力モードに電源ダウンさせます。
これは、リセットボタンを数秒間押してボードを「オフモード」にするのと同じです。
micro:bit はリセットボタンが押された場合、または電池駆動の場合は USB ケーブルが接続された場合にのみ起動します。
ボードは起動するとリセット状態を開始するので、プログラムは最初から実行されます。
-
power.
deep_sleep
(ms=None, wake_on=None, run_every=True)¶ micro:bit 起床時に動作を継続できる低電力モードに設定します。
プログラムの状態は保持され、起床すると中断したところから動作を再開します。
ディープスリープモードはオフモードよりも多くのバッテリー電力を消費します。
起床させるソースは引数で設定します。
ボードは、UARTデータを受信したとき、(ボードをリセットするときに使う)リセットボタンを押したとき、バッテリー駆動している場合においては USB ケーブルを挿入したときに、常に起床します。
run_every
パラメータをTrue
に設定すると(デフォルト)、microbit.run_every
でスケジュールした関数は、ボードを一瞬だけ起こして実行し、終了するとスリープに戻ります。パラメータ: - ms -- 起床するまでの時間(ミリ秒単位)。
- wake_on -- ボードを起床するためのピン/ボタンの単一インスタンスまたはタプル。例:
deep_sleep(wake_on=button_a)
またはdeep_sleep(wake_on=(pin0, pin2, button_b))
。 - run_every --
microbit.run_every
による関数実行のスケジュールをディープスリープ中でも有効にするかを設定するブール値です。
サンプルコード¶
電源管理 API の使い方を示すプログラム例:
"""
10秒ごとにディスプレイに「へん顔」を表示する。
Aボタンを押すとディープスリープになり、30分経過するか、もう一度ボタンAを押すと、
スリープを解除します。
Bボタンを押すとオフモードになります。
"""
from microbit import *
import power
@run_every(s=10)
def silly_face():
display.show(Image.SILLY)
sleep(400)
while True:
if button_b.is_pressed():
display.scroll("Off")
# このモードでは、リセットボタンを押すことでしかmicro:bitは目覚めません。
power.off()
# このモードからのウェイクアップはプログラムを最初から開始するため、
# このコード行は決して実行されません。
display.show(Image.SURPRISED)
elif button_a.is_pressed():
display.show(Image.ASLEEP)
sleep(300)
# 複数の起床ソースを指定してディープスリープに入ります
power.deep_sleep(
wake_on=(pin0, pin1, button_a),
ms=30*1000, # 30秒後に起床します
run_every=False, # run_everyによるボードの起床を停止します
)
# micro:bit が起床したら、ここから実行を継続します
# 数回点滅して起床を知らせます
display.show([Image("99099:09090:99099:09990"), Image.ASLEEP] * 3, 250)
display.show(Image.HAPPY)
sleep(200)
データログを使用した例:
from microbit import *
import power
import log
# 5分ごとに温度を記録する
@run_every(min=5)
def log_temperature():
log.add(temp=temperature())
while True:
# Aボタンを押したときの温度を表示します
if button_a.is_pressed():
display.scroll(temperature())
# ディープスリープに入り、Aボタンを押すと起床するようにし、run_every で
# スケジューリングした関数がバックグラウンドで実行されるようにする
power.deep_sleep(wake_on=button_a, run_every=True)
詳細情報¶
micro:bit ボードには2つのマイクロコントローラ(MCU)があり、それぞれ独立してスリープ/起床できます。
- ターゲット MCU - MicroPython とそのコードを実行します。
- インタフェース MCU -
MICROBIT
USB ドライブなど、USB 機能および USB のシリアルインタフェースを提供する二次マイクロコントローラ。

各 MCU は、次の「MCU 電源モード」のいずれかにできます:
- 覚醒 (Awake): 通常の動作モードです。
- スリープ (Sleep): MCU が異なるソースから起床され、動作を継続することができる低電力モードです。
- 電源ダウン (Power Down): 個々の MCU にとって最も低い電力モードであり、起動するとリセットから開始されます。
Python コードは「ボード電源モード」(この場合は ディープスリープ または オフ)を要求でき、ターゲットを指定の「MCU 電源モード」に設定しますが、インタフェース MCU モードは micro:bit の電源、つまり USB (コンピュータへのコネクタ)またはバッテリー経由で電源供給されているかどうかに依存します。
要するに、バッテリー電源の場合、インタフェース MCUは 低電力モードに移行できますが、USB でコンピュータに接続されている場合、USB 接続を維持するために起きていることになります。
USB Powered (Interface always awake) |
||
---|---|---|
ボード電源モード | ターゲット MCU モード | インタフェース MCU モード |
ディープスリープ | 💤 スリープ | ⏰ 覚醒 |
オフ | 📴 電源ダウン | ⏰ 覚醒 (赤 LED 点滅) |
Battery Powered |
||
---|---|---|
ボード電源モード | ターゲット MCU モード | インタフェース MCU モード |
ディープスリープ | 💤 スリープ | 💤 スリープ |
オフ | 📴 電源ダウン | 📴 電源ダウン |
ディープスリープと run_every¶
「ディープスリープ」中も microbit.run_every
関数が実行されるように、micro:bit は正しい時刻に起床して次にスケジュールされている run_every
を実行し、その run_every
が完了すると同時に「ディープスリープ」モードに戻ります。 ms
のタイムアウトに達するか wake_on
イベントが発生して、ディープスリープが終了するまで、この動作が続きます。