Mündəricat:

Dərin yuxu ilə batareya ömrünə qənaət: 20 addım
Dərin yuxu ilə batareya ömrünə qənaət: 20 addım

Video: Dərin yuxu ilə batareya ömrünə qənaət: 20 addım

Video: Dərin yuxu ilə batareya ömrünə qənaət: 20 addım
Video: DİQQƏT! REINKARNASİYA TƏHLÜKƏLİ YERLƏRƏ GEDƏ BİLƏN MÖVZUDUR! | Bi Garip TV - Murat İrfan Ağcabay 2024, Noyabr
Anonim
Image
Image
ESP32 -ni oyatmağın yolları
ESP32 -ni oyatmağın yolları

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

Budur Biraz Daha Vacib Məlumat
Budur Biraz Daha Vacib Məlumat

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ş

Nümayiş
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

WiFi NodeMCU-32S ESP-WROOM-32
WiFi NodeMCU-32S ESP-WROOM-32

Addım 12: Quraşdırma

Məclis
Məclis

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

Kitabxana Tələb olunur
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

PDF

MƏN YOX

Tövsiyə: