ディープスリープ

2022/07/31

MicroPython1.17(ESP32)

動作確認デバイス:M5Stack Atom-Lite

import machine

# ディープスリープから起こされたかをチェック
if machine.reset_cause() == machine.DEEPSLEEP_RESET:
    print('woke from a deep sleep')
    import utime
    utime.sleep(5000)

# 10秒間のディープスリープに入る
machine.deepsleep(10000)

即時ディープスリープの無限ループにすると、スクリプト変更も困難になるので注意。


ATOM Liteでボタンを押したら、ディープスリープが開始されるスクリプト

import machine

if machine.reset_cause() != machine.DEEPSLEEP_RESET:
    import utime
    btn_pin = machine.Pin(39, machine.Pin.IN, machine.Pin.PULL_UP)
    while btn_pin.value():
        utime.sleep(0.1)
else:
    machine.deepsleep(1000) # 1sec


ATOM Liteでボタンを押したら、ディープスリープが開始されるスクリプトに、ボタンを押すまで青に光る処理を追加

def deepsleep_loop():
    import time
    import machine,neopixel

    if machine.reset_cause() != machine.DEEPSLEEP_RESET:
        pin = machine.Pin(27, machine.Pin.OUT)
        np = neopixel.NeoPixel(pin, 1)

        np[0] = (0, 0, 255)
        np.write()

        btn_pin = machine.Pin(39, machine.Pin.IN, machine.Pin.PULL_UP)
        while btn_pin.value():
            time.sleep(0.1)

        np[0] = (0, 0, 0)
        np.write()

        machine.deepsleep(1)

    else:
        #main proccess
        machine.deepsleep(60*30*1000)

ESP32 用クイックリファレンス ディープスリープモード
https://micropython-docs-ja.readthedocs.io/ja/latest/esp32/quickref.html#deep-sleep-mode