日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

玩轉(zhuǎn) ESP32 + Arduino (十七) deepsleep深睡眠模式

發(fā)布者:SunshineHope最新更新時間:2025-04-02 來源: jianshu關(guān)鍵字:ESP32  Arduino 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

一. 關(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 即將被棄用, 所以不要再用這個頭文件了

Serial.println(esp_deep_sleep_get_wakeup_cause());

返回: 被喚醒原因碼:

原因碼對應(yīng)原因說明
0ESP_SLEEP_WAKEUP_UNDEFINED沒有定義被喚醒的原因(第一次啟動時會報)
2ESP_SLEEP_WAKEUP_EXT0被RTC_GPIO喚醒
3ESP_SLEEP_WAKEUP_EXT1被RTC_CNTL引腳集合的變化喚醒
4ESP_SLEEP_WAKEUP_TIMER被ESP的定時器喚醒
5ESP_SLEEP_WAKEUP_TOUCHPAD被觸摸喚醒
6ESP_SLEEP_WAKEUP_ULP被ULP喚醒
7ESP_SLEEP_WAKEUP_GPIO被GPIO喚醒(僅限輕睡眠模式light sleep)
8ESP_SLEEP_WAKEUP_UART被串口喚醒(僅限輕睡眠模式light sleep)

3. 設(shè)置具體的喚醒源請看下面的相關(guān)章節(jié)

四. RTC memory

ESP32有8KB的RTC存儲器
在RTC memory里的變量不會因為deepsleep被清除, 創(chuàng)建方法:

RTC_DATA_ATTR int bootCount = 0;

注意, RTC memory會被硬件reset清除


五. 進(jìn)入休眠后定時器喚醒

esp_sleep_enable_timer_wakeup(20000000);

參數(shù):

  • 定時時間,單位μ秒, 類型uint64_t, 所以定時時間要在584942年以內(nèi)????????????

例子:

#include #include RTC_DATA_ATTR int bootCount = 0;void setup(){

  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();}


六. 進(jìn)入休眠后被RTC_GPIO喚醒 (引腳喚醒方式一)

首先,并不是每個GPIO都是RTC_GPIO, 詳見下表

注意: 我們填寫的GPIO引腳號是真正的引腳號 不是其RTC_GPIO編號


  esp_sleep_enable_ext0_wakeup(GPIO_NUM_35, 0);

#include #include RTC_DATA_ATTR int bootCount = 0;void setup(){

  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 #include RTC_DATA_ATTR int bootCount = 0;RTC_DATA_ATTR int BTN_Pin_BITMASK = 0;void callbackPin2(){

  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專題


關(guān)鍵字:ESP32  Arduino 引用地址:玩轉(zhuǎn) ESP32 + Arduino (十七) deepsleep深睡眠模式

上一篇:玩轉(zhuǎn) ESP32 + Arduino (七) Ticker定時庫,base64轉(zhuǎn)換,OTA, SSD1306顯示QRcode二維碼
下一篇:玩轉(zhuǎn) ESP32 + Arduino(三十) onenet5.0 全新MQTT設(shè)備連接體驗

推薦閱讀最新更新時間:2025-06-27 15:33

玩轉(zhuǎn) ESP32 + Arduino (十六) 通過mqtt協(xié)議連接阿里云
需要用到的庫: PubSubClient : 發(fā)送和接收MQTT消息 ArduinoJson : Json字符串轉(zhuǎn)換庫 AliyunMqttArduino: 阿里云相關(guān) 先做一件事!!!!!! 引入 PubSubClient.h 后 #include PubSubClient.h 打開 PubSubClient.h 修改如下內(nèi)容: 一. 阿里云MQTT協(xié)議 關(guān)于MQTT協(xié)議, 請參考文章:https://zhuanlan.zhihu.com/p/89057819 請參考我之前整理的文檔: 【騰訊文檔】MQTT連接阿里云示例(1)https://docs.qq.com/sheet/DWXBaUE9nWmZVa
[單片機(jī)]
ESP32學(xué)習(xí)筆記(2)——GPIO接口使用
一、簡介 ESP32 芯片有 40 個物理 GPIO pad。每個 pad 都可用作一個通用 IO,或連接一個內(nèi)部的外設(shè)信號。IO_MUX、RTC IO_MUX 和 GPIO 交換矩陣用于將信號從外設(shè)傳輸至 GPIO pad。這些模塊共同組成了芯片的 IO 控制。 注意:其中 GPIO 34--39 僅用作輸入管腳,其他的既可以作為輸入又可以作為輸出管腳。 GPIO6-11通常用于SPI閃存。 1.1 官方資料 ESP-IDF 編程指南——GPIO&RTC GPIO ESP32 技術(shù)參考手冊——4 IO_MUX 和 GPIO 交換矩陣 (GPIO, IO_MUX) gpio_example 1.2 包含頭文件 #includ
[單片機(jī)]
基于STM32、ESP32,鋼鐵俠打造機(jī)械臂設(shè)計
一直是稚暉君很感興趣的一個方向,而在中他認(rèn)為最實用的非臂莫屬。正巧,半年前稚暉君偶然淘到了一臺二手機(jī)械臂,這讓他有些激動。然而,喜悅之情還沒持續(xù)多久,稚暉君就有些不開心了:在他花了一些時間將這臺機(jī)械臂研究透徹,并自己開發(fā)了一套 K 后,感到了一點(diǎn)不妙:“這個手子不太行啊”。 稚暉君表示,目前市面上的機(jī)械臂都不夠酷,因此決定要自己造一臺很酷的機(jī)械臂,并將其取名為 Dummy(取自鋼鐵俠中一只名為 Dummy 的機(jī)械臂)。為此他總結(jié)了一份架構(gòu)設(shè)計圖(由于該圖較長,中為滾動呈現(xiàn),因此本文僅截取部分): 準(zhǔn)備 既然是要設(shè)計一臺機(jī)械臂,那就需要從硬件開始準(zhǔn)備,畢竟無論軟件再重要,也需要一個優(yōu)質(zhì)的載體才
[機(jī)器人]
如何使用Arduino制作一個交流電壓測量設(shè)備
在這個項目中,我們將 使用Arduino制作一個交流電壓測量設(shè)備, 該設(shè)備將測量我們家中交流電源的電壓。我們將在Arduino IDE的串行監(jiān)視器上打印該電壓,并在萬用表上顯示。 制作數(shù)字電壓表比制作模擬電壓表容易得多,因為在模擬電壓表的情況下,您必須對扭矩、摩擦損耗等物理參數(shù)有很好的了解,而在數(shù)字電壓表的情況下,您只需使用 LCD 或 LED 矩陣甚至您的筆記本電腦(如本例)為您打印電壓值。 所需組件: 一臺 12-0-12 變壓器 1N4007二極管 1uf電容器 電阻 10k;4.7k。 齊納二極管(5V) Arduino UNO 連接線 Arduino電壓表電路圖: 此Arduino電壓表的電路圖如上所示。
[測試測量]
如何使用<font color='red'>Arduino</font>制作一個交流電壓測量設(shè)備
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved