在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

喚醒ESP32的三種不同方法

454398 ? 來源:wv ? 2019-10-12 11:00 ? 次閱讀

步驟1:簡介

ESP32具有以下功能:省電模式,稱為“深度睡眠”。在這種模式下,CPU,大多數RAM和所有數字時鐘外圍設備都將關閉。芯片上唯一仍可連接的部分是RTC控制器,RTC外設(包括ULP協處理器)和RTC存儲器。

我們有幾種方法可以在睡眠時喚醒ESP32。進入深度睡眠模式之前,可以隨時設置喚醒源。

步驟2:喚醒ESP32的方法

喚醒ESP32的三種不同方法

有五種喚醒ESP32的方法:

?計時器

?外部喚醒(ext0)

?外部喚醒(ext1)

?ULP協處理器喚醒

?觸摸板

步驟3:計時器

RTC控制器具有內置的計時器,在預定的時間段后,可用于激活芯片。時間以微秒精度指定。

esp_deep_sleep_enable_timer_wakeup( uint64_t time_in_us )

time_in_us》是以微秒為單位的時間

步驟4:外部喚醒(ext0)

當RTC GPIO之一進入預定義的邏輯級別時,RTC IO模塊包含觸發警報的邏輯。 RTC IO是RTC外設電源域的一部分,因此,如果請求此激活源,則在深度睡眠期間RTC外設將保持活動狀態。

esp_deep_sleep_enable_ext0_wakeup( gpio_num_t gpio_num , int level)

gpio_num》使用的GPIO編號作為激活源。只能使用RTC功能的GPIO:0,2,4,12-15,25-27,32-39。

level》輸入級別將觸發警報(0 = LOW,1 =高)

步驟5:外部喚醒(ext1)

RTC控制器包含使用多個RTC GPIO觸發鬧鐘的邏輯。

esp_deep_sleep_enable_ext1_wakeup(uint64_t mask, esp_ext1_wakeup_mode_t mode)

mask》會導致激活的GPIO編號的位掩碼。此位圖中只能使用啟用RTC的GPIO:0,2,4,12-15,25-27,32-39。

mode》選擇用于確定激活條件的邏輯功能:

?ESP_EXT1_WAKEUP_ALL_LOW:在所有選定的GPIO都為LOW時喚醒

?ESP_EXT1_WAKEUP_ANY_HIGH:在任何選定的GPIO為HIGH時喚醒

步驟6 :ULP協處理器喚醒

當芯片處于深度睡眠狀態時,ULP協處理器可以運行,并且可以用于搜索傳感器,監視ADC電容式觸摸傳感器的值,并在特定事件發生時激活芯片

ULP協處理器是RTC外圍設備電源域的一部分,并運行存儲在慢速存儲器RTC中的程序。因此,如果請求此激活模式,則在深度睡眠期間將激活RTC外設和RTC慢速存儲器。

步驟7:觸摸板

RTC控制器包含使用電容式觸摸傳感器觸發警報的邏輯。但是,觸針的定義不同。我們必須對每個所需的引腳使用觸摸中斷。

設置中斷后,我們啟用喚醒模式以使用傳感器。

//Configure Touchpad as wakeup source

esp_sleep_enable_touchpad_wakeup();

步驟8:進入深度睡眠模式

設置喚醒模式后,只需一個命令即可將ESP32置于深度睡眠模式(花費2.5μA或更小)。我在這里強調,這筆費用來自ESP芯片,而不是印版,因為后者花費更多。

esp_deep_sleep_start();

從該命令開始,ESP32進入睡眠狀態,并且不執行下一行重要說明:必須在執行上述命令之前進行所有喚醒設置。

步驟9:以下是一些重要信息

下面的調用返回ESP32喚醒的原因。

1:EXT0 2:EXT1 3:計時器4:TOUCHPAD 5:ULP

esp_sleep_get_wakeup_cause();

如果通過觸摸板設置喚醒功能,我們可以通過命令恢復觸摸發生的GPIO

esp_sleep_get_touchpad_wakeup_status();

每次ESP32喚醒時,

它將再次循環進行設置。因此,所有未在RTC內存中定義的變量都將返回其原始狀態。

要即使在入睡后仍將變量保留在內存中,請在以下示例中使用變量聲明:

//RTC_DATA_ATTR aloca a variável na memória RTC

RTC_DATA_ATTR int bootCount = 0;

第10步:演示

視頻根據圖像顯示了程序的工作。

步驟11:WiFi NodeMCU-32S ESP-WROOM-32

步驟12:組裝

步驟13:程序

我們現在將創建一個程序,在其中將ESP32配置為進入深度睡眠模式。這將以三種不同的方式喚醒:一種用于外部喚醒(ext0),一種用于定時器,另一種用于觸摸板。它們不能一起工作,因此我們將使用一個變量作為計數器,表示ESP32引導Boot的次數以配置喚醒方式。

步驟14:需要使用庫

要控制OLED顯示,我們需要一個外部庫。為此,我們將下載U8g2庫。

Arduino IDE中,轉到“草圖”菜單》》“包括庫” 》》“管理庫。..”。

第15步:庫和變量

我們包括了用于控制OLED顯示的庫,以及顯示控制器實例的構造函數。另外,我們在RTC內存中分配變量。我們設置觸摸接受的靈敏度,毫秒轉換因子(以秒為單位)以及ESP32進入睡眠模式的時間(以秒為單位)。

#include //biblioteca para controle do display oled

//construtor da instancia do controlador do display

//SDA = 21 e SCL = 22

U8X8_SSD1306_128X64_NONAME_SW_I2C display(SCL, SDA, U8X8_PIN_NONE);

//RTC_DATA_ATTR aloca a variável na memoria RTC

RTC_DATA_ATTR int bootCount = 0;

//sensibilidade para aceita??o do toque

#define Threshold 40

//fator de convers?o de microsegundos para segundos

#define uS_TO_S_FACTOR 1000000

//tempo que o ESP32 ficará em modo sleep (em segundos)

#define TIME_TO_SLEEP 3

步驟16:設置

在安裝程序中,我們增加啟動發生的次數。我們調用該函數來打印Boot主題。如果引導編號為PAR,則將ESP32設置為通過(EXT0)按鈕喚醒。如果是3的倍數,我們將ESP32設置為在設置的時間后喚醒。否則,我們將設置電容式觸摸引腳來喚醒ESP32。最后,我們將觸摸板設置為喚醒源,并強制ESP32進入睡眠模式。

void setup() {

Serial.begin(115200);

delay(1000);

//incrementa o numero de vezes que o BOOT ocorreu

++bootCount;

configureDisplay();

//chama a fun??o para imprimir o motivo do BOOT

print_wakeup_reason();

//se o numero de boot for PAR configuramos o ESP32 para despertar através do bot?o (EXT0)

if(bootCount % 2 == 0) {

esp_sleep_enable_ext0_wakeup(GPIO_NUM_39,1); //1 = High, 0 = Low

}

//se for multiplo de 3 configuramos o ESP32 para despertar depois de um tempo definido

else if(bootCount % 3 == 0) {

esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);

}

//caso contrario configuramos os pinos de touch capacitivo para despertar o ESP32

else {

//Setup interrupt on Touch Pad 5 (GPIO12)

touchAttachInterrupt(T5, callback, Threshold);

//Configure Touchpad as wakeup source

esp_sleep_enable_touchpad_wakeup();

}

Serial.println(“entrando em modo sleep“);

esp_deep_sleep_start(); //for?a o ESP32 entrar em modo SLEEP

}

步驟17:循環,回調和ConfigureDisplay

在循環中,我們無事可做。然后,如果發生中斷,我們有事可做時,我們將繼續中斷回調。關于configureDisplay,我們初始化顯示并配置一些參數。我們在屏幕上打印引導發生的次數。

//nada a se fazer no loop

void loop() {

}

//callback das interrup??es

void callback(){

//caso queira fazer algo ao ocorrer a interrup??o

}

void configureDisplay()

{

//inicializa o display e configura alguns parametros

display.begin();

display.setPowerSave(0); //modo powerSave (0-Off ? 1-On)

display.setFont(u8x8_font_torussansbold8_u); //fonte utilizada

//imprime no display os numero de vezes que aconteceu o BOOT

display.drawString(0,0, ”BOOT NUM:“);

display.drawString(0,2,String(bootCount).c_str());

display.drawString(0,4, ”MOTIVO:“);

}

步驟18:Print_wakeup_reason(知道喚醒的原因)

這里,我們具有打印ESP32喚醒原因的功能。

//fun??o para imprimir a causa do ESP32 despertar

void print_wakeup_reason( ){

esp_sleep_wakeup_cause_t wakeup_reason;

String reason = ”“;

wakeup_reason = esp_sleep_get_wakeup_cause(); //recupera a causa do despertar

switch(wakeup_reason)

{

case 1 :reason = ”EXT0 RTC_IO BTN“; break;

case 2 :reason = ”EXT1 RTC_CNTL“; break;

case 3 :reason = ”TIMER“; break;

case 4 :reason = ”TOUCHPAD“; break;

case 5 :reason = ”ULP PROGRAM“; break;

default :reason = ”NO DS CAUSE“; break;

}

Serial.println(reason);

display.clearLine(6); //apaga a linha 6 do display

display.drawString(0,6, reason.c_str()); //imprime a causa do despertar no display

//se despertou por TOUCHPAD, ent?o vamos verificar em qual dos pinos ocorreu

if(wakeup_reason == 4) {

print_wakeup_touchpad(); //verifica o pino e imprime no display

}

}

步驟19:Print_wakeup_touchpad(知道GPIO觸摸)

現在,在此步驟中,我們具有打印被觸摸的圖釘的功能。我們恢復了喚醒ESP32的GPIO并將其打印在顯示屏上。

//fun??o para imprimir o pino que foi tocado

void print_wakeup_touchpad() {

touch_pad_t touchPin;

touchPin = esp_sleep_get_touchpad_wakeup_status(); //recupera o GPIO que despertou o ESP32

String GPIO = ”“;

switch(touchPin)

{

case 0 : GPIO = ”4“; break;

case 1 : GPIO = ”0“; break;

case 2 : GPIO = ”2“; break;

case 3 : GPIO = ”15“; break;

case 4 : GPIO = ”13“; break;

case 5 : GPIO = ”12“; break;

case 6 : GPIO = ”14“; break;

case 7 : GPIO = ”27“; break;

case 8 : GPIO = ”33“; break;

case 9 : GPIO = ”32“; break;

default : Serial.println(”Wakeup not by touchpad“); break;

}

Serial.println(”GPIO: “+GPIO);

display.clearLine(7);//apaga a linha 7 do display

display.drawString(0,7, ”GPIO: “);

display.drawString(6,7, GPIO.c_str()); //imprime o GPIO

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ESP32
    +關注

    關注

    21

    文章

    1012

    瀏覽量

    18984
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    零知開源——ESP32語音交互系統(AI小智)開發教程

    小智AI聊天機器人是一個基于嵌入式硬件與人工智能技術深度融合的智能交互系統。該項目以ESP32開發板為核心,結合語音喚醒、自然語言處理、音頻解碼播放及圖形化交互界面四大核心模塊,實現人機交互功能
    的頭像 發表于 03-29 15:33 ?6454次閱讀
    零知開源——<b class='flag-5'>ESP32</b>語音交互系統(AI小智)開發教程

    esp32如何接入豆包

    要在 ESP32 上接入豆包工具,本質上是讓 ESP32 設備與豆包的 API 進行通信,以獲取相關服務
    的頭像 發表于 02-05 13:40 ?1795次閱讀
    <b class='flag-5'>esp32</b>如何接入豆包

    ESP32-S3-WROOM-1/ESP32-S3-WROOM-1U技術規格書

    電子發燒友網站提供《ESP32-S3-WROOM-1/ESP32-S3-WROOM-1U技術規格書.pdf》資料免費下載
    發表于 12-07 15:30 ?9次下載

    【代碼分享】基于樂鑫ESP32的串口不定長數據接收方法

    【代碼分享】基于樂鑫ESP32的串口不定長數據接收方法
    的頭像 發表于 11-15 01:02 ?1367次閱讀
    【代碼分享】基于樂鑫<b class='flag-5'>ESP32</b>的串口不定長數據接收<b class='flag-5'>方法</b>

    【AI技術支持】ESP32-C3-MINI-1U模組睡眠模式下喚醒死機問題

    啟明云端/01你是否曾遇到過?在使用ESP32-C3-MINI-1U模組,ESP-IDF版本為idf5.0.1時,在睡眠模式下上電喚醒有概率失敗,模組死機,串口沒有任何信息打印,為什么呢?啟明云端
    的頭像 發表于 10-23 08:01 ?1737次閱讀
    【AI技術支持】<b class='flag-5'>ESP32</b>-C3-MINI-1U模組睡眠模式下<b class='flag-5'>喚醒</b>死機問題

    簡述三種esp32的開發方式是什么

    ESP32是一款由樂鑫(Espressif)推出的低功耗、高性能的Wi-Fi和藍牙雙模無線通信芯片,廣泛應用于物聯網、智能家居、智能硬件等領域。本文將詳細介紹三種ESP32的開發方式:Arduino
    的頭像 發表于 08-20 09:11 ?7565次閱讀

    esp32esp8266代碼共用嗎

    本文將介紹ESP32ESP8266兩款流行的微控制器在代碼共用性方面的可能性與差異性。 一、引言 隨著物聯網技術的飛速發展,越來越多的智能設備開始進入我們的生活。其中,ESP32ESP
    的頭像 發表于 08-19 18:23 ?2243次閱讀

    esp8266和esp32區別是什么

    以下是關于ESP8266和ESP32的主要區別: 處理器和架構 : ESP8266 :使用一個Tensilica L106 80MHz的處理器,屬于Xtensa架構。 ESP32 :使
    的頭像 發表于 08-19 18:16 ?7066次閱讀

    esp32用什么軟件編程

    ESP32是一款由樂鑫(Espressif)推出的低功耗、高性能的Wi-Fi和藍牙雙模微控制器,廣泛應用于物聯網、智能家居、智能穿戴等領域。要對ESP32進行編程,需要選擇合適的編程軟件和開發環境
    的頭像 發表于 08-19 17:24 ?6491次閱讀

    ESP32-WROOM-32E、ESP32-WROOM-32D、ESP32-WROOM-32U 有什么區別?ESP32-WROOM-32 后綴字母代表的意思是?

    Wi-Fi+BT+BLE MCU模組,它們各自具有一些特點和區別,以下是對這款模組的詳細比較和區分方法: 核心功能與用途 共同點 : 款模組都是基于ESP32系列芯片設計的,具有強
    的頭像 發表于 07-17 10:09 ?1.6w次閱讀
    <b class='flag-5'>ESP32</b>-WROOM-32E、<b class='flag-5'>ESP32</b>-WROOM-32D、<b class='flag-5'>ESP32</b>-WROOM-32U  有什么區別?<b class='flag-5'>ESP32</b>-WROOM-32 后綴字母代表的意思是?

    ESP32能取代STM32嗎?哪個更好?

    STM32,以及在何種情況下選擇哪個更好。對比一下ESP32和STM32兩單片機ESP32ESP32是由樂鑫公司(EspressifSystems)推出的一款集
    的頭像 發表于 07-06 08:04 ?1.8w次閱讀
    <b class='flag-5'>ESP32</b>能取代STM32嗎?哪個更好?

    請問ESP32-EYE開發板例程支持修改語音喚醒命令嗎?

    請問ESP32-EYE 開發板例程支持修改語音喚醒命令嗎?該如何修改?
    發表于 06-28 16:23

    請問ESP32-LyraTD-MSC開發板能訪問自建的ASR/TTS服務嗎?

    ESP32-LyraTD-MSC 支持的SDK有三種ESP-ADF、ESP-VA-SDK、ESP-Skainet),能不能基于其中一
    發表于 06-28 06:48

    請問如何獲取ESP32 deepsleep休眠的時長?

    如果ESP32可以被 定時器 和 按鍵 喚醒, 如果它被按鍵喚醒, 有沒有方法獲取\"定時器的計數\", 從而判斷按鍵時ESP32已經休眠
    發表于 06-24 08:09

    ESP32的Station模式SoftAP模式BLE模式,三種模式可以共存嗎?

    現在ESP32三種模式能夠共存嗎? 以前了解,不是很穩定,現在改善了嗎?
    發表于 06-24 06:40
    主站蜘蛛池模板: 国产免费一级高清淫日本片 | 视频免费播放 | 欧美性free | 美女露出扒开尿口让男人桶 | 男女无遮挡在线完整视频 | 色狠狠色综合久久8狠狠色 色狠狠网 | 日韩亚洲欧洲在线com91tv | 老师下面好湿好紧好滑好想要 | 三级黄色在线视频 | 日本在线黄 | 久久亚洲国产视频 | www操com| 22eee在线播放成人免费视频 | 在线观看一二三区 | 亚洲婷婷在线视频 | 一区不卡视频 | 丁香在线视频 | 77788色淫网站女女免费视频 | 性欧美高清 | 欧美激情αv一区二区三区 欧美激情第一欧美在线 | 久青草视频免费视频播放线路1 | 毛片网子 | 激情五月在线 | 4438x成人免费| 美女露出扒开尿口让男人桶 | 国产三a级日本三级日产三级 | 日日日干干干 | 午夜在线观看免费视频 | 欧美三级免费观看 | 黄鳝钻进下面好爽小说 | 国模小丫大尺度啪啪人体 | 日韩黄色录像 | 天天澡天天摸天天爽免费 | 天天爽夜夜爽夜夜爽精品视频 | 色丁香在线 | 女人张腿让男桶免费视频网站 | 国产特级毛片aaaaaa毛片 | 国产在线视频网站 | 女人爽到喷水的视频大全在线观看 | 欧美成人影院 | 日本大片免费一级 |