// =====================================================
// درس Deep Sleep — بیدارشدن خودکار بعد از زمان مشخص
// =====================================================
#include <esp_sleep.h>
// RTC_DATA_ATTR باعث میشود این متغیر در حافظهٔ RTC ذخیره شود
// و برخلاف بقیهٔ متغیرها، حتی بعد از Deep Sleep هم مقدارش از بین نرود
RTC_DATA_ATTR int bootCount = 0;
#define uS_TO_S_FACTOR 1000000ULL // ضریب تبدیل میکروثانیه به ثانیه
#define TIME_TO_SLEEP 10 // مدت خواب: ۱۰ ثانیه
void setup() {
Serial.begin(115200);
delay(1000);
bootCount++;
Serial.println("---------------------------");
Serial.print("این بار بیداری شمارهٔ: ");
Serial.println(bootCount);
// تنظیم تایمر داخلی برای بیدارشدن خودکار بعد از TIME_TO_SLEEP ثانیه
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
Serial.println("در حال رفتن به خواب عمیق برای ۱۰ ثانیه...");
Serial.flush(); // مطمئن میشویم پیام قبل از خواب رفتن کامل چاپ شده
esp_deep_sleep_start(); // از همینجا به بعد چیزی اجرا نمیشود؛ برد کاملاً «ریست» میشود
}
void loop() {
// در حالت Deep Sleep هرگز به اینجا نمیرسیم — چون بعد از بیدار شدن، setup() از نو اجرا میشود
}