#include "esp_sleep.h"
static const gpio_num_t PIN_SWITCH = GPIO_NUM_13;
static const gpio_num_t PIN_LED = GPIO_NUM_15;
void enterDeepSleep() {
digitalWrite(PIN_LED, LOW); // turn LED OFF before sleep
delay(50); // small safety delay
// Configure wakeup on GPIO13, trigger when LOW (button pressed)
esp_sleep_enable_ext1_wakeup(
(1ULL << PIN_SWITCH),
ESP_EXT1_WAKEUP_ALL_LOW
);
esp_deep_sleep_start(); // never returns
}
void setup() {
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, LOW);
pinMode(PIN_SWITCH, INPUT_PULLUP);
// Optional: slow debug
Serial.begin(115200);
delay(200);
Serial.println("Booting in NORMAL MODE");
}
void loop() {
// check if user pressed button → go to deep sleep
if (digitalRead(PIN_SWITCH) == LOW) {
Serial.println("Button pressed → entering DEEP SLEEP");
delay(1000);
enterDeepSleep();
}
// normal mode: blink LED 1Hz
digitalWrite(PIN_LED, HIGH);
delay(250);
digitalWrite(PIN_LED, LOW);
delay(250);
}