Embedded / IoT
Beginner
ESP-IDF / Arduino
초저전력 배터리 운용을 위한 ESP32 Deep Sleep 및 타이머/외부 GPIO 웨이크업
평상시 150mA 이상 소모하는 전력을 10μA 수준으로 떨어뜨리고, 타이머 또는 터치/버튼 인터럽트로 깨어나는 저전력 센서 노드 펌웨어 설계.
#Embedded #ESP32 #DeepSleep #LowPower #PowerManagement
핵심 개념Deep Sleep에 진입하면 CPU 메인 코어, 고속 램, Wi-Fi/BT 무선 통신부가 완전히 차단되고 오직 ULP(초저전력 보조 코어)와 RTC 컨트롤러만 살아남아 마이크로암페어(μA) 단위의 전류만 소모합니다.
1. Deep Sleep 타이머 및 GPIO 웨이크업 C++ 코드
#include <esp_sleep.h>
#define TIME_TO_SLEEP_SEC 60 // 60초 수면
#define uS_TO_S_FACTOR 1000000ULL
RTC_DATA_ATTR int bootCount = 0; // RTC 메모리에 저장되어 수면 후에도 유지됨
void setup() {
Serial.begin(115200);
bootCount++;
Serial.printf("[Boot Count] %d 회 부팅되었습니다.\n", bootCount);
// 1. 센서 측정 및 전송 작업 수행
// ReadAndSendSensorData();
// 2. 타이머 웨이크업 소스 설정 (60초)
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP_SEC * uS_TO_S_FACTOR);
// 3. 외부 버튼(GPIO 33번 LOW 시) 웨이크업 추가
esp_sleep_enable_ext0_wakeup(GPIO_NUM_33, 0);
Serial.println("Deep Sleep에 진입합니다...");
esp_deep_sleep_start();
}
void loop() {}