Mündəricat:
- Addım 1: Giriş
- Addım 2: ESP32 -ni oyatmağın yolları
- Addım 3: Taymer
- Addım 4: Xarici Uyanma (ext0)
- Addım 5: Xarici Uyanma (ext1)
- Addım 6: ULP Coprocessor Wakeup
- Addım 7: Touchpad
- Addım 8: Dərin yuxu rejiminə daxil olun
- Addım 9: Burada daha vacib məlumatlar var
- Addım 10: Nümayiş
- Addım 11: WiFi NodeMCU-32S ESP-WROOM-32
- Addım 12: Quraşdırma
- Addım 13: Proqram
- Addım 14: Kitabxana tələb olunur
- Addım 15: Kitabxanalar və Dəyişənlər
- Addım 16: Quraşdırma
- Addım 17: Loop, Callback & ConfigureDisplay
- Addım 18: Print_wakeup_reason (Oyanışın Səbəbini bilmək)
- Addım 19: Print_wakeup_touchpad (GPIO Touch ilə tanış olun)
- Addım 20: Dosyaları Yükləyin
Video: Dərin yuxu ilə batareya ömrünə qənaət: 20 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
ESP32 ilə batareya istifadə etmək istəyirsinizmi? Əgər belədirsə, bu gün bu mövzu ilə əlaqədar bəzi vacib texniki məlumatları müzakirə edəcəyəm. Bu mikrokontrolörün məlumat ötürərkən çox enerji sərf etdiyini bilirik. 190 milliampa yaxın istehlak edir. Bu videoda "Dərin Yuxu" funksiyası ilə ESP32-dən enerjiyə necə qənaət olunacağını göstərəcəyəm. Çipi bu rejimə daxil edəcəyik, bu rejimdən çıxmağın yollarını öyrənəcəyik və ESP32 -ni oyatmağın üç fərqli yolunu göstərən bir nümunə yaradacağıq.
Radionun prosessordan çox enerji sərf etdiyini xatırlamaq vacibdir. Enerji qənaəti çox vacibdir. Bunun səbəbi, son nöqtələrin (məlumat göndərən dövrələr) tez-tez batareya ilə işləməsi və beş ilə qədər davam etməsidir. On ilədək müddətə söz verən bəzi istehsalçılar var və bu, son nöqtələri çox istifadə etməyən yüksək keyfiyyətli batareyalar üçün etibarlıdır. Bütün digər hallarda, dövrənizdən enerjiyə qənaət etmək üçün Dərin Yuxudan istifadə etməyi məsləhət görürəm.
Addım 1: Giriş
ESP32, "Dərin Yuxu" adlanan enerji qənaət rejiminə malikdir. Bu rejimdə CPU, əksər RAM və bütün rəqəmsal saat qurğuları söndürülür. Hələ də bağlana bilən çipin yeganə hissəsi RTC nəzarətçisi, RTC ətraf qurğuları (ULP coprosessor daxil olmaqla) və RTC yaddaşlarıdır.
Yuxuda ESP32 -ni oyatmağın bir neçə yolu var. Dərin Yuxu rejiminə girmədən əvvəl istənilən vaxt oyanma mənbələri qurula bilər.
Addım 2: ESP32 -ni oyatmağın yolları
ESP32 -ni oyatmağın beş yolu var:
• Taymer
• Xarici oyanış (ext0)
• Xarici oyanış (daxili 1)
• ULP prosessorunun oyanması
• Touchpad
Addım 3: Taymer
RTC nəzarətçisində əvvəlcədən təyin edilmiş bir müddətdən sonra çipi aktivləşdirmək üçün istifadə edilə bilən quraşdırılmış bir taymer var. Vaxt mikrosaniyə dəqiqliyi ilə təyin olunur.
esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)
time_in_us> mikrosaniyələrdəki vaxtdır
Addım 4: Xarici Uyanma (ext0)
RTC IO modulu, RTC GPIO'larından biri əvvəlcədən təyin edilmiş bir məntiq səviyyəsinə girəndə həyəcanı tetiklemek üçün məntiq ehtiva edir. RTC IO, RTC ətraf qurğularının güc sahəsinin bir hissəsidir, buna görə də bu aktivləşdirmə mənbəyi tələb olunarsa, RTC ətraf qurğuları Dərin Yuxu zamanı canlı olaraq saxlanılacaq.
esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int səviyyəsi)
gpio_num> aktivləşdirmə mənbəyi kimi istifadə olunan GPIO nömrəsi. Yalnız RTC işləyən GPIO-lardan istifadə edilə bilər: 0, 2, 4, 12-15, 25-27, 32-39.
səviyyə> həyəcanı tetikleyecek giriş səviyyəsi (0 = LOW, 1 = HIGH)
Addım 5: Xarici Uyanma (ext1)
RTC nəzarətçisində birdən çox RTC GPIO istifadə edərək zəngli saatı işə salmaq üçün məntiq var.
esp_deep_sleep_enable_ext1_wakeup (uint64_t maska, esp_ext1_wakeup_mode_t rejimi)
maska> aktivləşdirməyə səbəb olacaq GPIO nömrələrinin bit maskası. Bu bitmapdə yalnız RTC effektiv GPIO-lardan istifadə edilə bilər: 0, 2, 4, 12-15, 25-27, 32-39.
rejimi> aktivləşdirmə vəziyyətini təyin etmək üçün istifadə olunan məntiq funksiyasını seçin:
• ESP_EXT1_WAKEUP_ALL_LOW: bütün seçilmiş GPIO LOW -da olduqda oyanır
• ESP_EXT1_WAKEUP_ANY_HIGH: seçilmiş GPIO -dan hər hansı biri YÜKSƏK olduqda oyanır
Addım 6: ULP Coprocessor Wakeup
ULP coprosessor, çip Dərin Yuxuda olarkən işləyə bilər və sensorlar axtarmaq, ADC və ya kapasitiv toxunma sensoru dəyərlərini izləmək və müəyyən bir hadisə aşkar edildikdə çipi aktivləşdirmək üçün istifadə edilə bilər.
ULP prosessoru, RTC ətraf qurğularının güc sahəsinin bir hissəsidir və yavaş yaddaş RTC -də saxlanılan proqramı idarə edir. Buna görə, bu aktivləşdirmə rejimi tələb olunarsa, Dərin Yuxu zamanı RTC ətraf qurğuları və RTC yavaş yaddaşı aktiv ediləcək.
Addım 7: Touchpad
RTC nəzarətçisi, kapasitif toxunma sensorlarından istifadə edərək həyəcanı tetiklemek üçün məntiqə malikdir. Toxunma pininin tərifi fərqli olsa da. İstənilən sancaqlar üçün toxunma kəsilməsini istifadə etməliyik.
Fasilələri təyin etdikdən sonra, sensorlardan istifadə etmək üçün oyanma rejimini aktiv etdik.
// Touchpad -ı oyanma mənbəyi olaraq konfiqurasiya edin esp_sleep_enable_touchpad_wakeup ();
Addım 8: Dərin yuxu rejiminə daxil olun
Oyanma rejimi qurduqdan sonra, ESP32-ni Dərin Yuxu rejiminə keçirmək üçün tək bir əmr (2,5 μA və ya daha az xərcləmə) kifayətdir. Burada qeyd edirəm ki, bu xərc ESP çipindən deyil, sonuncusu daha çox xərclədiyi üçün.
esp_deep_sleep_start ();
Bu əmrdən ESP32 yuxuya gedir və məsələn növbəti kod sətirlərini icra etmir.
Vacibdir: Yuxarıdakı əmri yerinə yetirməzdən əvvəl bütün oyanma parametrləri edilməlidir.
Addım 9: Burada daha vacib məlumatlar var
Aşağıdakı zəng ESP32 oyanmasının səbəbini qaytarır.
1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP
esp_sleep_get_wakeup_cause ();
Toxunma paneli ilə oyanışı təyin etsək, toxunuşun əmr vasitəsilə baş verdiyi GPIO -nu bərpa edə bilərik
esp_sleep_get_touchpad_wakeup_status ();
ESP32 hər dəfə oyandıqda, yenidən qurulma dövrü keçir. Beləliklə, RTC yaddaşında təyin olunmayan bütün dəyişənlər öz vəziyyətlərinə qayıdacaqlar.
Yuxuya getdikdən sonra da dəyişənləri yaddaşda saxlamaq üçün aşağıdakı nümunədəki dəyişən bəyannaməsini istifadə edin:
// RTC_DATA_ATTR və ya RTCRTC_DATA_ATTR üçün bootCount = 0;
Addım 10: Nümayiş
Videoda, görüntüyə uyğun olaraq proqramın işlədiyi göstərilir.
Addım 11: WiFi NodeMCU-32S ESP-WROOM-32
Addım 12: Quraşdırma
Addım 13: Proqram
İndi Dərin Yuxu rejiminə girmək üçün ESP32 -ni konfiqurasiya edəcəyimiz bir proqram hazırlayacağıq. Bu üç fərqli şəkildə oyanacaq: biri Xarici oyanma (ext0) üçün, biri Taymer üçün, biri də Touchpad üçün. Birlikdə işləyə bilməzlər, buna görə də oyanma yolunu konfiqurasiya etmək üçün ESP32 -nin Boot -a verdiyi saya görə sayğac olacaq dəyişəndən istifadə edəcəyik.
Addım 14: Kitabxana tələb olunur
OLED ekranını idarə etmək üçün xarici kitabxanaya ehtiyacımız var. Bunun üçün U8g2 kitabxanasını yükləyəcəyik.
Arduino IDE -də, Sketch menyusuna keçin >> Kitabxanaya daxil olun >> Kitabxanaları idarə edin …..
Addım 15: Kitabxanalar və Dəyişənlər
OLED displeyə nəzarət etmək üçün kitabxananı, eləcə də displey nəzarətçisi nümunəsinin konstruktorunu daxil etdik. Ayrıca, dəyişəni RTC yaddaşına ayırırıq. Toxunma qəbulu üçün həssaslığı, mikrosaniyə dönüşüm faktorunu və ESP32 -nin yuxu rejiminə keçmə müddətini (saniyələrlə) təyin edirik.
#include // biblioteca para controle do display
// göstərici qurmaq üçün nəzarətçi // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C göstəricisi (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR və ya RTC_DATA_ATTR int bootCount = 0 yadda saxlanılır; // sensibiladade do toque #deefine Threshold 40 // segundos üçün mikrofonlar #define uS_TO_S_FACTOR 1000000 // tempi ESP32 rejimində yuxu (em sequndalar) #TIME_TO_SLEEP 3 təyin edin
Addım 16: Quraşdırma
Quraşdırmada, Önyüklənmənin baş vermə sayını artırırıq. Boot motifini çap etmək funksiyasını çağırırıq. Boot nömrəsi PAR olarsa, ESP32 -ni (EXT0) düyməsi ilə oyanmağa qururuq. 3 -dən çoxdursa, ESP32 -ni müəyyən bir müddətdən sonra oyanmağa qururuq. Əks təqdirdə, ESP32 -ni oyatmaq üçün kapasitiv toxunma pinləri qururuq. Nəhayət, Touchpad'i oyanma mənbəyi olaraq təyin etdik və ESP32 -ni yuxu rejiminə keçməyə məcbur etdik.
void setup () {Serial.begin (115200); gecikmə (1000); // sayını artırın və ya BOOT -u yükləyin ++ bootCount; configureDisplay (); // BOOT -u işə salmaq üçün print_wakeup_reason () funksiyasını yerinə yetirin; // PAR konfiqurasiyaları üçün ESP32 və ya bot açmaq üçün (EXT0) if (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Yüksək, 0 = Aşağı} // ESP32 üçün çoxlu konfiqurasiyanı yoxlayın, əgər başqa bir şey varsa (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // ESP32 və ya ESP32 -dən istifadə etməklə əlaqəli konfiqurasiya parametrləri {// Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, geri çağırma, Eşik) üzərində fasilə qurun; // Touchpad'i oyanma mənbəyi olaraq konfiqurasiya edin esp_sleep_enable_touchpad_wakeup (); } Serial.println ("yuxu rejimində"); esp_deep_sleep_start ();
Addım 17: Loop, Callback & ConfigureDisplay
Döngədə bizim heç bir işimiz yoxdur. Ardından, kəsilmə zamanı edəcəyimiz bir şey varsa, geri çağırışı kəsməyə davam edirik. ConfigureDisplay ilə əlaqədar olaraq ekranı işə salırıq və bəzi parametrləri konfiqurasiya edirik. Çəkmənin neçə dəfə baş verdiyini ekranda çap edirik.
// heç bir loopvoid döngəsi yoxdur () {} // geri çağırma boşluqların geri qaytarılması () {// caso queira fazer ao ocorrer to a interrupção} void configureDisplay () {// in displayiza or display configure alguns parametros display. başlamaq (); display.setPowerSave (0); // modo powerSave (0-Off? 1-On) display.setFont (u8x8_font_torussansbold8_u); // yazı tipləri // göstərilməmişdir, BOOT display.drawString (0, 0, "BOOT NUM:"); display.drawString (0, 2, String (bootCount).c_str ()); display.drawString (0, 4, "MOTIVO:"); }
Addım 18: Print_wakeup_reason (Oyanışın Səbəbini bilmək)
Burada ESP32 oyanmasının səbəbini çap etmək funksiyasına sahibik. Pimi yoxlayın və ekranda çap edin.
// ESP32 -dən çıxarılan səbəblərdən print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; String səbəbi = ""; yuxudan oyanma səbəbi = esp_sleep_get_wakeup_cause (); // recupera a causa do despertar switch (wakeup_reason) {hal 1: səbəb = "EXT0 RTC_IO BTN"; fasilə; hal 2: səbəb = "EXT1 RTC_CNTL"; fasilə; hal 3: səbəb = "TIMER"; fasilə; hal 4: səbəb = "TOUCHPAD"; fasilə; hal 5: səbəb = "ULP PROQRAMI"; fasilə; default: səbəb = "DS SƏBƏBİ YOXDUR"; fasilə; } Serial.println (səbəb); display.clearLine (6); // ekran 6 göstərildikdə Display.drawString (0, 6, reason.c_str ()); // heç bir səbəb göstərməyin səbəbini göstərməyin // TOUCHPAD düyməsini basın, əgər (wakeup_reason == 4) {print_wakeup_touchpad (); // verifica o pino e premime yoxdur}}
Addım 19: Print_wakeup_touchpad (GPIO Touch ilə tanış olun)
İndi, bu addımda, toxunulan pimi çap etmək funksiyasına sahibik. ESP32 -ni oyadan GPIO -nu bərpa etdik və onu ekranda çap etdik.
// əyləncə üçün print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // GPIO və ya ESP32 String GPIO = "" qeydləri; keçid (touchPin) {halda 0: GPIO = "4"; fasilə; hal 1: GPIO = "0"; fasilə; vəziyyət 2: GPIO = "2"; fasilə; hal 3: GPIO = "15"; fasilə; hal 4: GPIO = "13"; fasilə; hal 5: GPIO = "12"; fasilə; hal 6: GPIO = "14"; fasilə; vəziyyət 7: GPIO = "27"; fasilə; hal 8: GPIO = "33"; fasilə; hal 9: GPIO = "32"; fasilə; standart: Serial.println ("Uyanma toxunma paneli ilə deyil"); fasilə; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // ekran 7. display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // GPIO -nu sınayın
Addım 20: Dosyaları Yükləyin
MƏN YOX
Tövsiyə:
E-Mürekkep Ekranı ilə Güc qənaət edən GPS: 4 addım
E-Mürekkep Ekranı ilə Güc qənaət edən GPS: Hər yay uzaq yerlərdə gəzintiyə çıxıram. Bəzən cığır zəiflədikdə və ya yoxa çıxanda koordinatlarımı almaq üçün telefonumun GPS -dən istifadə etməli və sonra kağız xəritəsindəki mövqeyimi yoxlamalı oluram (tez -tez siqnalım olmur, buna görə kağız xəritələri məcburidir
Batareya Qənaətçisi, Qurğuşun Asitli Avtomobil və ya Lipo Batareya üçün ATtiny85 ilə Boşalma Qoruyucu Kesici Anahtarı: 6 Addım
Batareya Qənaətçisi, Qurğuşunlu Avtomobil və ya Lipo Batareya üçün ATtiny85 ilə Boşalma Qoruyucusu Kəsmə Açarı: Avtomobillərim və günəş sistemlərim üçün bir neçə batareya qoruyucuya ehtiyacım olduğu üçün ticari olanları 49 dollara çox bahalı tapdım. 6 mA ilə çox güc istifadə edirlər. Mövzu ilə bağlı heç bir təlimat tapa bilmədim. Beləliklə, 2 mA çəkən özüm hazırladım
Hava İstasyonu: ESP8266 ilə Dərin Yuxu, SQL, Şüşə Qrafiki və Plotly: 3 addım
Hava İstasyonu: ESP8266 Dərin Yuxu, SQL, Şüşə və Plotly ilə Qrafik: Balkonunuzdakı temperaturu, rütubəti və ya işığın intensivliyini bilmək əyləncəli olarmı? Biləcəyimi bilirəm. Belə məlumatları toplamaq üçün sadə bir hava stansiyası hazırladım. Aşağıdakı bölmələr, birini qurmaq üçün atdığım addımlardır. Başlayaq
İstilik və Batareya Seçimi ilə Batareya Denetleyicisi: 23 Addım (Şəkillərlə)
İstilik və Batareya Seçimi ilə Batareya Denetleyicisi: Batareya tutumu test cihazı.Bu cihazla 18650 batareyanın, turşunun və digərlərinin gücünü yoxlaya bilərsiniz. Testin nəticəsi milliamper/saatdır.Bu cihazı yoxlamaq üçün lazım olduğu üçün yaradıram
DIY Ölçüsü və Batareya Güc Yedəkləmə Generatoru W/ 12V Dərin Dövr Batareyaları: 5 Addım (Şəkillərlə)
DIY Ölçüsü və Batareya Güc Yedəkləmə Generatoru W/ 12V Dərin Dövr Batareyaları: *** QEYD: Batareyalar və elektriklə işləyərkən diqqətli olun. Batareyaları qısaltmayın. İzolyasiya edilmiş vasitələrdən istifadə edin. Elektriklə işləyərkən bütün təhlükəsizlik qaydalarına riayət edin. *** Növbəti dəfə gözləmə rejimində olan batareya ilə elektrik enerjisinin sönməsinə hazır olun