一. 關(guān)于UPL協(xié)處理器的概念
ESP32 有強(qiáng)大的超低功耗協(xié)處理器 (ULP co-processor)
ULP 協(xié)處理器是一個功耗極低的協(xié)處理器設(shè)備,無論主 CPU 是處于正常運(yùn)行模式還是 Deep-sleep 模式,ULP 協(xié)處理器都可以獨(dú)立運(yùn)行。超低功耗協(xié)處理器的補(bǔ)充使得 ESP32 能夠勝任一些對低功耗要求較高的應(yīng)用場合。
ULP 協(xié)處理器的主要特性有:
采用 8 MHz 頻率和 8 KB 內(nèi)存
內(nèi)建 ADC 和 I2C 接口
支持正常模式和 Deep-sleep 模式
可喚醒主 CPU 或向主 CPU 發(fā)送中斷
能夠訪問主 CPU 的外圍設(shè)備、內(nèi)部傳感器及 RTC 寄存器
鑒于以上的特性,ULP 協(xié)處理器能夠在消耗較低電流的情況下,完成 ADC 采樣,進(jìn)行 I2C Sensor 的讀寫,驅(qū)動 RTC GPIO 口動作,可以在某些超低功耗場景中完全替代主 CPU。
重要的: ULP是ESP32做出優(yōu)秀低功耗產(chǎn)品的關(guān)鍵
但是致命的: ULP只能用匯編????????????????
參考文檔: https://blog.csdn.net/espressif/article/details/79131076
二. 理解了ULP之后, 讓我們看一下ESP32的工作模式
可以看到ESP32在深睡眠模式下可以啟動或停止ULP協(xié)處理器
三. ESP32 deepsleep模式喚醒方式及關(guān)鍵API
喚醒方式:
定時器喚醒
兩種引腳喚醒方式
觸摸按鍵喚醒
ULP喚醒
1. 開始進(jìn)入深睡眠: esp_deep_sleep_start();
esp_deep_sleep_start();
2. 獲取esp32被喚醒的原因 esp_deep_sleep_get_wakeup_cause();
這是一個ESP-IDF的原生方法, 如果我們想用, 需要引入頭文件
#include
注意:#include 返回: 被喚醒原因碼: ESP32有8KB的RTC存儲器 注意, RTC memory會被硬件reset清除 五. 進(jìn)入休眠后定時器喚醒 參數(shù): 定時時間,單位μ秒, 類型uint64_t, 所以定時時間要在584942年以內(nèi)???????????? 例子: #include Serial.begin(115200); Serial.printf('ESP32 is restart now! It's the %d timern', ++bootCount); delay(5000); esp_sleep_enable_timer_wakeup(20000000); Serial.println(esp_sleep_get_wakeup_cause());}void loop(){ Serial.println('ESP32 will sleep now!'); delay(100); esp_deep_sleep_start();} 首先,并不是每個GPIO都是RTC_GPIO, 詳見下表 注意: 我們填寫的GPIO引腳號是真正的引腳號 不是其RTC_GPIO編號 esp_sleep_enable_ext0_wakeup(GPIO_NUM_35, 0); #include Serial.begin(115200); Serial.printf('ESP32 is restart now! It's the %d timern', ++bootCount); esp_sleep_enable_ext0_wakeup(GPIO_NUM_35, 0); Serial.printf('the wakeup reason is :%drn', esp_sleep_get_wakeup_cause());}void loop(){ delay(3000); Serial.println('ESP32 will sleep now!'); delay(100); esp_deep_sleep_start();} 七. 進(jìn)入休眠后被RTC_CNTL喚醒 (引腳喚醒方式二) 思考一個問題, 如果我們有8個GPIO引腳想喚醒ESP32, 難道要用上一節(jié)的方法操作8遍嗎? 當(dāng)然不是, 我們可以直接操作引腳集合, (我們用一個mask片選想操作的引腳,然后這些引腳都具有了喚醒ESP32的能力) 我們可以設(shè)置這些引腳是 每個都能觸發(fā)(每個葫蘆娃都能自己去救爺爺), 還是一起共同發(fā)力才能觸發(fā)(集齊七龍珠??) esp_sleep_enable_ext1_wakeup(uint64_t mask, esp_sleep_ext1_wakeup_mode_t mode); 參數(shù): mask : 如: 我們想讓 32 33 35 39觸發(fā), 這樣計算mask 注意: 我們不要使用 37 38 mode: 觸發(fā)方式 可選: ESP_EXT1_WAKEUP_ALL_LOW : 全都置低時觸發(fā)喚醒 ESP_EXT1_WAKEUP_ANY_HIGH : 任意置高時觸發(fā)喚醒 八. 進(jìn)入休眠后被觸摸按鍵喚醒 值得注意的是, 觸摸按鍵喚醒所需deepsleep電流要大于 按鍵和定時器 必須寫觸摸回調(diào)函數(shù), 否則無用 #include Serial.println('T2 weak ESP32 up');}void setup(){ Serial.begin(115200); Serial.printf('ESP32 is restart now! It's the %d timern', ++bootCount); esp_sleep_enable_touchpad_wakeup(); Serial.printf('the wakeup reason is :%drn', esp_sleep_get_wakeup_cause()); touchAttachInterrupt(2,callbackPin2,40);}void loop(){ delay(3000); Serial.println('ESP32 will sleep now!'); delay(100); esp_deep_sleep_start();} 九. 被ULP喚醒 這個要做一個專門的ULP專題Serial.println(esp_deep_sleep_get_wakeup_cause());
原因碼 對應(yīng)原因 說明 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) 3. 設(shè)置具體的喚醒源請看下面的相關(guān)章節(jié)
四. RTC memory
在RTC memory里的變量不會因為deepsleep被清除, 創(chuàng)建方法:RTC_DATA_ATTR int bootCount = 0;
esp_sleep_enable_timer_wakeup(20000000);
六. 進(jìn)入休眠后被RTC_GPIO喚醒 (引腳喚醒方式一)
上一篇:玩轉(zhuǎn) ESP32 + Arduino (七) Ticker定時庫,base64轉(zhuǎn)換,OTA, SSD1306顯示QRcode二維碼
下一篇:玩轉(zhuǎn) ESP32 + Arduino(三十) onenet5.0 全新MQTT設(shè)備連接體驗
推薦閱讀最新更新時間:2025-06-27 15:33

