mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-11-03 23:51:39 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
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_sleep_wakeup_cause_t wakeup_reason;
 | 
						|
 | 
						|
  wakeup_reason = esp_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_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_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
 | 
						|
}
 |