Isi kandungan:

Menjimatkan Hayat Bateri Dengan Tidur Sedap: 20 Langkah
Menjimatkan Hayat Bateri Dengan Tidur Sedap: 20 Langkah

Video: Menjimatkan Hayat Bateri Dengan Tidur Sedap: 20 Langkah

Video: Menjimatkan Hayat Bateri Dengan Tidur Sedap: 20 Langkah
Video: Rahsia Penjagaan Battery Yang Betul – 100% Berhasil ! 2024, Disember
Anonim
Image
Image
Cara Membangunkan ESP32
Cara Membangunkan ESP32

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

Inilah Beberapa Maklumat Yang Lebih Penting
Inilah Beberapa Maklumat Yang Lebih 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

Demonstrasi
Demonstrasi

Video menunjukkan program berfungsi, sesuai dengan gambar.

Langkah 11: Node WiFiMCU-32S ESP-WROOM-32

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

Langkah 12: Perhimpunan

perhimpunan
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

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

PDF

INO

Disyorkan: