ESP32에서 주요 딥슬립함수
ESP32에서 제공하는 딥슬립 관련 함수는 esp_sleep.h 라이브러리에 포함되어 있으며, Arduino와 ESP-IDF 환경에서 사용할 수 있다.
1. esp_deep_sleep_start()
- 딥슬립모드를 시작하는 함수이다.
- 호출 시 ESP32가 딥슬립 상태에 들어가며, 이후에는 리셋되기 전까지 실행이 멈춘다.
사용 예제
esp_deep_sleep_start();
2. esp_sleep_enable_timer_wakeup(uint64_t time_in_us)
- 타이머를 통해 깨어나는 기능을 설정한다.
- 설정된 시간이 지나면 ESP32가 자동으로 깨어난다.
- time_in_us는 마이크로초(µs) 단위로 지정한다.
사용 예제
esp_sleep_enable_timer_wakeup(10 * 1000000); // 10초 후에 깨어남
3. esp_sleep_enable_ext0_wakeup(gpio_num_t pin, int level)
- 특정 GPIO 핀의 신호 변화를 통해 깨어나는 설정을 한다.
- 기본적으로 1(하이) 또는 0(로우)으로 설정할 수 있다.
- pin: 깨어나기 위한 GPIO 핀 번호
- level: 트리거가 될 신호 수준 (1 = HIGH, 0 = LOW)
사용 예제
esp_sleep_enable_ext0_wakeup(GPIO_NUM_4, 1); // GPIO 4가 HIGH일 때 깨어남
4. esp_sleep_enable_ext1_wakeup(uint64_t mask, esp_sleep_ext1_wakeup_mode_t mode)
- 여러 GPIO 핀을 마스크로 설정해 여러 핀의 신호 변화를 통해 깨어나도록 설정할 수 있다.
- mask는 깨어나기 위한 GPIO 핀 비트 마스크이다.
- mode: ESP_EXT1_WAKEUP_ALL_LOW 또는 ESP_EXT1_WAKEUP_ANY_HIGH로 설정해 모든 핀이 LOW 상태이거나, 하나라도 HIGH가 될 때 깨어나도록 설정한다.
사용 예제
esp_sleep_enable_ext1_wakeup(GPIO_SEL_4 | GPIO_SEL_15, ESP_EXT1_WAKEUP_ANY_HIGH);
5. esp_sleep_enable_touchpad_wakeup()
- 터치 패드 입력을 통해 ESP32가 깨어나도록 설정한다.
- 터치 패드가 활성화되면 ESP32가 딥슬립에서 깨어난다.
사용 예제
esp_sleep_enable_touchpad_wakeup();
딥슬립 예제 코드 (타이머와 GPIO로 깨어나기)
아래는 타이머와 GPIO 핀을 통해 딥슬립 모드에서 깨어나는 예제 코드이다.
#include "esp_sleep.h"
#include "driver/rtc_io.h"
#define WAKEUP_PIN GPIO_NUM_4 // 외부에서 깨어날 GPIO 핀
#define WAKEUP_TIME 10 * 1000000 // 딥슬립 후 10초 후에 타이머로 깨어남 (마이크로초)
void setup() {
Serial.begin(115200);
delay(1000); // 시리얼 초기화 대기
Serial.println("Entering deep sleep...");
// GPIO 핀을 통한 외부 신호로 깨어나기 설정
esp_sleep_enable_ext0_wakeup(WAKEUP_PIN, 1);
// 타이머로 깨어나기 설정
esp_sleep_enable_timer_wakeup(WAKEUP_TIME);
// 딥슬립 시작
esp_deep_sleep_start();
}
void loop() {
// 딥슬립 모드에서는 loop()가 호출되지 않음
}
주요 포인트
- ESP32가 딥슬립에서 깨어나면 시스템은 리셋되며 setup()부터 다시 시작한다.
- 딥슬립 전력을 최적화하기 위해, 불필요한 핀과 주변 장치를 비활성화하는 것도 고려할 수 있다.
위 예제를 통해 타이머나 외부 핀 이벤트를 이용해 ESP32가 딥슬립 모드에서 깨어나는 방법을 쉽게 설정할 수 있다.
'임베디드 관련 > ESP32' 카테고리의 다른 글
[ESP32] DeepSleep을 포함한 다양한 절전모드 정리 (0) | 2024.01.10 |
---|
댓글