2025年9月24日 星期三

用MicroPython 的ESP32 或ESP8266 進入Deep Sleep 模式

使用MicroPython 的ESP32 或ESP8266 進入Deep Sleep 模式,可通過 machine.deepsleep(time_in_us) 函數設定喚醒時間,或利用 machine.Pin(pin_id) 配合喚醒源進行外部喚醒。 喚醒方式包含時間喚醒、外部中斷喚醒(如RTC IO 腳位)或外部重啟。 為達到最佳省電效果,應盡量縮短從Deep Sleep 醒來後的程式執行時間,減少不必要的printf 輸出,並集中發送數據包。 
進入Deep Sleep 模式
您可以使用 machine 模組中的 deepsleep() 方法來進入深度睡眠模式。 
喚醒方式
  1. 時間喚醒:
    • 利用Deep Sleep 模式下的內部RTC 計時器來喚醒晶片。
    • 設定未來進入睡眠後應多久後喚醒,時間單位為微秒(us)。
    • 範例(ESP32/ESP8266): 
Python
        import machine        import time        # 設定延遲 10 秒後進入 Deep Sleep
        time_in_us = 10 * 1000 * 1000  # 10 秒
        print("Entering Deep Sleep...")
        machine.deepsleep(time_in_us)
  • Deep Sleep 模式喚醒後會重新啟動晶片。 
  1. 外部喚醒(RTC_GPIO):
    • ESP32/ESP8266 都支援通過某些GPIO 腳位來喚醒Deep Sleep 模式。 
    • ESP8266通常使用 GPIO16 (也稱為XPD_DCDC),將此腳位拉低即可喚醒。 
    • ESP32可使用 RTC_GPIO 腳位,透過 machine.Pin() 設定喚醒源。 
    • 範例(ESP32):
Python
        import machine        import time        # 設定 GPIO13 作為外部喚醒源
        pin_wakeup = machine.Pin(13, machine.Pin.IN, machine.Pin.PULL_UP)        pin_wakeup.irq(trigger=machine.Pin.IRQ_FALLING, handler=lambda p: print("Pin 13 woke up the chip"))

        print("Entering Deep Sleep...")
        # 唤醒源配置, 唤醒后会重启        machine.deepsleep()
省電的建議
  • 縮短Deep Sleep 喚醒後的初始化時間
    關閉或縮短不必要的功能,例如關閉RF 校準,以減少啟動時間和電流消耗。
  • 減少printf 輸出
    UART 的緩衝區(FIFO)消耗時間較多,盡量避免在程式中進行大量打印。
  • 集中發送數據
    在Deep Sleep 醒來後,將多個數據包集中一起發送,而不是分散發送,因為發送動作本身消耗能量,一次處理時間越短越有利於節能。
  • 選擇合適的Flash 型號
    某些特殊型號的Flash 芯片(例如ESP8266 的ISSI-IS25LQ025)可以縮短加載固件的時間,進一步省電。 

沒有留言:

張貼留言