Mundarija:

Chuqur uyquda batareya quvvatini tejash: 20 qadam
Chuqur uyquda batareya quvvatini tejash: 20 qadam

Video: Chuqur uyquda batareya quvvatini tejash: 20 qadam

Video: Chuqur uyquda batareya quvvatini tejash: 20 qadam
Video: Telefon zaryadini ikki barobar koʻpga yetkazish 2024, Noyabr
Anonim
Image
Image
ESP32 ni uyg'otish usullari
ESP32 ni uyg'otish usullari

ESP32 bilan batareyadan foydalanishni xohlaysizmi? Agar shunday bo'lsa, bugun men ushbu mavzuga oid ba'zi muhim texnik ma'lumotlarni muhokama qilaman. Biz bilamizki, bu mikrokontroller axborotni uzatishda juda ko'p energiya sarflaydi. U 190 milliamperga yaqin sarflaydi. Ushbu videoda men ESP32-dan "CHIQLI UHLASH" funktsiyasi yordamida energiyani qanday tejash kerakligini ko'rsataman. Biz chipni ushbu rejimga o'rnatamiz, bu rejimdan chiqish yo'llarini o'rganamiz va ESP32 -ni uyg'otishning uch xil usulini ko'rsatadigan misol yaratamiz.

Shuni esda tutish kerakki, radio protsessordan ko'ra ko'proq energiya sarflaydi. Energiyani tejash juda muhim. Buning sababi, so'nggi nuqtalar (ma'lumot yuboradigan davrlar) ko'pincha batareyadan ishlaydi va besh yilgacha xizmat qilishi kerak. O'n yilgacha muddatga va'da beradigan ba'zi ishlab chiqaruvchilar bor va bu oxirgi nuqtalarni unchalik ishlatmaydigan yuqori sifatli batareyalar uchun amal qiladi. Boshqa barcha holatlarda, men sizga o'z uyingizdan energiyani tejash uchun chuqur uyqu rejimidan foydalanishni maslahat beraman.

1 -qadam: kirish

ESP32-da "Chuqur uyqu" deb nomlangan quvvatni tejash rejimi mavjud. Bu rejimda protsessorlar, ko'pchilik operativ xotira va barcha raqamli soat qurilmalari o'chirilgan. Chipning hali ham ulanishi mumkin bo'lgan yagona qismlari - RTC boshqaruvchisi, RTC tashqi qurilmalari (shu jumladan ULP protsessori) va RTC xotiralari.

Biz uxlab yotganimizda ESP32 ni uyg'otishning bir qancha usullari bor. Uyg'onish manbalarini istalgan vaqtda chuqur uyqu rejimiga o'tishdan oldin sozlash mumkin.

2 -qadam: ESP32 -ni uyg'otish usullari

ESP32 -ni uyg'otishning beshta usuli bor:

• Taymer

• Tashqi uyg'otish (ext0)

• Tashqi uyg'otish (ext1)

• ULP protsessorini uyg'otish

• Sensorli panel

3 -qadam: Taymer

RTC boshqaruvchisida o'rnatilgan taymer mavjud bo'lib, undan oldindan belgilangan vaqtdan keyin chipni faollashtirish mumkin. Vaqt mikrosaniyali aniqlik bilan belgilanadi.

esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)

time_in_us> - bu mikrosaniyadagi vaqt

4 -qadam: Tashqi uyg'onish (ext0)

RTC IO moduli RTC GPIO -laridan biri oldindan belgilangan mantiq darajasiga kirganda signalni ishga tushirish uchun mantiqni o'z ichiga oladi. RTC IO RTC tashqi qurilmalarining quvvat domenining bir qismidir, shuning uchun, agar bu faollashtirish manbai so'ralsa, chuqur uyqu paytida RTC tashqi qurilmalari tirik qoladi.

esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, int darajasi)

gpio_num> faollashtirish manbai sifatida ishlatiladigan GPIO raqami. Faqat RTC-funktsional GPIOlardan foydalanish mumkin: 0, 2, 4, 12-15, 25-27, 32-39.

