본문 바로가기
임베디드 관련/ESP32

[ESP32] 주요 딥슬립함수

by minhyeok.lee 2024. 11. 4.
반응형

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가 딥슬립 모드에서 깨어나는 방법을 쉽게 설정할 수 있다.

반응형

댓글