• MicroPython ESP32深度唤醒功能


    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 /蓝牙的超低功耗应用场景。
  • 相关阅读:
    内存对齐--面试常问问题和笔试常考问题
    yii2,脚本内存溢出解决办法
    ArrayList集合(干数组不能干的事)
    生物活性分子库
    源码编译安装部署lnmp
    OpenAI宫斗大戏,奥特曼面临的选择
    SpringMVC简介
    挑战10个最难的Java面试题(附答案)【上】
    批量汇总nmon结果文件Excel数据
    git多人协作开发
  • 原文地址:https://blog.csdn.net/weixin_42880082/article/details/134252376