darajasi> signalni ishga tushiradigan kirish darajasi (0 = LOW, 1 = HIGH)

5 -qadam: Tashqi uyg'onish (ext1)

RTC boshqaruvchisi bir nechta RTC GPIO -laridan foydalanib, budilnikni ishga tushirish uchun mantiqni o'z ichiga oladi.

esp_deep_sleep_enable_ext1_wakeup (uint64_t niqobi, esp_ext1_wakeup_mode_t rejimi)

niqob> faollashtirishga olib keladigan GPIO raqamlarining bit niqobi. Ushbu bitmapda faqat RTC-ni yoqadigan GPIO-lardan foydalanish mumkin: 0, 2, 4, 12-15, 25-27, 32-39.

rejimi> faollashtirish shartini aniqlash uchun ishlatiladigan mantiq funktsiyasini tanlang:

• ESP_EXT1_WAKEUP_ALL_LOW: barcha tanlangan GPIO LOW pastda bo'lganda uyg'onadi.

• ESP_EXT1_WAKEUP_ANY_HIGH: tanlangan GPIOlardan birortasi yuqori bo'lsa, uyg'onadi.

6 -qadam: ULP protsessorini uyg'otish

ULP protsessori chip chuqur uyqu rejimida ishlashi mumkin va uni sensorlarni qidirish, ADC yoki sig'imli sensorli sensorlar qiymatlarini kuzatish va ma'lum bir hodisa aniqlanganda chipni faollashtirish uchun ishlatish mumkin.

ULP protsessori RTC tashqi qurilmalari quvvat domenining bir qismidir va RTC xotirasida saqlangan dasturni boshqaradi. Shuning uchun, agar bu faollashtirish rejimi so'ralsa, chuqur uyqu paytida RTC tashqi qurilmalari va RTC sekin xotirasi faollashadi.

7 -qadam: sensorli panel

RTC tekshirgichida sensorli sensorlar yordamida signalni ishga tushirish uchun mantiq mavjud. Sensorli pinning ta'rifi boshqacha. Biz har bir kerakli pin uchun sensorli uzilishdan foydalanishimiz kerak.

Tanaffuslarni o'rnatgandan so'ng, biz sensorlardan foydalanish uchun uyg'onish rejimini yoqdik.

// Sensorli panelni uyg'otish manbasi sifatida sozlash esp_sleep_enable_touchpad_wakeup ();

8 -qadam: chuqur uyqu rejimiga o'tish

Uyg'otish rejimini o'rnatgandan so'ng, ESP32-ni chuqur uyqu rejimiga o'tkazish uchun bitta buyruq (2,5 mA yoki undan kam sarflash) etarli. Bu erda shuni ta'kidlaymanki, bu xarajat plastinkadan emas, balki ESP chipidan, chunki ikkinchisi ko'proq pul sarflaydi.

esp_deep_sleep_start ();

Bu buyruqdan ESP32 uxlab qoladi va keyingi kod satrlarini bajarmaydi.

Muhim: yuqoridagi buyruqni bajarishdan oldin barcha uyg'otish sozlamalarini bajarish kerak.

9 -qadam: Bu erda yana muhim ma'lumotlar

Mana yana bir qancha muhim ma'lumotlar
Mana yana bir qancha muhim ma'lumotlar

Quyidagi qo'ng'iroq ESP32 uyg'onishining sababini qaytaradi.

1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP

esp_sleep_get_wakeup_cause ();

Agar biz sensorli panel yordamida uyg'onishni o'rnatgan bo'lsak, biz teginish buyrug'i orqali qaysi GPIO -ni tiklashimiz mumkin

esp_sleep_get_touchpad_wakeup_status ();

Har safar ESP32 uyg'onganida, u yana sozlash orqali aylanadi. Shunday qilib, RTC xotirasida aniqlanmagan barcha o'zgaruvchilar uy holatiga qaytadilar.

