دليل · استهلاك منخفض · بطارية
شغّل مستشعر ESP32 لمدة عام من بطارية واحدة
شريحة ESP32 مع تشغيل Wi-Fi تسحب نحو 160–260 mA وتُفرِغ بطارية LiPo في ساعات. لكن مستشعر البطارية لا يحتاج أن يبقى مستيقظًا — فهو يستيقظ ويقرأ ويرسل ثم يعود إلى النوم. في وضع deep sleep تسحب الشريحة نفسها نحو 10 µA. هذا هو الفرق بين ساعات وعام كامل.
أوضاع السكون، بدلالة التيار
- Active + Wi-Fi — نحو 160–260 mA (ذُرى أعلى أثناء الإرسال).
- Modem sleep — الـ CPU يعمل والراديو مطفأ — عشرات من mA.
- Light sleep — نحو 0.8 mA، مع حفظ الـ RAM والحالة، واستيقاظ سريع.
- Deep sleep — نحو 10 µA، ولا يبقى حيًّا سوى الـ RTC.
- Hibernation — نحو 5 µA، وكل شيء تقريبًا مطفأ.
وضع deep sleep هو الحل الأمثل لمستشعرات البطارية: سحب بالميكرو أمبير، ويستيقظ بمؤقّت أو بطرف.
نمط «استيقظ–اعمل–نم»
وضع deep sleep ليس إيقافًا مؤقتًا — بل هو عمليًا إعادة إقلاع. يتوقف الـ CPU، وتُفقَد الـ RAM، وعند
الاستيقاظ يبدأ برنامجك من setup() مجددًا. لذلك تضع العمل داخل setup() ثم تنام:
#include "esp_sleep.h"
#define uS_PER_S 1000000ULL
RTC_DATA_ATTR int bootCount = 0; // يبقى محفوظًا خلال السكون في ذاكرة RTC
void setup() {
Serial.begin(115200);
bootCount++; // deep sleep = إقلاع جديد، لذا يُنفَّذ setup من جديد
// ... اتصل بـ Wi-Fi، اقرأ المستشعر، أرسل البيانات ...
esp_sleep_enable_timer_wakeup(10 * 60 * uS_PER_S); // الاستيقاظ بعد 10 دقائق
// esp_sleep_enable_ext0_wakeup(GPIO_NUM_33, 0); // ...أو عند طرف (PIR، ريد)
esp_deep_sleep_start(); // كل ما تحت هذا السطر لن يُنفَّذ أبدًا
}
void loop() {} // غير مستخدَمة — العمل كله يجري داخل setup() قليل من ذاكرة RTC (RTC_DATA_ATTR) يبقى محفوظًا خلال السكون، فتستطيع الاحتفاظ
بعدّاد أو بآخر حالة بين مرات الاستيقاظ دون لمس الـ flash.
ما الذي يمكن أن يوقظها
- المؤقّت — حصان العمل: الاستيقاظ كل N دقيقة لأخذ قراءة وإرسالها.
- طرف (ext0 / ext1) — مستشعر PIR أو مفتاح ريد أو زر يوقظها عند حدث.
- اللمس — لوحة لمس سعوية.
- المعالج المساعد ULP — نواة صغيرة تعمل دائمًا يمكنها مراقبة مستشعر وإيقاظ الـ CPU الرئيسي فقط عند تجاوز عتبة — لأقل متوسط تيار على الإطلاق.
حساب عمر البطارية
المهم هو متوسط التيار. لنفترض أنك تستيقظ لمدة ثانيتين عند 150 mA كل
10 دقائق وتنام عند 10 µA بقية الوقت. نسبة الاستيقاظ هي 2 ث / 600 ث ≈ 0.33٪،
فيكون المتوسط تقريبًا 0.0033 × 150 mA + 10 µA ≈ 0.5 mA. عندئذ تدوم بطارية 18650 سعة
2000 mAh مدة نحو 4000 ساعة — قرابة خمسة أشهر، وتقليص زمن الاستيقاظ أو الإرسال بوتيرة أقل
يدفعها إلى ما بعد العام.
الفخّ رقم واحد: لوحة التطوير لديك لن تبلغ 10 µA أبدًا
يقع الجميع في هذا. وحدة ESP32 عارية تنام عند نحو 10 µA — لكن لوحة التطوير فيها أيضًا مؤشر LED طاقة يعمل دائمًا، وشريحة USB-serial (CH340/CP2102)، ومنظّم AMS1117، وكل منها يحرق مِلّي أمبيرات على مدار الساعة. فـ«تنام» لوحتك عند 5–20 mA وتموت البطارية في أيام. الحلول: انزع مؤشر LED الطاقة، أو استخدم لوحة مصمَّمة للاستهلاك المنخفض، أو شغّل وحدة عارية مع منظّم كفؤ. راجع دليل التغذية والمنظّمات — فنفس منظّم AMS1117 الذي ينهار جهده تحت Wi-Fi يهدر بطاريتك أيضًا أثناء النوم.
عصر المزيد
- قلّص زمن الاستيقاظ — إعادة الاتصال بـ Wi-Fi هي التكلفة الكبرى. عنوان IP ثابت وقناة AP مخزّنة يقلّصانه من ثوانٍ إلى أقل من ثانية.
- أرسل بوتيرة أقل — كل مضاعفة للفترة الزمنية تضاعف عمر البطارية تقريبًا.
- احفظ الحالة في ذاكرة RTC بدل إعادة الاتصال أو إعادة قراءة الإعدادات في كل استيقاظ.
- اختر شريحة منخفضة الاستهلاك — تستهلك S2 أو C3 في السكون أقل من ESP32 الكلاسيكية؛ راجع دليل الشرائح.
يحوّل وضع deep sleep شريحة ESP32 من لوحة مربوطة بالمكتب تُغذَّى عبر USB إلى مستشعر لاسلكي حقيقي يمكنك لصقه على الحائط ونسيانه لموسم كامل.
هل تنفد البطارية في أيام لا في أشهر؟ عادةً ما يكون السبب المنظّم ومؤشر LED.