پیشرفته⏱ 17 دقیقه مطالعه

در پروژه‌های باتری‌خور (مثل سنسورهای بی‌سیم)، مصرف انرژی حیاتی است. ESP32 چند حالت کم‌مصرف دارد که مهم‌ترین آن‌ها Deep Sleep است؛ در این حالت تقریباً همهٔ بخش‌های تراشه خاموش می‌شوند و مصرف جریان از چند ده میلی‌آمپر به چند میکروآمپر می‌رسد.

ورود به حالت Deep Sleep با تایمر بیدارباش

PYTHON
from machine import deepsleep, RTC
from time import sleep

print("در حال انجام کار...")
sleep(2)

print("رفتن به خواب عمیق برای ۱۰ ثانیه")
deepsleep(10_000)  # میلی‌ثانیه
⚠️ هشدار

با اجرای deepsleep، برنامه از ابتدا (مثل ریست شدن) دوباره اجرا می‌شود؛ متغیرهای موجود در RAM از بین می‌روند، مگر داده را در RTC memory یا حافظهٔ فلش ذخیره کرده باشید.

تشخیص علت بیدار شدن

PYTHON
import machine

reason = machine.reset_cause()
if reason == machine.DEEPSLEEP_RESET:
    print("از خواب عمیق بیدار شدم")
else:
    print("روشن‌شدن عادی (پاور یا ریست)")

کاربرد عملی

سناریوی رایج: بیدار شدن هر ۱۰ دقیقه، خواندن سنسور، ارسال داده با Wi-Fi/MQTT (درس‌های ۱۱ و ۱۳)، و بازگشت به خواب عمیق. این الگو می‌تواند عمر باتری یک سنسور بی‌سیم را از چند روز به چند ماه برساند.

نمونه شبیه‌سازی رفتار برنامه (خواب عمیق را در سریال مانیتور مشاهده کنید) باز کردن در Wokwi ↗

این یک شبیه‌سازی واقعی و قابل اجراست؛ روی دکمه پخش (▶) در Wokwi بزنید تا کد روی برد مجازی ESP32 اجرا شود.

🛠️ کارگاه عملی

کارگاه عملی: یک برنامه بنویسید که هر بار پس از بیدار شدن، یک شمارنده را در حافظهٔ RTC (machine.RTC().memory) افزایش دهد و چاپ کند.

❓ در حالت Deep Sleep، مقدار متغیرهای عادی برنامه (در RAM) چه می‌شود؟
طراحی و توسعه: امین شیخ نجدیglcd.ir