O'zgaruvchilarni uxlab qolgandan keyin ham xotirada saqlash uchun quyidagi misolda o'zgaruvchilar deklaratsiyasidan foydalaning:

// RTC_DATA_ATTR, RTCRTC_DATA_ATTR int bootCount = 0;

10 -qadam: Namoyish

Namoyish
Namoyish

Videoda dastur tasvirga muvofiq ishlayotgani ko'rsatilgan.

11-qadam: WiFi NodeMCU-32S ESP-WROOM-32

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

12 -qadam: yig'ish

O'rnatish
O'rnatish

13 -qadam: Dastur

Endi biz dasturni tuzamiz, u erda biz ESP32 -ni chuqur uyqu rejimiga o'tishni sozlaymiz. Bu uch xil usulda uyg'otiladi: biri tashqi uyg'onish uchun (ext0), biri taymer uchun, ikkinchisi sensorli panel uchun. Ular birgalikda ishlay olmaydilar, shuning uchun biz uyg'onish yo'lini sozlash uchun ESP32 Boot -ga bergan hisoblagich bo'lgan o'zgaruvchidan foydalanamiz.

14 -qadam: kutubxona kerak

Kutubxona kerak
Kutubxona kerak

OLED displeyini boshqarish uchun bizga tashqi kutubxona kerak. Buning uchun biz U8g2 kutubxonasini yuklab olamiz.

Arduino IDE -da Sketch menyusiga o'ting >> Kutubxonani qo'shish >> Kutubxonalarni boshqarish ….

15 -qadam: Kutubxonalar va o'zgaruvchilar

Biz OLED -displeyni boshqarish uchun kutubxonani, shuningdek displeyni boshqarish moslamasi konstruktorini qo'shdik. Shuningdek, biz o'zgaruvchini RTC xotirasida ajratamiz. Biz sensorli qabul qilish sezgirligini, mikrosaniyali konvertatsiya koeffitsientini va ESP32 uyqu rejimiga o'tish vaqtini (soniyalarda) o'rnatamiz.

#include // biblioteca para controle ko'rsatiladi

// instrucia da instancia do controlador do display // SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C displeyi (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR yoki RTC_DATA_ATTR int bootCount = 0 ni eslab qolish mumkin; // sensibiladade aceitação do toque #define Threshold 40 // fursat depresão de microsegundos for segundos #define uS_TO_S_FACTOR 1000000 // tezligi ESP32 ficará em modo sleep (emgundos) #define TIME_TO_SLEEP 3

16 -qadam: sozlash

O'rnatish jarayonida biz yuklashning sonini ko'paytiramiz. Biz yuklash motifini chop etish funktsiyasini chaqiramiz. Agar yuklash raqami PAR bo'lsa, biz ESP32 -ni (EXT0) tugmasi orqali uyg'onishga sozlaymiz. Agar bu 3 ga ko'p bo'lsa, biz ESP32 -ni belgilangan vaqtdan keyin uyg'onishga o'rnatamiz. Aks holda, biz ESP32 -ni uyg'otish uchun sig'imli sensorli pinlarni o'rnatdik. Nihoyat, biz sensorli panelni uyg'onish manbai sifatida o'rnatdik va ESP32 ni uyqu holatiga o'tishga majbur qildik.

