Daftar Isi:

Menghemat Masa Pakai Baterai Dengan Deep Sleep: 20 Langkah
Menghemat Masa Pakai Baterai Dengan Deep Sleep: 20 Langkah

Video: Menghemat Masa Pakai Baterai Dengan Deep Sleep: 20 Langkah

Video: Menghemat Masa Pakai Baterai Dengan Deep Sleep: 20 Langkah
Video: Module Magisk Terbaik Buat Hemat Baterai - Deep Sleep Enhancement Battery Experience Module 2024, November
Anonim
Image
Image
Cara Membangunkan ESP32
Cara Membangunkan ESP32

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

Ini Beberapa Informasi Penting Lainnya
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

Demonstrasi
Demonstrasi

Video menunjukkan program bekerja, sesuai dengan gambar.

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

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

Langkah 12: Perakitan

perakitan
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

Perpustakaan Diperlukan
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

PDF

SAYA TIDAK

Direkomendasikan: