Mundarija:
- 1 -qadam: kirish
- 2 -qadam: ESP32 -ni uyg'otish usullari
- 3 -qadam: Taymer
- 4 -qadam: Tashqi uyg'onish (ext0)
- 5 -qadam: Tashqi uyg'onish (ext1)
- 6 -qadam: ULP protsessorini uyg'otish
- 7 -qadam: sensorli panel
- 8 -qadam: chuqur uyqu rejimiga o'tish
- 9 -qadam: Bu erda yana muhim ma'lumotlar
- 10 -qadam: Namoyish
- 11-qadam: WiFi NodeMCU-32S ESP-WROOM-32
- 12 -qadam: yig'ish
- 13 -qadam: Dastur
- 14 -qadam: kutubxona kerak
- 15 -qadam: Kutubxonalar va o'zgaruvchilar
- 16 -qadam: sozlash
- 17 -qadam: Loop, Callback & ConfigureDisplay
- 18 -qadam: Print_wakeup_reason (uyg'onish sababini bilish)
- 19 -qadam: Print_wakeup_touchpad (GPIO Touch -ni biling)
- 20 -qadam: Fayllarni yuklab oling
Video: Chuqur uyquda batareya quvvatini tejash: 20 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:27
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
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
Videoda dastur tasvirga muvofiq ishlayotgani ko'rsatilgan.
11-qadam: WiFi NodeMCU-32S ESP-WROOM-32
12 -qadam: yig'ish
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
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
INO
Tavsiya:
Batareya quvvatini tejash: 8 qadam (rasmlar bilan)
Batareya tejamkorligi: CR2032 batareyalari juda zo'r, lekin ular LEDni "Fairy Light" haydashda biz xohlagancha ishlamaydi. Bu erda dam olish mavsumi bilan men USB quvvat bankining ishlamasligi uchun 20 ta yorug'lik simini o'zgartirishga qaror qildim. Internetda qidirib topdim va
Digispark ATtiny85 uchun batareya quvvatini kamaytirish: 7 qadam
Digispark ATtiny85 uchun batareya quvvatini kamaytirish: yoki: 2032 tangali uyali Arduino -ni 2 yil davomida ishlatish. Digispark Arduino platasini Arduino dasturi bilan qutidan chiqarib yuborish, 5 voltli 20 mA quvvatga ega. 5 voltli quvvat banki bilan 2000 mA / soat, u faqat 4 kun ishlaydi
Ob -havo stantsiyasi: ESP8266 chuqur uyquda, SQL, kolba va grafik bo'yicha grafik: 3 qadam
Ob -havo stantsiyasi: ESP8266 chuqur uyquda, SQL, kolbadan chizish va chizish: Balkoningizdagi harorat, namlik yoki yorug'lik intensivligini bilish qiziq bo'larmidi? Men bilardim. Shunday qilib, men bunday ma'lumotlarni to'plash uchun oddiy ob -havo stantsiyasini yaratdim. Keyingi bo'limlar men yaratgan qadamlardir. Boshlaylik
Haftaning kuni, taqvim, vaqt, namlik/batareya quvvatini tejaydigan harorat: 10 qadam (rasmlar bilan)
Haftaning kuni, taqvim, vaqt, namlik/haroratni tejash rejimi: bu erda quvvatni tejash rejimi bu ko'rsatmani haftaning kuni, oyi, oy kuni, vaqti, namligi va haroratini ko'rsatadigan boshqa misollardan ajratib turadi. Aynan mana shu qobiliyat, bu loyihani batareyasiz ishlashga imkon beradi
Qanday qilib noutbukni minimal quvvat yo'qotilishi bilan batareya quvvatini tejash mumkin: 4 qadam
Qanday qilib noutbukni minimal quvvat yo'qotilishi bilan batareya quvvatini tejash mumkin: Kim aytadiki, sizning noutbukingiz ozgina energiya tejash uchun sekin ishlashi kerak. Sizning ishlashingiz yoki batareyaning ishlash muddati qanchalik o'zgarishi noutbukning yoshiga, batareyaning ishlash muddatiga va boshqa dastur va sozlamalarga bog'liq. Mana, ko'paytirishga yordam beradigan bir necha oddiy qadamlar