mirror of
https://github.com/0xFEEDC0DE64/arduino-esp32.git
synced 2025-07-29 18:27:15 +02:00
ESP32: Add DeepSleep examples (#473)
*Added a Timer wakeup example *Added a Touch wakeup example *Added an external source wakeup example
This commit is contained in:
committed by
Me No Dev
parent
cfde557916
commit
1be6a5c361
@ -0,0 +1,93 @@
|
||||
/*
|
||||
Deep Sleep with Touch Wake Up
|
||||
=====================================
|
||||
This code displays how to use deep sleep with
|
||||
a touch as a wake up source and how to store data in
|
||||
RTC memory to use it over reboots
|
||||
|
||||
This code is under Public Domain License.
|
||||
|
||||
Author:
|
||||
Pranav Cherukupalli <cherukupallip@gmail.com>
|
||||
*/
|
||||
|
||||
#define Threshold 40 /* Greater the value, more the sensitivity */
|
||||
|
||||
RTC_DATA_ATTR int bootCount = 0;
|
||||
touch_pad_t touchPin;
|
||||
/*
|
||||
Method to print the reason by which ESP32
|
||||
has been awaken from sleep
|
||||
*/
|
||||
void print_wakeup_reason(){
|
||||
esp_deep_sleep_wakeup_cause_t wakeup_reason;
|
||||
|
||||
wakeup_reason = esp_deep_sleep_get_wakeup_cause();
|
||||
|
||||
switch(wakeup_reason)
|
||||
{
|
||||
case 1 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
|
||||
case 2 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
|
||||
case 3 : Serial.println("Wakeup caused by timer"); break;
|
||||
case 4 : Serial.println("Wakeup caused by touchpad"); break;
|
||||
case 5 : Serial.println("Wakeup caused by ULP program"); break;
|
||||
default : Serial.println("Wakeup was not caused by deep sleep"); break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Method to print the touchpad by which ESP32
|
||||
has been awaken from sleep
|
||||
*/
|
||||
void print_wakeup_touchpad(){
|
||||
touch_pad_t pin;
|
||||
|
||||
touchPin = esp_deep_sleep_get_touchpad_wakeup_status();
|
||||
|
||||
switch(touchPin)
|
||||
{
|
||||
case 0 : Serial.println("Touch detected on GPIO 4"); break;
|
||||
case 1 : Serial.println("Touch detected on GPIO 0"); break;
|
||||
case 2 : Serial.println("Touch detected on GPIO 2"); break;
|
||||
case 3 : Serial.println("Touch detected on GPIO 15"); break;
|
||||
case 4 : Serial.println("Touch detected on GPIO 13"); break;
|
||||
case 5 : Serial.println("Touch detected on GPIO 12"); break;
|
||||
case 6 : Serial.println("Touch detected on GPIO 14"); break;
|
||||
case 7 : Serial.println("Touch detected on GPIO 27"); break;
|
||||
case 8 : Serial.println("Touch detected on GPIO 33"); break;
|
||||
case 9 : Serial.println("Touch detected on GPIO 32"); break;
|
||||
default : Serial.println("Wakeup not by touchpad"); break;
|
||||
}
|
||||
}
|
||||
|
||||
void callback(){
|
||||
//placeholder callback function
|
||||
}
|
||||
|
||||
void setup(){
|
||||
Serial.begin(115200);
|
||||
delay(1000); //Take some time to open up the Serial Monitor
|
||||
|
||||
//Increment boot number and print it every reboot
|
||||
++bootCount;
|
||||
Serial.println("Boot number: " + String(bootCount));
|
||||
|
||||
//Print the wakeup reason for ESP32 and touchpad too
|
||||
print_wakeup_reason();
|
||||
print_wakeup_touchpad();
|
||||
|
||||
//Setup interrupt on Touch Pad 3 (GPIO15)
|
||||
touchAttachInterrupt(T3, callback, Threshold);
|
||||
|
||||
//Configure Touchpad as wakeup source
|
||||
esp_deep_sleep_enable_touchpad_wakeup();
|
||||
|
||||
//Go to sleep now
|
||||
Serial.println("Going to sleep now");
|
||||
esp_deep_sleep_start();
|
||||
Serial.println("This will never be printed");
|
||||
}
|
||||
|
||||
void loop(){
|
||||
//This will never be reached
|
||||
}
|
Reference in New Issue
Block a user