void setup () {Serial.begin (115200); kechikish (1000); // sonning ko'payishi yoki yuklanishi BOOT ocorreu ++ bootCount; configureDisplay (); // buyruqni yuklash va yuklash uchun bosma buyruqlar print_wakeup_reason (); // yuklash PAR konfiguratsiyasi uchun ESP32 yoki bot (EXT0), agar (bootCount % 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Yuqori, 0 = Past} // 3 ta konfiguratsiya uchun ESP32 ni tanlang, agar (bootCount % 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // ESP32 yoki boshqa imkoniyatlar uchun sensorli aloqa o'rnatiladi {// Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, qayta qo'ng'iroq, chegara) da uzilishlarni sozlash; // Sensorli panelni uyg'otish manbasi sifatida sozlash esp_sleep_enable_touchpad_wakeup (); } Serial.println ("uyqu rejimiga o'tish"); esp_deep_sleep_start (); // ESP32 rejimiga kirish yoki uxlash}

17 -qadam: Loop, Callback & ConfigureDisplay

Loopda bizda hech narsa yo'q. Keyin, agar bizda uzilish bo'lsa, nima qilish kerak bo'lsa, biz qo'ng'iroqni to'xtatishga o'tamiz. ConfigDisplay -ga kelsak, biz displeyni ishga tushiramiz va ba'zi parametrlarni sozlaymiz. Biz yuklash necha marta sodir bo'lganligini ekranda chop etamiz.

// hech qanday o'zgarish yo'q loopvoid loop () {} // qayta qo'ng'iroqlar uzilishlar void qayta qo'ng'iroq qilish () {// bir vaqtning o'zida bo'sh vaqtni sozlash} void configureDisplay () {// displey va konfiguratsiya parametrlarini ko'rsatish. boshlash(); display.setPowerSave (0); // modo powerSave (0-Off? 1-On) display.setFont (u8x8_font_torussansbold8_u); // fonte utilizada // premime displey yo'q, BOOT display.drawString (0, 0, "BOOT NUM:"); display.drawString (0, 2, String (bootCount).c_str ()); display.drawString (0, 4, "MOTIVO:"); }

18 -qadam: Print_wakeup_reason (uyg'onish sababini bilish)

Bu erda biz ESP32 uyg'onishining sababini chop etish funktsiyasiga egamiz. Pinni tekshiring va displeyda chop eting.

// funcão para impimir a reasona to ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; String sababi = ""; uyg'onish_sababi = esp_sleep_get_wakeup_cause (); // recupera a causa do despertar switch (wakeup_reason) {1 -holat: sabab = "EXT0 RTC_IO BTN"; tanaffus; 2 -holat: sabab = "EXT1 RTC_CNTL"; tanaffus; 3 -holat: sabab = "TIMER"; tanaffus; 4 -holat: sabab = "TOUCHPAD"; tanaffus; 5 -holat: sabab = "ULP PROGRAMI"; tanaffus; standart: sabab = "DS SABABI YO'Q"; tanaffus; } Serial.println (sabab); display.clearLine (6); // displey.drawString (0, 6, sabab.c_str ()) ni ko'rsatish uchun; // displey aausa no despertar no display // to despertou por TOUCHPAD, agar siz (wakeup_reason == 4) {print_wakeup_touchpad (); // verifica o pino e empime displeysiz}}

19 -qadam: Print_wakeup_touchpad (GPIO Touch -ni biling)

Endi, bu bosqichda biz tegilgan pinni chop etish funktsiyasiga egamiz. Biz ESP32 -ni uyg'otadigan GPIO -ni tikladik va uni displeyda chop etdik.

// funcão pulni bosib chiqarish uchun print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // GPIO yoki ESP32 String GPIO = "" ni yozib oling; switch (touchPin) {0 holat: GPIO = "4"; tanaffus; 1 -holat: GPIO = "0"; tanaffus; 2 -holat: GPIO = "2"; tanaffus; 3 -holat: GPIO = "15"; tanaffus; 4 -holat: GPIO = "13"; tanaffus; 5 -holat: GPIO = "12"; tanaffus; 6 -holat: GPIO = "14"; tanaffus; 7 -holat: GPIO = "27"; tanaffus; 8 -holat: GPIO = "33"; tanaffus; 9 -holat: GPIO = "32"; tanaffus; standart: Serial.println ("Sensorli panel yordamida emas" uyg'onish); tanaffus; } Serial.println ("GPIO:"+GPIO); display.clearLine (7); // displey 7 ni ko'rsatish display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // GPIO -ni ishga tushirish

20 -qadam: Fayllarni yuklab oling

PDF

INO

Tavsiya: