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)# 带参数则是定时唤醒
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
📓不同模式下功耗说明
- 📋根据ESP32技术规格数上描述,ESP32 支持 5 种预设功耗模式:
-
- Active 模式
– CPU 的工作时钟为 XTAL_DIV_N (40 MHz/26 MHz) 或 PLL (80 MHz/160 MHz/240 MHz)。
– 芯片可以接收、发射或监听信号。
-
- Modem-sleep 模式
– CPU 可以工作,时钟可以配置。
– Wi-Fi /蓝牙基带受时钟门限控制或关闭,射频模块关闭。
– PLL 为 80 MHz 时,电流消耗:∼30 mA。
– XTAL 为 2 MHz 时,电流消耗:∼3 mA。
– 即刻唤醒。
- • Light-sleep 模式
– 内部 8 MHz 振荡器、40 MHz 高速晶振、PLL 及射频模块均禁用。
– 数字内核时钟受门限限制,CPU 暂停工作。
– ULP 协处理器和触摸控制器可以周期性触发,对传感器进行监测。
– 电流消耗:∼ 800 µA。
– 唤醒延迟:低于 1 ms。 - • Deep-sleep 模式
– 内部 8 MHz 振荡器、40 MHz 高速晶振、PLL 及射频模块均禁用。
– 数字内核断电,CPU 内容丢失。
– RTC 内核的供电电压降至 0.7V。
– 8 x 32 位数据保存在通用保留寄存器中。
– RTC 内存和快速 RTC 内存可以保持。
– 电流消耗:∼ 6.5 µA。
– 唤醒延迟:低于 1 ms。
– 推荐用于一些非频繁连接 Wi-Fi /蓝牙的超低功耗应用场景。 - • 休眠模式
– 内部 8 MHz 振荡器、40 MHz 高速晶振、PLL 及射频模块均禁用。
– 数字内核断电,CPU 内容丢失。
– RTC 外设域断电。
– RTC 内核的供电电压降至 0.7V。
– 8 x 32 位数据保存在通用保留寄存器中。
– RTC 内存和快速 RTC 内存断电。
– 电流消耗:∼ 4.5 µA。
– 唤醒源:仅支持 RTC 计时器。
– 唤醒延迟:低于 1 ms。
– 推荐用于一些非频繁连接 Wi-Fi /蓝牙的超低功耗应用场景。