Pendahuluan
ESP32 menyediakan teknologi power management, yang dapat kita gunakan untuk mengembangkan aplikasi rendah daya.
Teknologi power management tersebut adalah:
- Low-power clocks
- Ultra-low power (ULP) coprocessors
- Real-time controller (RTC) memory to be used in sleep modes
- Wake-up sources
Terdapat lima power modes yang telah disediakan pada ESP32:
- Active: semua component ESP32 diberi daya. Tidak ada power saving. Contoh-contoh project pada modul sebelumnya menggunakan mode ini.
- Modem-sleep mode: Component Wi-Fi dan Bluetooth didisabled, tidak ada radio communication. Untuk type SoC, konsumsi listrik paling banyak dihabiskan oleh radio.
- Light-sleep mode: High-speed clock dan component yang tergantung padanya dihentikan. Cores dan RAM tetap dialiri listrik, namun tidak bisa digunakan. Yang tersedia adalah fitur-fitur low power dan ULP processor. ESP32 akan menjaga state dari aplikasi, jadi aplikasi dapat kita aktifkan kembali. Listrik yang digunakan sekitar 800 μA.
- Deep-sleep mode: pada state ini ESP32 full low-power operation. Cores dan RAM off. Digunakan RTC memory untuk data retention. Listrik yang digunakan sekitar 6.5 μA.
- Hibernation: ULP Processor juga off dan ESP32 tidak dapat melakukan komputasi. Hanya RTC subsystems yang tersedia untuk kembali menjalankan system ketika ada event dari external terjadi.
Pada modul ini kita akan mempelajari mode light-sleep.
Mengaktifkan ESP32 dari Light Sleep
ESP32 dalam kondisi light-sleep mode. Untuk wake-up sources, kita gunakan timer untuk periodic atau schedule wake-up dan touch sensor sebagai event-based wakeup.
Tidak ada extra component selain koneksi kabel ke touch sensor (ESP32 sudah memiliki touch sensor). Buka file main.c tambahkan kode berikut:
Code
//bagian import library
#include "esp_sleep.h"
#include "driver/touch_pad.h"
#include "esp_timer.h"
#include <string.h>
#include <stdio.h>
#define SEC_MULTIPLIER 1000000l
//bagian init hardware
static void init_hw(void)
{
touch_pad_init();
touch_pad_set_fsm_mode(TOUCH_FSM_MODE_TIMER);
touch_pad_set_voltage(TOUCH_HVOLT_2V7, TOUCH_LVOLT_0V5,TOUCH_HVOLT_ATTEN_1V);
touch_pad_config(TOUCH_PAD_NUM8, 0);
touch_pad_filter_start(10);
uint16_t val;
touch_pad_read_filtered(TOUCH_PAD_NUM8, &val);
touch_pad_set_thresh(TOUCH_PAD_NUM8, val * 0.2);
}
//bagian main function
void app_main(void)
{
init_hw();
int cnt = 0;
while (1)
{
esp_sleep_enable_timer_wakeup(5 * SEC_MULTIPLIER);
esp_sleep_enable_touchpad_wakeup();
esp_light_sleep_start();
printf("cnt: %d\n", ++cnt);
printf("active at (timer value): %lli\n", esp_timer_get_time() / SEC_MULTIPLIER);
printf("wakeup source: ");
switch (esp_sleep_get_wakeup_cause())
{
case ESP_SLEEP_WAKEUP_TIMER:
printf("timer\n");
break;
case ESP_SLEEP_WAKEUP_TOUCHPAD:
{
touch_pad_t tp;
touch_pad_get_wakeup_status(&tp);
printf("touchpad (%d)\n", tp);
break;
}
default:
printf("err: no other configured\n");
break;
}
}
}
Penjelasan Code
Bagian Import Library
Untuk mengakses ESP32 sleep functions, include esp_sleep.h. Untuk touchpad functions gunakan driver/touch_pad.h.
Bagian Init Hardware
init_hw untuk inisialisasi touchpad. Kita gunakan channel TOUCH_PAD_NUM8 sebagai wake-up source.
Bagian Main Function
Pertama kita lakukan init hardware.
Pada while loop, kita enable timer dan touchpad sebagai wake-up
sources, kemudian kita panggil esp_light_sleep_start agar ESP32 masuk ke mode light sleep.
Ketika ESP32 kembali hidup, aplkasi akan mulai dari code baris berikutnya yaitu baris perintah printf.
Dapat kita lihat nila cnt value tetap dijaga dan ditambahkan pada setiap pemanggilan printf statement.
Kita dapat gunakan esp_sleep_get_wakeup_cause untuk mengetahui apa yang mengaktifkan ESP32.
Sampai disini kita sudah berhasil menggunakan mode light sleep. Dengan berakhirnya modul ini, tutorial ESP32 Dasar sudah selesai.
Pada tutorial advanced, kita akan membahas LAN communication.