Daftar Isi:
- Langkah 1: Pendahuluan
- Langkah 2: Cara Membangunkan ESP32
- Langkah 3: Pengatur Waktu
- Langkah 4: Bangun Eksternal (ext0)
- Langkah 5: Bangun Eksternal (ext1)
- Langkah 6: ULP Coprocessor Wakeup
- Langkah 7: Panel sentuh
- Langkah 8: Masuk ke Deep Sleep Mode
- Langkah 9: Ini Beberapa Informasi Penting lainnya
- Langkah 10: Demonstrasi
- Langkah 11: WiFi NodeMCU-32S ESP-WROOM-32
- Langkah 12: Perakitan
- Langkah 13: Program
- Langkah 14: Perpustakaan Diperlukan
- Langkah 15: Pustaka dan Variabel
- Langkah 16: Pengaturan
- Langkah 17: Loop, Callback & Konfigurasi Tampilan
- Langkah 18: Print_wakeup_reason (mengetahui Penyebab Kebangkitan)
- Langkah 19: Print_wakeup_touchpad (kenali GPIO Touch)
- Langkah 20: Unduh Filenya
Video: Menghemat Masa Pakai Baterai Dengan Deep Sleep: 20 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:57
Apakah Anda tertarik menggunakan baterai dengan ESP32 Anda? Jika demikian, hari ini saya akan membahas beberapa informasi teknis penting mengenai subjek ini. Kita tahu bahwa mikrokontroler ini menghabiskan banyak energi ketika mengirimkan informasi. Ini mengkonsumsi hampir 190 miliampere. Dalam video ini, saya akan menunjukkan cara menghemat energi dari ESP32 dengan apa yang disebut fungsi "DEEP SLEEP". Kami akan mengatur chip untuk memasuki mode ini, mempelajari cara untuk keluar dari mode ini, dan membuat contoh yang menunjukkan tiga cara berbeda untuk membangunkan ESP32.
Penting untuk diingat bahwa radio menghabiskan banyak energi, bukan prosesor. Penghematan energi sangat penting. Ini karena Titik Akhir (sirkuit yang mengirimkan informasi) sering kali menggunakan tenaga baterai dan dapat bertahan hingga lima tahun. Ada beberapa produsen yang menjanjikan durasi hingga sepuluh tahun, dan ini berlaku untuk baterai berkualitas tinggi yang tidak terlalu banyak menggunakan Endpoint. Dalam semua kasus lain, saya menyarankan Anda untuk menggunakan Deep Sleep untuk menghemat energi dari sirkuit Anda.
Langkah 1: Pendahuluan
ESP32 memiliki mode hemat daya, yang disebut "Tidur Dalam". Dalam mode ini, CPU, sebagian besar RAM, dan semua periferal jam digital dimatikan. Satu-satunya bagian dari chip yang masih dapat dihubungkan adalah pengontrol RTC, periferal RTC (termasuk koprosesor ULP), dan memori RTC.
Kami memiliki beberapa cara untuk membangunkan ESP32 saat tertidur. Sumber bangun dapat diatur kapan saja sebelum masuk ke mode Deep Sleep.
Langkah 2: Cara Membangunkan ESP32
Ada lima cara untuk membangunkan ESP32:
• Timer
• Bangun eksternal (ext0)
• Bangun eksternal (ext1)
• bangun koprosesor ULP
• Panel sentuh
Langkah 3: Pengatur Waktu
Kontroler RTC memiliki timer built-in yang dapat digunakan untuk mengaktifkan chip setelah jangka waktu yang telah ditentukan. Waktu ditentukan dengan presisi mikrodetik.
esp_deep_sleep_enable_timer_wakeup(uint64_t time_in_us)
time_in_us> adalah waktu dalam mikrodetik
Langkah 4: Bangun Eksternal (ext0)
Modul RTC IO berisi logika untuk memicu alarm ketika salah satu GPIO RTC memasuki level logika yang telah ditentukan. RTC IO adalah bagian dari domain daya periferal RTC, sehingga periferal RTC akan tetap hidup selama Deep Sleep jika sumber aktivasi ini diminta.
esp_deep_sleep_enable_ext0_wakeup(gpio_num_t gpio_num, level int)
gpio_num> Nomor GPIO digunakan sebagai sumber aktivasi. Hanya GPIO fungsional RTC yang dapat digunakan: 0, 2, 4, 12-15, 25-27, 32-39.
level> level input yang akan memicu alarm (0 = LOW, 1 = HIGH)
Langkah 5: Bangun Eksternal (ext1)
Pengontrol RTC berisi logika untuk memicu jam alarm menggunakan beberapa GPIO RTC.
esp_deep_sleep_enable_ext1_wakeup(uint64_t mask, esp_ext1_wakeup_mode_t mode)
mask> bit mask nomor GPIO yang akan menyebabkan aktivasi. Hanya GPIO yang mendukung RTC yang dapat digunakan dalam bitmap ini: 0, 2, 4, 12-15, 25-27, 32-39.
mode> pilih fungsi logika yang digunakan untuk menentukan kondisi aktivasi:
• ESP_EXT1_WAKEUP_ALL_LOW: terbangun ketika semua GPIO yang dipilih dalam kondisi LOW
• ESP_EXT1_WAKEUP_ANY_HIGH: terbangun ketika salah satu GPIO yang dipilih HIGH
Langkah 6: ULP Coprocessor Wakeup
Koprosesor ULP dapat beroperasi saat chip dalam mode Tidur Dalam dan dapat digunakan untuk mencari sensor, memantau ADC atau nilai sensor sentuh kapasitif, dan mengaktifkan chip saat terdeteksi peristiwa tertentu.
Koprosesor ULP adalah bagian dari domain daya periferal RTC dan menjalankan program yang disimpan dalam RTC memori lambat. Oleh karena itu, periferal RTC dan memori lambat RTC akan diaktifkan selama Deep Sleep jika mode aktivasi ini diminta.
Langkah 7: Panel sentuh
Kontroler RTC berisi logika untuk memicu alarm menggunakan sensor sentuh kapasitif. Definisi pin sentuh, bagaimanapun, berbeda. Kita harus menggunakan interupsi sentuh untuk setiap pin yang diinginkan.
Setelah menyetel interupsi, kami mengaktifkan mode bangun untuk menggunakan sensor.
//Konfigurasikan Touchpad sebagai sumber bangun esp_sleep_enable_touchpad_wakeup();
Langkah 8: Masuk ke Deep Sleep Mode
Setelah mengatur mode bangun, satu perintah untuk menempatkan ESP32 dalam mode Deep Sleep (menghabiskan 2,5 A atau kurang) sudah cukup. Saya tekankan di sini bahwa biaya ini berasal dari chip ESP dan bukan pelat, karena yang terakhir menghabiskan lebih banyak.
esp_deep_sleep_start();
Dari perintah ini, ESP32 tertidur dan tidak mengeksekusi baris kode berikutnya misalnya.
Penting: Semua pengaturan bangun harus dilakukan sebelum menjalankan perintah di atas.
Langkah 9: Ini Beberapa Informasi Penting lainnya
Panggilan di bawah ini mengembalikan penyebab bangun ESP32.
1: EXT0 2: EXT1 3: TIMER 4: TOUCHPAD 5: ULP
esp_sleep_get_wakeup_cause();
Jika kami mengatur bangun dengan touchpad, kami dapat memulihkan GPIO mana yang disentuh melalui perintah
esp_sleep_get_touchpad_wakeup_status();
Setiap kali ESP32 bangun, ia akan menggilir pengaturan lagi. Dengan demikian semua variabel yang tidak didefinisikan dalam memori RTC akan kembali ke keadaan asalnya.
Untuk menyimpan variabel dalam memori bahkan setelah tertidur, gunakan deklarasi variabel pada contoh di bawah ini:
//RTC_DATA_ATTR mengalokasi berbagai memori RTCRTC_DATA_ATTR int bootCount = 0;
Langkah 10: Demonstrasi
Video menunjukkan program bekerja, sesuai dengan gambar.
Langkah 11: WiFi NodeMCU-32S ESP-WROOM-32
Langkah 12: Perakitan
Langkah 13: Program
Kami sekarang akan membuat program di mana kami akan mengkonfigurasi ESP32 untuk masuk ke mode Deep Sleep. Ini akan dibangunkan dalam tiga cara berbeda: satu untuk Bangun eksternal (ext0), satu untuk Timer, dan satu untuk Touchpad. Mereka tidak dapat bekerja bersama, jadi kami akan menggunakan variabel yang akan menjadi penghitung untuk berapa kali ESP32 memberi Boot untuk mengonfigurasi cara bangun.
Langkah 14: Perpustakaan Diperlukan
Untuk mengontrol tampilan OLED, kita memerlukan perpustakaan eksternal. Untuk ini, kami akan mengunduh perpustakaan U8g2.
Pada Arduino IDE, masuk ke menu Sketch >> Include Library >> Manage Libraries….
Langkah 15: Pustaka dan Variabel
Kami telah menyertakan perpustakaan untuk mengontrol tampilan OLED, serta konstruktor dari instance pengontrol tampilan. Juga, kami mengalokasikan variabel dalam memori RTC. Kami mengatur sensitivitas untuk penerimaan sentuhan, faktor konversi mikrodetik untuk detik, dan waktu ESP32 beralih ke mode tidur (dalam detik).
#include //biblioteca para controle tampilkan oled
//construtor da instancia do controlador do display //SDA = 21 e SCL = 22 U8X8_SSD1306_128X64_NONAME_SW_I2C display(SCL, SDA, U8X8_PIN_NONE); //RTC_DATA_ATTR mengalokasi variasi dan memori RTC RTC_DATA_ATTR int bootCount = 0; //sensibilidade para aceitação melakukan toque #define Threshold 40 //fator de conversão de microsegundos para segundos #define uS_TO_S_FACTOR 1000000 //tempo que o ESP32 ficará em modo sleep (em segundos) #define TIME_TO_SLEEP 3
Langkah 16: Pengaturan
Di Setup, kami menambah berapa kali Boot terjadi. Kami memanggil fungsi untuk mencetak motif Boot. Jika nomor Boot adalah PAR, kami mengatur ESP32 untuk bangun melalui tombol (EXT0). Jika kelipatan 3, kami mengatur ESP32 untuk bangun setelah waktu yang ditentukan. Jika tidak, kami mengatur pin sentuh kapasitif untuk membangunkan ESP32. Terakhir, kami mengatur Touchpad sebagai sumber bangun dan memaksa ESP32 untuk masuk ke mode tidur.
void setup() { Serial.begin(115200); penundaan (1000); //incrementa o jumlah de vezes que o BOOT ocorreu ++bootCount; konfigurasiTampilan(); //chama a função para imprimir o motivo do BOOT print_wakeup_reason(); //se o numero de boot untuk PAR configuramos o ESP32 para despertar através lakukan 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 depois de um tempo definido else if(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 { //Setup interrupt 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 SLEEP }
Langkah 17: Loop, Callback & Konfigurasi Tampilan
Di Loop, kita tidak ada hubungannya. Kami kemudian melanjutkan untuk menginterupsi panggilan balik jika kami memiliki sesuatu untuk dilakukan ketika interupsi terjadi. Mengenai configureDisplay, kami menginisialisasi tampilan dan mengonfigurasi beberapa parameter. Kami mencetak di layar berapa kali Boot terjadi.
//nada a se fazer no loopvoid loop() { } //callback das interrupes void callback(){ //caso queira fazer algo ao ocorrer a interrupção } void configureDisplay() { //inisializa o tampilan konfigurasi alguns parametro display. mulai(); 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 Penyebab Kebangkitan)
Disini kita memiliki fungsi untuk mencetak penyebab ESP32 bangun. Periksa pin dan cetak pada layar.
//função para imprimir a causa do ESP32 despertarvoid print_wakeup_reason(){ esp_sleep_wakeup_cause_t wakeup_reason; String alasan = ""; wakeup_reason = esp_sleep_get_wakeup_cause(); //recupera a causa do despertar switch(wakeup_reason) { case 1:reason = "EXT0 RTC_IO BTN"; merusak; kasus 2:alasan = "EXT1 RTC_CNTL"; merusak; kasus 3:alasan = "TIMER"; merusak; kasus 4:alasan = "TOUCHPAD"; merusak; kasus 5:alasan = "PROGRAM ULP"; merusak; default:reason = "TIDAK ADA PENYEBAB DS"; merusak; } Serial.println(alasan); display.clearLine(6); //apaga a linha 6 melakukan display display.drawString(0, 6, reason.c_str()); //memperbaiki alasan melakukan despertar tanpa tampilan //mendesak dengan TOUCHPAD, melakukan verifikasi untuk melakukan qual dos pinos ocorreu if(wakeup_reason == 4) { print_wakeup_touchpad(); //verifikasi pino dan tidak ada tampilan } }
Langkah 19: Print_wakeup_touchpad (kenali GPIO Touch)
Nah, pada langkah ini, kita memiliki fungsi untuk mencetak pin yang disentuh. Kami memulihkan GPIO yang membangunkan ESP32 dan mencetaknya di layar.
//bersenang-senanglah dengan pino que foi tocadovoid print_wakeup_touchpad() { touch_pad_t touchPin; touchPin = esp_sleep_get_touchpad_wakeup_status(); //memulihkan GPIO que despertou o ESP32 String GPIO = ""; switch(touchPin) { kasus 0: GPIO = "4"; merusak; kasus 1: GPIO = "0"; merusak; kasus 2: GPIO = "2"; merusak; kasus 3: GPIO = "15"; merusak; kasus 4: GPIO = "13"; merusak; kasus 5: GPIO = "12"; merusak; kasus 6: GPIO = "14"; merusak; kasus 7: GPIO = "27"; merusak; kasus 8: GPIO = "33"; merusak; kasus 9: GPIO = "32"; merusak; default: Serial.println("Bangun bukan dengan touchpad"); merusak; } Serial.println("GPIO: "+GPIO); display.clearLine(7);//apaga a linha 7 melakukan display display.drawString(0, 7, "GPIO: "); display.drawString(6, 7, GPIO.c_str()); //imprime o GPIO }
Langkah 20: Unduh Filenya
SAYA TIDAK
Direkomendasikan:
Cara Menggandakan Masa Pakai Baterai Senter AAA: 3 Langkah
Cara Menggandakan Masa Pakai Baterai Senter AAA: Saat menggunakan senter LED 3W yang ditenagai oleh baterai AAA, Anda akan mengharapkannya bertahan selama sekitar 30 menit. Ada cara untuk melipatgandakan waktu pengoperasian dengan menggunakan baterai AA, yang akan saya tunjukkan dengan menghubungkan dudukan baterai AA ke sana
Cara Meretas Sensor Suhu untuk Masa Pakai Baterai Lebih Lama: 4 Langkah
Cara Meretas Sensor Suhu untuk Masa Pakai Baterai yang Lebih Lama: Inkbird IBS-TH1 adalah perangkat kecil yang hebat untuk mencatat suhu dan kelembapan selama beberapa jam atau hari. Ini dapat diatur untuk mencatat setiap detik hingga setiap 10 menit, dan melaporkan data melalui Bluetooth LE ke smartphone Android atau iOS. Aplikasi
Menggandakan Masa Pakai Baterai Radio DX3 Dari Spektrum dengan Harga Di Bawah $20: 11 Langkah
Menggandakan Masa Pakai Baterai Radio DX3 Dari Spektrum dengan Harga Di Bawah $20: Saya pertama kali mendapatkan ide untuk ini di utas untuk DX6/7 di forum RCGRoups.com. Saya menjalankan mobil nitro, jadi saya membeli DX3. Saya menggunakan radio untuk sementara waktu, dan masa pakai baterai saya berada di sisi yang lebih baik dari kebanyakan radio--tetapi pemilik DX7 semakin menyukai
Cara Memperpanjang Masa Pakai Baterai Laptop Anda: 4 Langkah
Cara Memperpanjang Umur Pengisian Baterai Laptop Anda: Dalam instruksi ini, Anda akan belajar cara memperpanjang umur pengisian daya laptop. Jika Anda akan terbang atau mengemudi jarak jauh, langkah-langkah ini dapat membantu membuat baterai bertahan lebih lama dari biasanya dan membuat perjalanan sedikit kurang stres
Tingkatkan Masa Pakai Baterai untuk Elektronik: 8 Langkah
Tingkatkan Masa Pakai Baterai untuk Elektronik: Pada instruksi ini (well, tidak benar-benar dapat diinstruksikan), saya akan menunjukkan beberapa tips dan trik untuk meningkatkan masa pakai beberapa jenis baterai yang berbeda untuk elektronik. Ada instruksi tentang "Tingkatkan baterai hidup untuk elektronik&q