Modul 3 – Menjelajahi Deep Sleep ESP32 (1/4)

ESP32 Deep Sleep Mode

Penghematan Daya Maksimal untuk Aplikasi Berbasis Baterai

Dalam unit ini, Anda akan mempelajari tentang mode tidur dalam (deep sleep) pada ESP32, cara mengonfigurasi mode ini, dan berbagai metode yang dapat digunakan untuk membangunkan ESP32 dari mode tidur dalam.

Catatan: Unit ini merupakan pengantar untuk mode tidur dalam. Untuk contoh implementasi ESP32 deep sleep, silakan lanjutkan ke unit-unit berikutnya dalam Modul ini.

1
Mode Daya ESP32

Berbagai Mode Daya

ESP32 dapat berpindah antara berbagai mode daya yang berbeda:

  • Active mode – Mode operasi normal dengan kinerja penuh
  • Modem Sleep mode – CPU aktif tetapi WiFi/Bluetooth dimatikan
  • Light Sleep mode – CPU dijeda, tetapi RTC tetap aktif
  • Deep Sleep mode – CPU dan WiFi dimatikan, hanya RTC yang aktif
  • Hibernation mode – Hampir semua komponen dimatikan, hanya timer RTC yang aktif

Anda dapat membandingkan kelima mode yang berbeda pada tabel berikut dari datasheet ESP32 Espressif.

Tabel Perbandingan Mode Daya

Power Mode Active Modem-sleep Light-sleep Deep-sleep Hibernation
Sleep Pattern Association sleep pattern ULP sensor-monitored pattern
CPU ON ON PAUSE OFF OFF
Wi-Fi/BT baseband and radio ON OFF OFF OFF OFF
RTC memory and RTC peripherals ON ON ON ON OFF
ULP co-processor ON ON ON ON/OFF OFF

Perbandingan berbagai mode daya ESP32 (Sumber: ESP32 Espressif Datasheet)

Datasheet ESP32 Espressif juga menyediakan tabel yang membandingkan konsumsi daya dari berbagai mode daya.

Konsumsi Daya Berdasarkan Mode

Power Mode Description Power Consumption
Active (RF working) Wi-Fi Tx packet 14 dBm ~ 19.5 dBm Please refer to Table 10 for details.
Wi-Fi / BT Tx packet 0 dBm
Wi-Fi / BT Rx and listening
Modem-sleep The CPU is powered on. Max speed 240 MHz: 30 mA ~ 50 mA
Normal speed 80 MHz: 20 mA ~ 25 mA
Light-sleep Slow speed 2 MHz: 2 mA ~ 4 mA
0.8 mA
Deep-sleep The ULP co-processor is powered on. 150 μA
ULP sensor-monitored pattern 100 μA @1% duty
RTC timer + RTC memory 10 μA
Hibernation RTC timer only 5 μA
Power off CHIP_PU is set to low level, the chip is powered off 0.1 μA

Konsumsi daya pada berbagai mode ESP32 (Sumber: ESP32 Espressif Datasheet)

Dan berikut juga Tabel 10 untuk membandingkan konsumsi daya dalam mode aktif:

Tabel 10: Spesifikasi Konsumsi Daya RF

Mode Min Typ Max Unit
Transmit 802.11b, DSSS 1 Mbps, POUT = +19.5 dBm 240 mA
Transmit 802.11g, OFDM 54 Mbps, POUT = +16 dBm 190 mA
Transmit 802.11n, OFDM MCS7, POUT = +14 dBm 180 mA
Receive 802.11b/g/n 95 ~ 100 mA
Transmit BT/BLE, POUT = 0 dBm 130 mA
Receive BT/BLE 95 ~ 100 mA

Spesifikasi konsumsi daya RF di mode aktif (Sumber: ESP32 Espressif Datasheet)

2
Mengapa Menggunakan Deep Sleep Mode?

Keuntungan Deep Sleep

Mengoperasikan ESP32 dalam mode aktif dengan baterai bukanlah pilihan ideal karena daya baterai akan terkuras dengan sangat cepat.

Ilustrasi tingkat baterai dari penuh hingga habis

Jika Anda menempatkan ESP32 dalam mode tidur dalam, ini akan mengurangi konsumsi daya secara signifikan, dan baterai Anda akan bertahan lebih lama.