設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- AD8532ARZ-REEL7 單電源立體聲耳機(jī)驅(qū)動器的典型應(yīng)用
- 使用具有 PowerPath 和 2A 輸入限制的 LTC4162EUFD-L40M 9V 至 35V、2 節(jié)、3.2A 充電器的典型應(yīng)用
- NB3H5150MNGEVB:2.5V/3.3V 低噪聲多速率時鐘發(fā)生器評估板
- 使用 STMicroelectronics 的 R5970AD 的參考設(shè)計
- AM2G-2409SZ 9V 2 瓦 DC-DC 轉(zhuǎn)換器的典型應(yīng)用
- LTC3859AHFE 雙輸出、降壓/降壓/升壓同步控制器的典型應(yīng)用電路,具有改進(jìn)的突發(fā)模式操作
- MCP1501-20E/RW 2.048V ADC 示例電路的典型應(yīng)用電路
- AM30EW-4805DZ Φ5V雙輸出DC/DC轉(zhuǎn)換器的典型應(yīng)用
- DER-218 - 100 W 制冷電源
- NCP5007 緊湊型背光 LED 升壓驅(qū)動器的典型應(yīng)用,具有模擬反饋的基本直流電流模式操作
- 南芯科技推出高集成度多口移動電源解決方案,助力充電寶市場穩(wěn)健發(fā)展
- 英飛凌推出具有超低導(dǎo)通電阻的CoolSiC? MOSFET 750 V G2,適用于汽車和工業(yè)功率電子應(yīng)用
- DigiKey 慶祝 B 站賬號粉絲突破 10 萬,贈送驚喜禮包
- 碳化硅企業(yè) Wolfspeed 啟動破產(chǎn)重組,預(yù)計 2025 年三季度末完成司法重整
- 蘋果被曝考慮放棄自研模型 轉(zhuǎn)而與Anthropic或OpenAI合作
- ?百度文心4.5來襲!英特爾Day0即支持端側(cè)部署
- 【廣瀨電機(jī)】關(guān)于中國發(fā)明專利侵權(quán)訴訟達(dá)成和解的公告
- 英飛凌BMS解決方案推動電動汽車創(chuàng)新
- 地平線的L3判斷與實踐路徑
- 汽車網(wǎng)絡(luò)升級攻略:CAN-CAN FD-車載以太網(wǎng)
- stm32 pwm實現(xiàn)過程
- stm32使用PWM時,關(guān)閉PWM引腳會出現(xiàn)高電平解決方案
- 工信部:將指導(dǎo)建設(shè)國家機(jī)器人制造業(yè)創(chuàng)新中心
- 智能一點(diǎn)發(fā)布AI導(dǎo)購機(jī)器人 要做垂直領(lǐng)域的售前導(dǎo)購
- 新松AGV機(jī)器人在汽車行業(yè)保有量超過4000臺
- 51單片機(jī)匯編學(xué)習(xí)例程(5)——USART串口篇
- 小摩:博通無線芯片業(yè)務(wù)或許散裝出售,聯(lián)發(fā)科為潛在買家
- 明年小尺寸手機(jī)將重返主流?
- Speedtest公布了全球各國最常用基帶分布圖
- 榮耀高管:友商歪曲事實顛倒黑白,實令人不齒