Isi kandungan:
- Langkah 1: Pengenalan
- Langkah 2: Cara Membangunkan ESP32
- Langkah 3: Pemasa
- Langkah 4: Bangun Luar (ext0)
- Langkah 5: Bangun Luar (ext1)
- Langkah 6: Bangunkan Pemprosesan ULP
- Langkah 7: Pad sentuh
- Langkah 8: Memasuki Mod Tidur Dalam
- Langkah 9: Berikut adalah beberapa Maklumat Penting
- Langkah 10: Demonstrasi
- Langkah 11: Node WiFiMCU-32S ESP-WROOM-32
- Langkah 12: Perhimpunan
- Langkah 13: Program
- Langkah 14: Perpustakaan Diperlukan
- Langkah 15: Perpustakaan dan Pembolehubah
- Langkah 16: Persediaan
- Langkah 17: Gelung, Panggilan Balik & Konfigurasi Paparan
- Langkah 18: Print_wakeup_reason (mengetahui Punca Kebangkitan)
- Langkah 19: Print_wakeup_touchpad (ketahui Sentuhan GPIO)
- Langkah 20: Muat turun Fail
Video: Menjimatkan Hayat Bateri Dengan Tidur Sedap: 20 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:11
Adakah anda berminat menggunakan bateri dengan ESP32 anda? Sekiranya ada, saya akan membincangkan hari ini beberapa maklumat teknikal penting mengenai perkara ini. Kami tahu bahawa mikrokontroler ini menghabiskan banyak tenaga ketika menghantar maklumat. Ia memakan hampir 190 milliamp. Dalam video ini, saya akan menunjukkan cara menjimatkan tenaga dari ESP32 dengan fungsi yang disebut "DEEP SLEEP". Kami akan menetapkan chip untuk memasuki mod ini, mempelajari cara keluar dari mod ini, dan membuat contoh yang menunjukkan tiga cara berbeza untuk mengaktifkan ESP32.
Penting untuk diingat bahawa radio menghabiskan banyak tenaga, bukannya pemproses. Penjimatan tenaga sangat penting. Ini kerana Titik Akhir (litar yang menghantar maklumat) sering kali menggunakan bateri dan boleh bertahan sehingga lima tahun. Terdapat beberapa pengeluar yang berjanji sehingga sepuluh tahun, dan ini berlaku untuk bateri berkualiti tinggi yang tidak menggunakan Titik Akhir. Dalam semua kes lain, saya menasihati anda untuk menggunakan Tidur Dalam untuk menjimatkan tenaga dari litar anda.
Langkah 1: Pengenalan
ESP32 mempunyai mod penjimatan tenaga, yang disebut "Tidur Dalam." Dalam mod ini, CPU, kebanyakan RAM, dan semua periferal jam digital dimatikan. Satu-satunya bahagian cip yang masih dapat disambungkan adalah pengawal RTC, periferal RTC (termasuk pemprosesan ULP), dan kenangan RTC.
Kami mempunyai beberapa cara untuk membangunkan ESP32 ketika tidur. Sumber bangun dapat disiapkan kapan saja sebelum memasuki mod Tidur Dalam.
Langkah 2: Cara Membangunkan ESP32
Terdapat lima cara untuk membangunkan ESP32:
• Pemasa
• Bangun luar (ext0)
• Bangunkan luaran (ext1)
• Kebangkitan pemprosesan ULP
• Pad sentuh
Langkah 3: Pemasa
Pengawal RTC mempunyai pemasa terbina dalam yang dapat digunakan untuk mengaktifkan cip setelah jangka waktu yang telah ditentukan. Masa ditentukan dengan ketepatan mikrodetik.
esp_deep_sleep_enable_timer_wakeup (uint64_t time_in_us)
time_in_us> adalah masa dalam mikrodetik
Langkah 4: Bangun Luar (ext0)
Modul RTC IO mengandungi logik untuk mencetuskan penggera apabila salah satu GPIO RTC memasuki tahap logik yang telah ditetapkan. RTC IO adalah sebahagian dari domain kuasa periferal RTC, jadi periferal RTC akan tetap hidup semasa Tidur Dalam jika sumber pengaktifan ini diminta.
esp_deep_sleep_enable_ext0_wakeup (gpio_num_t gpio_num, tahap int)
gpio_num> Nombor GPIO digunakan sebagai sumber pengaktifan. Hanya GPIO yang berfungsi RTC yang boleh digunakan: 0, 2, 4, 12-15, 25-27, 32-39.
tahap> tahap input yang akan mencetuskan penggera (0 = RENDAH, 1 = TINGGI)
Langkah 5: Bangun Luar (ext1)
Pengawal RTC mengandungi logik untuk mencetuskan jam penggera menggunakan beberapa GPIO RTC.
esp_deep_sleep_enable_ext1_wakeup (uint64_t mask, esp_ext1_wakeup_mode_t mode)
topeng> topeng bit nombor GPIO yang akan menyebabkan pengaktifan. Hanya GPIO berkemampuan RTC yang dapat digunakan dalam peta bit ini: 0, 2, 4, 12-15, 25-27, 32-39.
mod> pilih fungsi logik yang digunakan untuk menentukan keadaan pengaktifan:
• ESP_EXT1_WAKEUP_ALL_LOW: terbangun apabila semua GPIO terpilih berada dalam keadaan RENDAH
• ESP_EXT1_WAKEUP_ANY_HIGH: terbangun apabila mana-mana GPIO yang dipilih TINGGI
Langkah 6: Bangunkan Pemprosesan ULP
Koprosesor ULP dapat beroperasi ketika cip berada dalam Tidur Tidur dan dapat digunakan untuk mencari sensor, memantau nilai sensor sentuhan kapasitif ADC atau, dan mengaktifkan cip apabila peristiwa tertentu dikesan.
Koprosesor ULP adalah sebahagian daripada domain kuasa periferal RTC dan menjalankan program yang disimpan dalam memori RTC perlahan. Oleh itu, periferal RTC dan memori lambat RTC akan diaktifkan semasa Tidur Sedang sekiranya mod pengaktifan ini diminta.
Langkah 7: Pad sentuh
Pengawal RTC mengandungi logik untuk mencetuskan penggera menggunakan sensor sentuh kapasitif. Definisi pin sentuh, bagaimanapun, berbeza. Kita mesti menggunakan interupsi sentuhan untuk setiap pin yang dikehendaki.
Setelah menetapkan gangguan, kami mengaktifkan mod bangun untuk menggunakan sensor.
// Konfigurasikan Touchpad sebagai sumber bangun esp_sleep_enable_touchpad_wakeup ();
Langkah 8: Memasuki Mod Tidur Dalam
Setelah menetapkan mod bangun, satu perintah untuk meletakkan ESP32 dalam mod Tidur Tidur (menghabiskan 2.5 μA atau kurang) sudah cukup. Saya menekankan di sini bahawa perbelanjaan ini adalah dari cip ESP dan bukan dari pinggan, kerana yang terakhir menghabiskan lebih banyak.
esp_deep_sleep_start ();
Dari arahan ini, ESP32 tertidur dan tidak melaksanakan baris kod seterusnya.
Penting: Semua tetapan bangun mesti dibuat sebelum melaksanakan perintah di atas.
Langkah 9: Berikut adalah beberapa Maklumat Penting
Panggilan di bawah mengembalikan penyebab terjadinya ESP32.
1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP
esp_sleep_get_wakeup_cause ();
Jika kita mengatur bangun dengan pad sentuh, kita dapat memulihkan GPIO mana yang disentuh melalui perintah
esp_sleep_get_touchpad_wakeup_status ();
Setiap kali ESP32 bangun, ia akan melalui penyusunan semula. Oleh itu, semua pemboleh ubah yang tidak ditentukan dalam memori RTC akan kembali ke keadaan asal.
Untuk menyimpan pemboleh ubah dalam ingatan walaupun selepas tertidur, gunakan pernyataan pemboleh ubah dalam contoh di bawah:
// RTC_DATA_ATTR aloca a variável na memória RTCRTC_DATA_ATTR int bootCount = 0;
Langkah 10: Demonstrasi
Video menunjukkan program berfungsi, sesuai dengan gambar.
Langkah 11: Node WiFiMCU-32S ESP-WROOM-32
Langkah 12: Perhimpunan
Langkah 13: Program
Kami sekarang akan membuat program di mana kita akan mengkonfigurasi ESP32 untuk memasuki mod Tidur Dalam. Ini akan dibangkitkan dalam tiga cara yang berbeza: satu untuk bangun Luar (ext0), satu untuk Pemasa, dan satu untuk Pad Sentuh. Mereka tidak dapat bekerjasama, jadi kami akan menggunakan pemboleh ubah yang akan menjadi pembilang untuk berapa kali ESP32 memberikan Boot untuk mengkonfigurasi cara untuk bangun.
Langkah 14: Perpustakaan Diperlukan
Untuk mengawal paparan OLED, kami memerlukan perpustakaan luaran. Untuk ini, kami akan memuat turun perpustakaan U8g2.
Di Arduino IDE, pergi ke menu Lakaran >> Sertakan Perpustakaan >> Uruskan Perpustakaan….
Langkah 15: Perpustakaan dan Pembolehubah
Kami telah memasukkan perpustakaan untuk mengawal paparan OLED, dan juga pembangun contoh pengawal paparan. Juga, kami memperuntukkan pemboleh ubah dalam memori RTC. Kami menetapkan kepekaan untuk penerimaan sentuhan, faktor penukaran mikrodetik selama beberapa saat, dan masa ESP32 beralih ke mod tidur (dalam beberapa saat).
#include // biblioteca para controle memang dipaparkan
// construtor da instancia do controlador do display // SDA = 21 e SCL = 22 paparan U8X8_SSD1306_128X64_NONAME_SW_I2C (SCL, SDA, U8X8_PIN_NONE); // RTC_DATA_ATTR aloca a variável na memoria RTC RTC_DATA_ATTR int bootCount = 0; // sensibilidade para aceitação do toque #define Threshold 40 // fator de chatão de microsegundos para segundos #define uS_TO_S_FACTOR 1000000 // tempo que o ESP32 ficará em modo sleep (em segundos) #tentukan TIME_TO_SLEEP 3
Langkah 16: Persediaan
Dalam Persediaan, kami menambah berapa kali Boot berlaku. Kami memanggil fungsi untuk mencetak motif Boot. Sekiranya nombor Boot adalah PAR, kami menetapkan ESP32 untuk bangun melalui butang (EXT0). Sekiranya ia adalah gandaan 3, kita menetapkan ESP32 untuk bangun setelah waktu yang ditentukan. Jika tidak, kami menyediakan pin sentuh kapasitif untuk menghidupkan ESP32. Akhirnya, kami menetapkan Touchpad sebagai sumber bangun dan memaksa ESP32 memasuki mod tidur.
persediaan tidak sah () {Serial.begin (115200); kelewatan (1000); // incrementa o numero de vezes que o BOOT ocorreu ++ bootCount; configureDisplay (); // chama a função para imprimir o motivo do BOOT print_wakeup_reason (); // se o numero de boot untuk konfigurasi PAR o ESP32 untuk despertar através do botão (EXT0) if (bootCount% 2 == 0) {esp_sleep_enable_ext0_wakeup (GPIO_NUM_39, 1); // 1 = Tinggi, 0 = Rendah} // se untuk konfigurasi multiplo de 3 o ESP32 untuk despertar depois de um tempo definido lain jika (bootCount% 3 == 0) {esp_sleep_enable_timer_wakeup (TIME_TO_SLEEP * uS_TO_S_FACTOR); } // caso contrario configuramos os pinos de touch capacitivo para despertar o ESP32 else {// Persediaan mengganggu pada Touch Pad 5 (GPIO12) touchAttachInterrupt (T5, callback, Threshold); // Konfigurasikan Touchpad sebagai sumber bangun esp_sleep_enable_touchpad_wakeup (); } Serial.println ("entrando em modo sleep"); esp_deep_sleep_start (); // força o ESP32 entrar em modo TIDUR}
Langkah 17: Gelung, Panggilan Balik & Konfigurasi Paparan
Dalam Gelung, kita tidak ada kena mengena. Kami kemudian terus menghentikan panggilan balik sekiranya ada yang perlu dilakukan semasa gangguan itu berlaku. Mengenai configureDisplay, kami menginisialisasi tampilan dan mengkonfigurasi beberapa parameter. Kami mencetak di skrin berapa kali Boot berlaku.
// nada a se fazer no loopvoid loop () {} // callback das interrupções void callback () {// caso queira fazer algo ao ocorrer a interrupção} void configureDisplay () {// inicializa o display e configura alguns parametros display. bermula (); 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:"); }
Langkah 18: Print_wakeup_reason (mengetahui Punca Kebangkitan)
Di sini, kita mempunyai fungsi untuk mencetak penyebab terjadinya ESP32. Periksa pin dan cetak pada paparan.
// função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason () {esp_sleep_wakeup_cause_t wakeup_reason; Sebab rentetan = ""; wakeup_reason = esp_sleep_get_wakeup_cause (); // recupera a causa do despertar switch (wakeup_reason) {kes 1: alasan = "EXT0 RTC_IO BTN"; rehat; kes 2: sebab = "EXT1 RTC_CNTL"; rehat; kes 3: sebab = "PEMASA"; rehat; kes 4: sebab = "TOUCHPAD"; rehat; kes 5: sebab = "PROGRAM ULP"; rehat; lalai: alasan = "TIADA DS PENYEBAB"; rehat; } Serial.println (sebab); display.clearLine (6); // apaga a linha 6 do display display.drawString (0, 6, reason.c_str ()); // impear a causa do despertar no display // se despertou por TOUCHPAD, então vamos verificar em qual dos pinos ocorreu jika (bangun_reason == 4) {print_wakeup_touchpad (); // verifica o pino e imprime tiada paparan}}
Langkah 19: Print_wakeup_touchpad (ketahui Sentuhan GPIO)
Sekarang, dalam langkah ini, kita memiliki fungsi untuk mencetak pin yang disentuh. Kami memulihkan GPIO yang membangunkan ESP32 dan mencetaknya di paparan.
// função para imprimir o pino que juga tocadovoid print_wakeup_touchpad () {touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status (); // recupera o GPIO que despertou o ESP32 String GPIO = ""; suis (touchPin) {kes 0: GPIO = "4"; rehat; kes 1: GPIO = "0"; rehat; kes 2: GPIO = "2"; rehat; kes 3: GPIO = "15"; rehat; kes 4: GPIO = "13"; rehat; kes 5: GPIO = "12"; rehat; kes 6: GPIO = "14"; rehat; kes 7: GPIO = "27"; rehat; kes 8: GPIO = "33"; rehat; kes 9: GPIO = "32"; rehat; lalai: Serial.println ("Wakeup not by touchpad"); rehat; } Serial.println ("GPIO:" + GPIO); display.clearLine (7); // apaga a linha 7 do display display.drawString (0, 7, "GPIO:"); display.drawString (6, 7, GPIO.c_str ()); // imprime o GPIO}
Langkah 20: Muat turun Fail
INO
Disyorkan:
Cara Meningkatkan Hayat Bateri Lampu suluh AAA: 3 Langkah
Cara Melipatgandakan Hayat Bateri Lampu suluh AAA: Apabila menggunakan lampu suluh LED 3W yang dikuasakan oleh bateri AAA, anda akan menyangka ia akan bertahan sekitar 30 minit. Ada cara untuk melipatgandakan waktu larian dengan menggunakan bateri AA, yang akan saya tunjukkan dengan menghubungkan pemegang bateri AA ke dalamnya
Hayat Bateri Kamera Tindakan Hack: 4 Langkah (dengan Gambar)
Hayat Bateri Kamera Aksi Hack: Sama ada anda mempunyai GoPro, Kontur atau kamera lain yang sesuai untuk anda! Bateri camcorder sering menjadi masalah. Sama ada anda merakam video panjang dan tidak tahan lama, atau anda terlupa untuk mengecasnya sepenuhnya sebelum ini. Mungkin itu betul
Gandakan Hayat Bateri Radio DX3 Dari Spektrum dengan Langkah Bawah $ 20: 11
Gandakan Hayat Bateri Radio DX3 Dari Spektrum untuk Bawah $ 20: Saya mula-mula mendapat idea untuk ini di thread untuk DX6 / 7 di forum RCGRoups.com. Saya menggunakan kereta nitro, jadi saya membeli DX3. Saya menggunakan radio untuk sementara waktu, dan jangka hayat bateri saya berada di sisi yang lebih baik daripada kebanyakan radio - tetapi pemilik DX7 semakin seperti
Menjimatkan Bateri 'separuh mati': 4 Langkah
Menyimpan Bateri 'separuh mati' Anda: Jangan buang bateri 'separuh mati' anda! Adakah anda tahu anda boleh menyambungkan bateri 'separuh mati' secara bersiri untuk memberikan voltan yang lebih besar? Semudah menyimpan semua wang anda bersama-sama untuk mendapatkan jumlah yang lebih besar. Ini boleh dipelajari dengan
Cara Menjadikan Laptop Anda Menjimatkan Kuasa Bateri Dengan Kehilangan Prestasi Minimum: 4 Langkah
Bagaimana Menjadikan Laptop Anda Menjimatkan Kuasa Bateri Dengan Kehilangan Prestasi Minimum: Siapa yang mengatakan bahawa komputer riba anda harus mengalami prestasi perlahan untuk menjimatkan sedikit tenaga? Berapa banyak perubahan prestasi atau jangka hayat bateri anda bergantung pada usia komputer riba, usia bateri, dan program dan tetapan lain. Berikut adalah beberapa langkah mudah untuk meningkatkan