Menggunakan ESP32 dalam mode tidur dalam berarti menghentikan aktivitas yang mengkonsumsi daya tinggi saat beroperasi, tetapi tetap menyisakan aktivitas yang cukup untuk membangunkan prosesor ketika terjadi sesuatu yang penting.

Fakta Penting: Dalam mode tidur dalam, baik aktivitas CPU maupun Wi-Fi tidak berlangsung, tetapi co-prosessor Ultra Low Power (ULP) masih dapat tetap aktif. Ini memungkinkan ESP32 tetap dapat merespons kondisi eksternal tertentu dengan konsumsi daya yang sangat rendah.

Saat ESP32 berada dalam mode tidur dalam, memori RTC juga tetap aktif, sehingga kita dapat menulis program untuk co-prosessor ULP dan menyimpannya di memori RTC untuk mengakses perangkat periferal, timer internal, dan sensor internal.

Mode operasi ini sangat berguna jika Anda perlu membangunkan CPU utama oleh peristiwa eksternal, timer, atau keduanya sambil mempertahankan konsumsi daya minimal.

3
Pin RTC_GPIO

Penggunaan Pin Selama Deep Sleep

Selama mode tidur dalam, beberapa pin ESP32 dapat digunakan oleh co-prosessor ULP, yaitu pin RTC_GPIO dan pin Touch. Datasheet ESP32 menyediakan tabel yang mengidentifikasi pin RTC_GPIO. Anda dapat menemukan tabel tersebut di sini pada halaman 15.

Anda dapat menggunakan tabel tersebut sebagai referensi, atau lihat pinout berikut untuk menemukan berbagai pin RTC_GPIO. Pin RTC_GPIO ditandai dengan kotak persegi panjang berwarna oranye.

ESP32 DOIT DEVKIT V1 dengan 30 GPIO (Pin RTC_GPIO ditandai dengan kotak oranye)

ESP32 DOIT DEVKIT V1 dengan 36 GPIO (Pin RTC_GPIO ditandai dengan kotak oranye)

Catatan Penting: Pin RTC_GPIO ini tetap berfungsi bahkan ketika ESP32 dalam mode tidur dalam, sehingga memungkinkan Anda untuk memantau sensor atau sinyal eksternal tanpa harus membangunkan seluruh mikrokontroler.

4
Sumber Wake-Up

Metode Membangunkan ESP32

Setelah menempatkan ESP32 ke dalam mode tidur dalam, ada beberapa cara untuk membangunkannya:

Timer Wake-Up

Anda dapat menggunakan timer untuk membangunkan ESP32 pada interval waktu yang telah ditentukan. Cocok untuk aplikasi pengumpulan data berkala.

External Wake-Up

ESP32 dapat dibangunkan oleh sinyal eksternal. Anda dapat menggunakan satu sumber bangun eksternal atau beberapa sumber yang berbeda.

Touch Wake-Up

ESP32 dapat dibangunkan dengan menggunakan sensor sentuh yang terintegrasi, tanpa memerlukan komponen eksternal tambahan.

ULP Co-processor Wake-Up

Co-prosessor ULP dapat memantau sensor atau sinyal dan membangunkan ESP32 saat kondisi tertentu terpenuhi.

Catatan: Untuk saat ini, kita hanya akan membahas tiga pilihan bangun pertama karena, saat ini, kami belum menemukan contoh yang sesuai dan mudah dipahami untuk menggunakan pilihan bangun co-prosessor ULP.

5
Menulis Sketsa Deep Sleep

Langkah-langkah Dasar

Untuk menulis sketsa yang menempatkan ESP32 ke dalam mode tidur dalam dan kemudian membangunkannya, Anda perlu mengingat bahwa:

  1. Pertama, Anda perlu mengkonfigurasi sumber-sumber bangun. Ini berarti mengkonfigurasi apa yang akan membangunkan ESP32. Anda dapat menggunakan satu atau menggabungkan lebih dari satu sumber bangun.
  2. Anda dapat memutuskan periferal mana yang akan dimatikan atau tetap aktif selama tidur dalam. Namun, secara default, ESP32 secara otomatis mematikan periferal yang tidak diperlukan dengan sumber bangun yang Anda tentukan.
  3. Terakhir, Anda menggunakan fungsi esp_deep_sleep_start() untuk menempatkan ESP32 ke dalam mode tidur dalam.

Catatan: Unit-unit berikutnya dalam modul ini akan menunjukkan kepada Anda cara menggunakan berbagai sumber bangun.

Contoh Kerangka Kode

Berikut ini adalah kerangka dasar untuk kode yang menggunakan mode tidur dalam dengan timer sebagai sumber bangun:

#include "esp_sleep.h"

// Waktu dalam mikrodetik (1 detik = 1000000 mikrodetik)
#define TIME_TO_SLEEP  5000000

void setup() {
  Serial.begin(115200);
  
  Serial.println("Mengonfigurasi timer wake-up...");
  
  // Menyiapkan timer sebagai sumber bangun
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP);
  
  Serial.println("Tidur dalam 5 detik...");
  Serial.println("========================");
  
  // Memulai mode tidur dalam
  esp_deep_sleep_start();
}

void loop() {
  // Kode di sini tidak akan dijalankan dalam mode tidur dalam
}

Kerangka kode di atas akan:

  • Mengkonfigurasi timer sebagai sumber bangun, dengan waktu tidur 5 detik
  • Menampilkan pesan ke Serial Monitor sebelum tidur
  • Menempatkan ESP32 ke dalam mode tidur dalam
  • Setelah 5 detik, ESP32 akan bangun dan me-reset, memulai proses eksekusi dari awal lagi

Tip Penting: Ketika ESP32 bangun dari mode tidur dalam, ia melakukan reset dan menjalankan kode dari awal. Jika Anda perlu mengetahui apakah ESP32 baru saja bangun dari mode tidur dalam, Anda dapat menggunakan fungsi esp_sleep_get_wakeup_cause() untuk memeriksa penyebab bangun.

6
Sumber Daya Tambahan

Referensi Bermanfaat

Selain modul tidur dalam ini, kami sarankan untuk melihat datasheet ESP32 Espressif, dan dokumentasi API tidur dalam di situs web readthedocs.io:

Tip Belajar: Dokumentasi API dapat tampak rumit pada awalnya, tetapi ini adalah sumber informasi yang sangat berharga ketika Anda perlu menggunakan fitur-fitur lebih lanjut atau mengoptimalkan kode Anda. Luangkan waktu untuk membiasakan diri dengan struktur dan terminologi dokumentasi.

7
Kesimpulan

Mode tidur dalam ESP32 adalah fitur penting untuk aplikasi berbasis baterai atau bertenaga rendah. Dengan memahami konsep dasar, sumber bangun, dan cara menulis sketsa tidur dalam, Anda dapat secara signifikan meningkatkan efisiensi daya proyek ESP32 Anda.

Dalam unit ini, kita telah mempelajari:

  • Berbagai mode daya ESP32 dan perbandingannya
  • Mengapa mode tidur dalam penting untuk aplikasi berbasis baterai
  • Pin RTC_GPIO yang dapat digunakan selama mode tidur dalam
  • Berbagai sumber bangun untuk mode tidur dalam
  • Langkah-langkah dasar untuk menulis sketsa tidur dalam

Pada unit-unit berikutnya, kita akan menjelajahi implementasi praktis dari konsep-konsep ini dengan contoh-contoh konkret untuk berbagai metode bangun.

Selanjutnya

Pada unit berikutnya, kita akan mempelajari cara menggunakan timer sebagai sumber bangun untuk ESP32 dalam mode tidur dalam, dengan contoh praktis dan penjelasan rinci.

Lanjut ke Unit 2: Deep Sleep – Timer Wake Up →

👥

Komunitas & Dukungan

Jika Anda memiliki pertanyaan atau ingin berbagi proyek yang telah Anda buat dengan menggunakan mode tidur dalam ESP32, silakan bergabung dengan grup telegram https://t.me/kodingindonesia. Komunitas akan senang melihat kreasi Anda dan membantu jika Anda menghadapi tantangan!

 

Anton Prafanto

Konten developer kodingindonesia.com & staf pengajar tetap di Universitas Mulawarman Samarinda

all author posts