| 
									
										
										
										
											2017-06-29 13:01:39 +05:30
										 |  |  | /*
 | 
					
						
							|  |  |  | 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(){ | 
					
						
							| 
									
										
										
										
											2017-09-12 11:09:59 +03:00
										 |  |  |   esp_sleep_wakeup_cause_t wakeup_reason; | 
					
						
							| 
									
										
										
										
											2017-06-29 13:01:39 +05:30
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-12 11:09:59 +03:00
										 |  |  |   wakeup_reason = esp_sleep_get_wakeup_cause(); | 
					
						
							| 
									
										
										
										
											2017-06-29 13:01:39 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |   switch(wakeup_reason) | 
					
						
							|  |  |  |   { | 
					
						
							| 
									
										
										
										
											2018-11-19 17:41:07 +02:00
										 |  |  |     case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break; | 
					
						
							|  |  |  |     case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break; | 
					
						
							|  |  |  |     case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break; | 
					
						
							|  |  |  |     case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break; | 
					
						
							|  |  |  |     case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break; | 
					
						
							|  |  |  |     default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break; | 
					
						
							| 
									
										
										
										
											2017-06-29 13:01:39 +05:30
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  | Method to print the touchpad by which ESP32 | 
					
						
							|  |  |  | has been awaken from sleep | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | void print_wakeup_touchpad(){ | 
					
						
							|  |  |  |   touch_pad_t pin; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-12 11:09:59 +03:00
										 |  |  |   touchPin = esp_sleep_get_touchpad_wakeup_status(); | 
					
						
							| 
									
										
										
										
											2017-06-29 13:01:39 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |   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
 | 
					
						
							| 
									
										
										
										
											2017-09-12 11:09:59 +03:00
										 |  |  |   esp_sleep_enable_touchpad_wakeup(); | 
					
						
							| 
									
										
										
										
											2017-06-29 13:01:39 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  |   //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
 | 
					
						
							|  |  |  | } |