MicroPython ESP32 深度唤醒功能
- Micropython esp32官方文档介绍:
https://docs.micropython.org/en/latest/esp32/quickref.html#deep-sleep-mode
- 使用
ESP32S3
开发板测试。
- 本示例基于
Thonny
平台开发。
- ✨所使用的固件版本:
MicroPython v1.19.1
'''
程序运行后,esp32s3进入深度睡眠模式,通过按下板子上的boot0按键唤醒,重启设备。
原因码 对应原因 说明
0 ESP_SLEEP_WAKEUP_UNDEFINED 没有定义被唤醒的原因(第一次启动时会报)
2 ESP_SLEEP_WAKEUP_EXT0 被RTC_GPIO唤醒
3 ESP_SLEEP_WAKEUP_EXT1 被RTC_CNTL引脚集合的变化唤醒
4 ESP_SLEEP_WAKEUP_TIMER 被ESP的定时器唤醒
5 ESP_SLEEP_WAKEUP_TOUCHPAD 被触摸唤醒
6 ESP_SLEEP_WAKEUP_ULP 被ULP唤醒
7 ESP_SLEEP_WAKEUP_GPIO 被GPIO唤醒(仅限轻睡眠模式light sleep)
8 ESP_SLEEP_WAKEUP_UART 被串口唤醒(仅限轻睡眠模式light sleep)
'''
import esp32, machine ,time
from machine import Pin
from machine import RTC
# from machine import TouchPad # esp32s3固件不带
# 检测设备是否从深度睡眠中唤醒
if machine.reset_cause() == machine.DEEPSLEEP_RESET:
print('woke from a deep sleep')
'''
HARD_RESET -- 2
PWRON_RESET -- 1
WDT_RESET -- 3
DEEPSLEEP_RESET -- 4
SOFT_RESET -- 5
'''
rtc = RTC()
rtc.datetime((2023, 11, 6, 0, 16, 35, 15, 0)) # 设置时间(年,月,日,星期,时,分,秒,微秒)
# 其中星期使用0-6表示星期一至星期日。
print('time:',rtc.datetime()) # 获取当前日期和时间
pin =Pin(0, Pin.IN, Pin.PULL_UP)# ESP32S3 boot0按键
esp32.wake_on_ext0(pin, level = esp32.WAKEUP_ALL_LOW)
'''
# ESP32S3固件不带TouchPad模块
touch_pin = TouchPad(Pin(4))# 配置触摸传感器引脚
touch_pin.config(500) # 设置触摸深度唤醒阈值为500
esp32.wake_on_touch(True)# 配置唤醒源为触摸传感器
'''
#level = esp32.WAKEUP_ALL_LOW 全都置低时触发唤醒GPIO32 - GPIO39
#level = esp32.WAKEUP_ANY_HIGH 任意置高时触发唤醒
wake_reason_code = machine.wake_reason()
'''
PIN_WAKE -- 2
EXT0_WAKE -- 2
EXT1_WAKE -- 3
TIMER_WAKE -- 4
TOUCHPAD_WAKE -- 5
ULP_WAKE -- 6
'''
print("Wake Reason: ", wake_reason_code)
print('进入深度睡眠~~~')
#time.sleep(3)
machine.deepsleep() # 不带参数则是一直处于深度睡眠状态,一直到中断唤醒
# machine.ligthsleep() # 系统会暂停运行,直到有中断信号触发系统唤醒
#machine.deepsleep(10000)# 带参数则是定时唤醒