void BeginSleep() { touchAttachInterrupt(T7, callback7, Threshold); touchAttachInterrupt(T8, callback8, Threshold); touchAttachInterrupt(T9, callback9, Threshold); // SleepTimer = (SleepDuration * 60 - ((CurrentMin % SleepDuration) * 60 + CurrentSec)) + Delta; //Some ESP32 have a RTC that is too fast to maintain accurate time, so add an offset SleepTimer = SleepDuration * 60; esp_sleep_enable_timer_wakeup(SleepTimer * 1000000LL); // in Secs, 1000000LL converts to Secs as unit = 1uSec // Serial.println("Awake for : " + String((millis() - StartTime) / 1000.0, 3) + "-secs"); Serial.println("Entering " + String(SleepTimer) + " (secs) of sleep time"); Serial.println("Starting deep-sleep period..."); esp_sleep_enable_ext1_wakeup(((uint64_t)(((uint64_t)1) << BUTTON_1)), ESP_EXT1_WAKEUP_ALL_LOW); esp_sleep_enable_touchpad_wakeup(); esp_deep_sleep_start(); // Sleep for e.g. 30 minutes } void print_GPIO_wake_up() { int GPIO_reason = esp_sleep_get_ext1_wakeup_status(); Serial.print("GPIO that triggered the wake up: GPIO "); // "GPIO-контакт, ставший триггером пробуждения: GPIO" Serial.println((log(GPIO_reason)) / log(2), 0); } void callback7() { sen = 7; delay(1000); // Serial.begin(115200); // delay(1000); //digitalWrite(22, HIGH); // пустая функция обратного вызова //Функция callback() будет выполнена, только если ESP32 будет «разбуженной». //Если ESP32 в режиме сна, и вы коснулись контакта T3, а потом сразу отпустили его, //то плата «проснется», но функция callback() от этого не запустится. //Для того, чтобы она запустилась, вам необходимо какое-то время нажимать на контакт. //В нашем случае функция обратного вызова callback() будет пустой. // Serial.println("callback T7"); } void callback8() { sen = 8; delay(1000); } void callback9() { sen = 9; delay(1000); } void print_wakeup_reason() { esp_sleep_wakeup_cause_t wakeup_reason; wakeup_reason = esp_sleep_get_wakeup_cause(); switch (wakeup_reason) { case 5 : Serial.println("Wakeup caused by touchpad"); tik = 1; break; // "Пробуждение от сенсорных контактов" case 1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); tik = 1; sen = 0; break; // "Пробуждение от внешнего сигнала при помощи RTC_CNTL" case 3 : Serial.println("Wakeup caused by external signal using RTC_IO"); tik = 1; sen = 0; break; // "Пробуждение от внешнего сигнала при помощи RTC_IO" case 4 : Serial.println("Wakeup caused by timer"); sen = 0; break; // "Пробуждение по таймеру" case 2 : Serial.println("Wakeup caused by ULP program"); tik = 1; sen = 0; break; // "Пробуждение от ULP-программы" default : Serial.println("Wakeup was not caused by deep sleep"); tik = 1; sen = 0; break; // "Пробуждение не связано с режимом глубокого сна" } } void print_wakeup_touchpad() { touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status(); sen = touchPin; /* switch(touchPin) { case 0 : Serial.println("Touch detected on GPIO 4"); break; // "Обнаружено касание на контакте GPIO4" case 1 : Serial.println("Touch detected on GPIO 0"); break; // "Обнаружено касание на контакте GPIO0" case 2 : Serial.println("Touch detected on GPIO 2"); break; // "Обнаружено касание на контакте GPIO2" case 3 : Serial.println("Touch detected on GPIO 15"); break; // "Обнаружено касание на контакте GPIO15" case 4 : Serial.println("Touch detected on GPIO 13"); break; // "Обнаружено касание на контакте GPIO13" case 5 : Serial.println("Touch detected on GPIO 12"); break; // "Обнаружено касание на контакте GPIO12" case 6 : Serial.println("Touch detected on GPIO 14"); break; // "Обнаружено касание на контакте GPIO14" case 7 : Serial.println("Touch detected on GPIO 27"); break; // "Обнаружено касание на контакте GPIO27" case 8 : Serial.println("Touch detected on GPIO 33"); break; // "Обнаружено касание на контакте GPIO33" case 9 : Serial.println("Touch detected on GPIO 32"); break; // "Обнаружено касание на контакте GPIO32" default : Serial.println("Wakeup not by touchpad"); break; // "Пробуждение вызвано не касанием" }*/ }