جدول المحتويات:
- الخطوة 1: مقدمة
- الخطوة 2: طرق تنشيط ESP32
- الخطوة 3: الموقت
- الخطوة 4: التنبيه الخارجي (ext0)
- الخطوة 5: التنبيه الخارجي (ext1)
- الخطوة 6: تنبيه المعالج المساعد ULP
- الخطوة 7: لوحة اللمس
- الخطوة 8: الدخول في وضع السكون العميق
- الخطوة 9: إليك بعض المعلومات الأكثر أهمية
- الخطوة 10: العرض التوضيحي
- الخطوة 11: WiFi NodeMCU-32S ESP-WROOM-32
- الخطوة 12: التجميع
- الخطوة 13: البرنامج
- الخطوة 14: المكتبة المطلوبة
- الخطوة 15: المكتبات والمتغيرات
- الخطوة 16: الإعداد
- الخطوة 17: التكرار والرد وتكوين العرض
- الخطوة 18: Print_wakeup_reason (معرفة سبب الصحوة)
- الخطوة 19: Print_wakeup_touchpad (تعرف على GPIO Touch)
- الخطوة 20: قم بتنزيل الملفات
فيديو: توفير عمر البطارية مع السكون العميق: 20 خطوة
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:40
هل أنت مهتم باستخدام بطارية مع ESP32 الخاص بك؟ إذا كان الأمر كذلك ، فسأناقش اليوم بعض المعلومات الفنية المهمة المتعلقة بهذا الموضوع. نحن نعلم أن هذا المتحكم الدقيق يستهلك الكثير من الطاقة عندما ينقل المعلومات. تستهلك ما يقرب من 190 ملي أمبير. في هذا الفيديو ، سأوضح كيفية الحفاظ على الطاقة من ESP32 مع ما يسمى بوظيفة "النوم العميق". سنقوم بتعيين الشريحة للدخول في هذا الوضع ، والتعرف على طرق الخروج من هذا الوضع ، وإنشاء مثال يوضح ثلاث طرق مختلفة لتنبيه ESP32.
من المهم أن تتذكر أن الراديو ينفق الكثير من الطاقة بدلاً من المعالج. توفير الطاقة مهم جدا. هذا لأن نقاط النهاية (الدوائر التي ترسل المعلومات) غالبًا ما تعمل بالبطارية ويجب أن تستمر حتى خمس سنوات. هناك بعض الشركات المصنعة التي تعد بمدة تصل إلى عشر سنوات ، وهذا صالح للبطاريات عالية الجودة التي لا تستخدم نقاط النهاية كثيرًا. في جميع الحالات الأخرى ، أنصحك باستخدام Deep Sleep لتوفير الطاقة من دائرتك.
الخطوة 1: مقدمة
يحتوي ESP32 على وضع توفير الطاقة ، يسمى "السكون العميق". في هذا الوضع ، يتم إيقاف تشغيل وحدات المعالجة المركزية ، ومعظم ذاكرة الوصول العشوائي ، وجميع الأجهزة الطرفية الرقمية. الأجزاء الوحيدة من الشريحة التي لا يزال من الممكن توصيلها هي وحدة التحكم RTC والأجهزة الطرفية RTC (بما في ذلك معالج ULP) وذاكرة RTC.
لدينا عدة طرق لإيقاظ ESP32 عند النوم. يمكن إعداد مصادر الاستيقاظ في أي وقت قبل الدخول في وضع Deep Sleep.
الخطوة 2: طرق تنشيط ESP32
هناك خمس طرق لتنبيه ESP32:
• الموقت
• التنبيه الخارجي (ext0)
• التنبيه الخارجي (ext1)
• تنشيط المعالج المساعد ULP
• لوحة اللمس
الخطوة 3: الموقت
تحتوي وحدة التحكم RTC على مؤقت مدمج يمكن استخدامه لتنشيط الشريحة بعد فترة زمنية محددة مسبقًا. يتم تحديد الوقت بدقة ميكروثانية.
esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)
time_in_us> هو الوقت بالميكروثانية
الخطوة 4: التنبيه الخارجي (ext0)
تحتوي وحدة RTC IO على منطق لإطلاق الإنذار عندما يدخل أحد RTC GPIOs مستوى منطق محدد مسبقًا. يعد RTC IO جزءًا من مجال الطاقة للأجهزة الطرفية RTC ، لذلك ستبقى الأجهزة الطرفية RTC على قيد الحياة أثناء النوم العميق إذا تم طلب مصدر التنشيط هذا.
esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num، int level)
gpio_num> رقم GPIO المستخدم كمصدر تنشيط. يمكن استخدام GPIOs التي تعمل بنظام RTC فقط: 0 ، 2 ، 4 ، 12-15 ، 25-27 ، 32-39.
المستوى> مستوى الإدخال الذي سيطلق الإنذار (0 = منخفض ، 1 = مرتفع)
الخطوة 5: التنبيه الخارجي (ext1)
تحتوي وحدة التحكم RTC على منطق لتشغيل المنبه باستخدام العديد من RTC GPIOs.
esp_deep_sleep_enable_ext1_wakeup (قناع uint64_t ، esp_ext1_wakeup_mode_t mode)
قناع> قناع بت لأرقام GPIO التي ستؤدي إلى التنشيط. يمكن استخدام GPIOs التي تدعم RTC فقط في هذه الصورة النقطية: 0 ، 2 ، 4 ، 12-15 ، 25-27 ، 32-39.
الوضع> حدد وظيفة المنطق المستخدمة لتحديد حالة التنشيط:
• ESP_EXT1_WAKEUP_ALL_LOW: تنبيه عندما تكون جميع كائنات GPI المحددة في LOW
• ESP_EXT1_WAKEUP_ANY_HIGH: التنبيه عندما تكون أي من كائنات GPI المحددة عالية
الخطوة 6: تنبيه المعالج المساعد ULP
يمكن أن يعمل المعالج المساعد ULP أثناء وجود الشريحة في وضع السكون العميق ويمكن استخدامه للبحث عن المستشعرات ، ومراقبة ADC أو قيم مستشعر اللمس السعوي ، وتنشيط الشريحة عند اكتشاف حدث معين.
يعد المعالج المساعد ULP جزءًا من مجال الطاقة للأجهزة الطرفية RTC ويقوم بتشغيل البرنامج المخزن في ذاكرة RTC البطيئة. لذلك ، سيتم تنشيط الأجهزة الطرفية RTC وذاكرة RTC البطيئة أثناء النوم العميق إذا تم طلب وضع التنشيط هذا.
الخطوة 7: لوحة اللمس
تحتوي وحدة التحكم RTC على منطق لتشغيل الإنذار باستخدام مستشعرات اللمس السعوية. ومع ذلك ، فإن تعريف دبوس اللمس مختلف. يجب أن نستخدم المقاطعة اللمسية لكل من المسامير المرغوبة.
بعد ضبط المقاطعات ، قمنا بتمكين وضع الاستيقاظ لاستخدام المستشعرات.
// تكوين لوحة اللمس كمصدر تنبيه esp_sleep_enable_touchpad_wakeup () ؛
الخطوة 8: الدخول في وضع السكون العميق
بعد ضبط وضع الاستيقاظ ، يكفي أمر واحد لوضع ESP32 في وضع السكون العميق (إنفاق 2.5 ميكرو أمبير أو أقل). أؤكد هنا أن هذه النفقات تأتي من شريحة ESP وليس من اللوحة ، لأن الأخيرة تنفق أكثر.
esp_deep_sleep_start () ،
من هذا الأمر ، يغفو ESP32 ولا يقوم بتنفيذ الأسطر التالية من التعليمات البرمجية على سبيل المثال.
هام: يجب إجراء جميع إعدادات التنبيه قبل تنفيذ الأمر أعلاه.
الخطوة 9: إليك بعض المعلومات الأكثر أهمية
ترجع المكالمة أدناه سبب تنبيه ESP32.
1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP
esp_sleep_get_wakeup_cause () ،
إذا قمنا بتعيين التنبيه بواسطة لوحة اللمس ، فيمكننا استعادة GPIO الذي حدث اللمس من خلال الأمر
esp_sleep_get_touchpad_wakeup_status () ،
في كل مرة يستيقظ فيها ESP32 ، سوف يتنقل خلال الإعداد مرة أخرى. وبالتالي فإن جميع المتغيرات التي لم يتم تحديدها في ذاكرة RTC ستعود إلى حالتها الأصلية.
للاحتفاظ بالمتغيرات في الذاكرة حتى بعد النوم ، استخدم تعريف المتغير في المثال أدناه:
// RTC_DATA_ATTR aloca a varável na memória RTCRTC_DATA_ATTR int bootCount = 0 ؛
الخطوة 10: العرض التوضيحي
يظهر الفيديو البرنامج يعمل ، حسب الصورة.
الخطوة 11: WiFi NodeMCU-32S ESP-WROOM-32
الخطوة 12: التجميع
الخطوة 13: البرنامج
سننشئ الآن برنامجًا حيث سنهيئ ESP32 للدخول في وضع السكون العميق. سيتم إيقاظ هذا بثلاث طرق مختلفة: واحدة للتنبيه الخارجي (ext0) ، وواحدة لـ Timer ، وواحدة لـ Touchpad. لا يمكنهم العمل معًا ، لذلك سنستخدم متغيرًا سيكون بمثابة عداد لعدد المرات التي أعطى فيها ESP32 التمهيد لتكوين طريقة الاستيقاظ.
الخطوة 14: المكتبة المطلوبة
للتحكم في شاشة OLED ، نحتاج إلى مكتبة خارجية. لهذا ، سنقوم بتنزيل مكتبة U8g2.
في Arduino IDE ، انتقل إلى قائمة Sketch >> Include Library >> Manage Libraries….
الخطوة 15: المكتبات والمتغيرات
لقد قمنا بتضمين المكتبة للتحكم في شاشة OLED ، بالإضافة إلى مُنشئ مثيل وحدة تحكم العرض. أيضًا ، نخصص المتغير في ذاكرة RTC. قمنا بتعيين الحساسية لقبول اللمس ، وعامل التحويل بالميكروثانية للثواني ، والوقت الذي ينتقل فيه ESP32 إلى وضع السكون (بالثواني).
# تضمين // biblioteca para contole تعرض oled
// construtor da instancia do controlador do display // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C display (SCL، SDA، U8X8_PIN_NONE) ؛ // RTC_DATA_ATTR aloca a varável na memoria RTC RTC_DATA_ATTR int bootCount = 0 ؛ // sensibilidade para aceitação do toque #define Threshold 40 // fator de convertão de microsegundos para segundos #define uS_TO_S_FACTOR 1000000 // tempo que o ESP32 ficará em modo sleep (em segundos) #define TIME_TO_SLEEP 3
الخطوة 16: الإعداد
في الإعداد ، نزيد عدد مرات حدوث التمهيد. نسمي الوظيفة لطباعة الحذاء الحافز. إذا كان رقم التمهيد هو PAR ، فسنقوم بتعيين ESP32 للاستيقاظ عبر الزر (EXT0). إذا كان من مضاعفات 3 ، فإننا نضبط ESP32 للاستيقاظ بعد وقت محدد. خلافًا لذلك ، قمنا بإعداد دبابيس اللمس السعوية لإيقاظ ESP32. أخيرًا ، قمنا بتعيين Touchpad كمصدر للاستيقاظ وأجبرنا ESP32 على الدخول في وضع السكون.
إعداد باطل () {Serial.begin (115200) ؛ تأخير (1000) ؛ // incrementa o numero de vezes que o BOOT ocorreu ++ bootCount؛ تكوين العرض () ، // chama a função para Imprimir o motivo do BOOT print_wakeup_reason () ؛ // se o numero de boot for PAR configuramos o ESP32 para despertar através do botão (EXT0) if (bootCount٪ 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39، 1) ؛ // 1 = مرتفع ، 0 = منخفض} // se for multiplo de 3 configuramos o ESP32 para despertar depois de um tempo Definido else if (bootCount٪ 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR) ؛ } // caso contario configuramos os pinos de touch capacitivo para despertar o ESP32 else {// Setup interrupt on Touch Pad 5 (GPIO12) touchAttachInterrupt (T5، callback، Threshold)؛ // تكوين لوحة اللمس كمصدر تنبيه esp_sleep_enable_touchpad_wakeup () ؛ } Serial.println (“entrando em modo sleep”)؛ esp_deep_sleep_start ()؛ // força o ESP32 entrar em modo SLEEP}
الخطوة 17: التكرار والرد وتكوين العرض
في الحلقة ، ليس لدينا ما نفعله. ثم ننتقل إلى مقاطعة رد الاتصال إذا كان لدينا شيء نفعله عند حدوث الانقطاع. فيما يتعلق بتكوين العرض ، نقوم بتهيئة العرض وتكوين بعض المعلمات. نطبع على الشاشة عدد المرات التي حدث فيها التمهيد.
// nada a se fazer no loopvoid loop () {} // callback das interrupções void callback () {// caso queira fazer algo ao ocorrer a interrupção} void configurationDisplay () {// inicializa o display e configura alguns parametros display. يبدأ()؛ display.setPowerSave (0) ، // modo powerSave (0-Off؟ 1-On) display.setFont (u8x8_font_torussansbold8_u) ؛ // fonte utilizada // Imprime no display os numero de vezes que aconteceu o BOOT display.drawString (0، 0، "BOOT NUM:")؛ display.drawString (0، 2، String (bootCount).c_str ()) ؛ display.drawString (0، 4، "MOTIVO:")؛ }
الخطوة 18: Print_wakeup_reason (معرفة سبب الصحوة)
هنا ، لدينا وظيفة لطباعة سبب تنبيه ESP32. تحقق من الدبوس واطبع على الشاشة.
// função para imprimir a reasona do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason؛ سبب السلسلة = "" ؛ wakeup_reason = esp_sleep_get_wakeup_cause () ، // recupera a reasona do despertar switch (wakeup_reason) {الحالة 1: السبب = "EXT0 RTC_IO BTN" ؛ استراحة؛ الحالة 2: السبب = "EXT1 RTC_CNTL" ؛ استراحة؛ الحالة 3: السبب = "TIMER" ؛ استراحة؛ الحالة 4: السبب = "TOUCHPAD" ؛ استراحة؛ الحالة 5: السبب = "برنامج ULP" ؛ استراحة؛ الافتراضي: السبب = "NO DS CAUSE" ؛ استراحة؛ } Serial.println (السبب) ؛ display.clearLine (6) ؛ // apaga a linha 6 do display.drawString (0، 6، reason.c_str ())؛ // Imprime a reasona do despertar no display // se despertou por TOUCHPAD، então vamos verificar em qual dos pinos ocorreu if (wakeup_reason == 4) {print_wakeup_touchpad ()؛ // verifica o pino e Imprime no display}}
الخطوة 19: Print_wakeup_touchpad (تعرف على GPIO Touch)
الآن ، في هذه الخطوة ، لدينا وظيفة طباعة الدبوس الذي تم لمسه. استعدنا GPIO الذي أيقظ ESP32 وطبعه على الشاشة.
// função para Imprimir o pino que foi tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin؛ touchPin = esp_sleep_get_touchpad_wakeup_status () ، // recupera o GPIO que despertou o ESP32 String GPIO = ""؛ التبديل (touchPin) {الحالة 0: GPIO = "4" ؛ استراحة؛ الحالة 1: GPIO = "0" ؛ استراحة؛ الحالة 2: GPIO = "2" ؛ استراحة؛ الحالة 3: GPIO = "15" ؛ استراحة؛ الحالة 4: GPIO = "13" ؛ استراحة؛ الحالة 5: GPIO = "12" ؛ استراحة؛ الحالة 6: GPIO = "14" ؛ استراحة؛ الحالة 7: GPIO = "27" ؛ استراحة؛ الحالة 8: GPIO = "33" ؛ استراحة؛ الحالة 9: GPIO = "32" ؛ استراحة؛ الافتراضي: Serial.println ("Wakeup not by touchpad") ؛ استراحة؛ } Serial.println ("GPIO:" + GPIO) ؛ display.clearLine (7) ؛ // apaga a linha 7 do display.drawString (0، 7، "GPIO:")؛ display.drawString (6، 7، GPIO.c_str ()) ؛ // Imprime o GPIO}
الخطوة 20: قم بتنزيل الملفات
بي دي إف
انا لا
موصى به:
كيفية مضاعفة عمر البطارية لمصابيح AAA: 3 خطوات
كيفية مضاعفة عمر البطارية لمصابيح AAA ثلاثية الأبعاد: عند استخدام مصابيح LED بقوة 3 وات تعمل ببطاريات AAA ، ستتوقع أن تستمر لمدة 30 دقيقة تقريبًا. هناك طريقة لمضاعفة وقت التشغيل ثلاث مرات باستخدام بطاريات AA ، والتي سأوضحها لك عن طريق توصيل حامل بطارية AA بها
يوم من الأسبوع ، التقويم ، الوقت ، الرطوبة / درجة الحرارة مع توفير البطارية: 10 خطوات (بالصور)
يوم من الأسبوع والتقويم والوقت والرطوبة / درجة الحرارة مع موفر البطارية: وضع توفير الطاقة هنا هو ما يميز Instructable عن الأمثلة الأخرى التي تعرض أيام الأسبوع والشهر واليوم من الشهر والوقت والرطوبة ودرجة الحرارة. هذه القدرة هي التي تسمح بتشغيل هذا المشروع من بطارية ، دون
كيفية اختراق مستشعر درجة الحرارة لإطالة عمر البطارية: 4 خطوات
كيفية اختراق مستشعر درجة الحرارة لعمر أطول للبطارية: إن Inkbird IBS-TH1 هو جهاز صغير رائع لتسجيل درجة الحرارة والرطوبة على مدار بضع ساعات أو أيام. يمكن ضبطه لتسجيل كل ثانية حتى كل 10 دقائق ، ويقوم بإبلاغ البيانات عبر Bluetooth LE إلى هاتف ذكي يعمل بنظام Android أو iOS. التطبيق
توفير المياه والمال باستخدام جهاز مراقبة مياه الاستحمام: 15 خطوة (بالصور)
توفير المياه والمال باستخدام جهاز مراقبة مياه الدش: أيهما يستخدم المزيد من الماء - حمام أم دش؟ كنت أفكر مؤخرًا في هذا السؤال ، وأدركت أنني لا أعرف في الواقع كمية المياه المستخدمة عند الاستحمام. أعلم عندما أكون في الحمام أحيانًا يتجول عقلي ، أفكر في مكان رائع
زيادة عمر البطارية للإلكترونيات: 8 خطوات
زيادة عمر البطارية للإلكترونيات: في هذا الدليل (حسنًا ، ليس حقًا تعليمات) ، سأعرض لك بعض النصائح والحيل لزيادة عمر بعض أنواع البطاريات المختلفة للإلكترونيات. الحياة للإلكترونيات وس