본문 바로가기

ESP32 Project

ESP32로 2년 배터리 수명을 달성하는 방법

반응형

ESP32로 2년 배터리 수명을 달성하는 방법

 

코인형 배터리와 전력 최적화 회로가 내장된 ESP32 마이크로컨트롤러 개발 보드 개발을 위한 제안입니다. 

 

ESP32 프로토타입이 실험실에서는 완벽하게 작동합니다. 센서 값을 읽고, 와이파이에 연결되고, 심지어 블루투스 장치까지 검색합니다. 그런데 배터리를 연결하면 3일 만에 방전됩니다.

 

불편한 진실이지만, 프로젝트 박스에 넣어두고 가만히 있는 ESP32도 30~50mA의 전류를 소모합니다 . 이 정도면 3000mAh 용량의 배터리도 겨우 4일 정도밖에 못 갑니다 . 하지만 특정 기술만 제대로 익히면 같은 칩으로 2년 동안 사용할 수도 있습니다.

 

데이터시트에는 딥 슬립 모드 전류가 10µA라고 명시되어 있지만, 실제 보드는 구성에 따라 10~150µA에 달합니다. 대부분의 취미용 프로젝트는 이러한 "데이터시트상의 이상"과 "실제 구현" 사이의 간극에서 실패합니다. 이 가이드는 실용적인 펌웨어 패턴, 정확한 전력 계산, 그리고 장기간 사용에 적합한 배터리 선택을 통해 이러한 간극을 메우는 방법을 제시합니다.

 

깊은 수면이 선택사항이 아닌 이유

 

ESP32에는 활성, 모뎀 절전, 얕은 절전, 깊은 절전의 네 가지 전력 상태가 있습니다. 하지만 장기간 배터리 수명을 위해서는 이 중 하나만 중요합니다.

 

활성 모드에서는 프로세서가 80~240MHz의 최대 속도로 작동하며, 사용 중인 주변 장치에 따라 100~240mA의 전류를 소모합니다. Wi-Fi 전송 시에는 전류 소모량이 훨씬 더 높아집니다. 바로 이 지점에서 배터리 소모가 시작됩니다.

 

모뎀 절전 모드 와 경량 절전 모드는 무선 기능을 끄거나 CPU를 일시 중지하여 전력을 줄이지만, 여전히 1~20mA의 전류를 소모합니다. 이전보다는 나아졌지만, 여전히 충분하지 않습니다.

 

딥 슬립 모드 는 거의 모든 기능을 종료합니다. 메인 CPU가 정지하고, Wi-Fi와 블루투스도 꺼집니다. RTC(실시간 시계) 컨트롤러와 RTC 메모리만 작동하여 중요한 이벤트가 발생할 때 깨어나도록 최소한의 상태만 유지합니다. 전류 소모량은 보드 및 구성에 따라 10~150µA입니다.

 

활동 수면과 깊은 수면 사이에는 1,000배의 차이가 있습니다. 활동 모드에서 아무리 정교한 최적화를 하더라도 깊은 수면을 완전히 건너뛰는 것을 보완할 수는 없습니다.

 

모델에 따른 전력 소모는 생각보다 훨씬 중요합니다

 

모든 ESP32가 동일한 수면 상태를 보이는 것은 아닙니다.

 

Variant Typical Deep Sleep Current Best For
ESP32 (original) 10-20µA General purpose, legacy projects
ESP32-S2 20-25µA USB-native applications
ESP32-S3 7-10µA AI/ML with low power needs
ESP32-C3 5-10µA BLE-focused, cost-sensitive

 

 

ESP32-C3는 배터리 관련 프로젝트에 특히 주목할 만합니다. RISC-V 코어와 효율적인 BLE 구현 덕분에 간헐적인 무선 통신이 필요한 비콘 및 센서 애플리케이션에 최적의 선택입니다.

 

웨이크 소스 전략이 모든 것을 결정합니다.

 

기기가 전혀 깨어나지 않거나 너무 자주 깨어나는 경우, 깊은 절전 모드는 무용지물입니다. 웨이크업 소스 전략은 전체 전력 프로필을 결정합니다.

 

상시 청취 BLE: 어려운 문제

 

주변의 휴대폰이나 비콘을 감지하는 것은 간단해 보이지만, 실제로 해보면 그렇지 않습니다. 블루투스 신호를 "항상 수신"한다는 것은 무선 장치가 주기적으로 스캔해야 한다는 것을 의미하며, 무선 장치는 전력을 많이 소모합니다.

 

실용적인 접근 방식: 주기적인 스캔 윈도우. 연속 스캔 대신 몇 초마다 깨어나 짧게 스캔한 다음 다시 절전 모드로 들어갑니다.

 

#include <BLEDevice.h>
#include <esp_sleep.h>

#define SCAN_TIME_SECONDS 1
#define SLEEP_TIME_SECONDS 10
#define TARGET_BEACON_NAME "MyBeacon"

RTC_DATA_ATTR int bootCount = 0;

void setup() {
  bootCount++;
  
  BLEDevice::init("");
  BLEScan* scanner = BLEDevice::getScan();
  scanner->setActiveScan(false);  // Passive scan uses less power
  scanner->setInterval(100);
  scanner->setWindow(100);
  
  BLEScanResults results = scanner->start(SCAN_TIME_SECONDS, false);
  
  bool targetFound = false;
  for (int i = 0; i < results.getCount(); i++) {
    BLEAdvertisedDevice device = results.getDevice(i);
    if (device.getName() == TARGET_BEACON_NAME) {
      targetFound = true;
      break;
    }
  }
  
  if (targetFound) {
    // Do your thing: trigger relay, send notification, log event
    handleBeaconDetected();
  }
  
  BLEDevice::deinit(true);  // Critical: fully shut down BLE
  
  esp_sleep_enable_timer_wakeup(SLEEP_TIME_SECONDS * 1000000ULL);
  esp_deep_sleep_start();
}

void loop() {
  // Never reached - deep sleep resets the chip
}

void handleBeaconDetected() {
  // Your application logic here
}

 

 

이 패턴의 실제 전력 소비량은 다음과 같습니다. 약 100mA로 1초간 스캔한 후 약 10µA로 10초간 대기하면 평균 약 9mA가 소모됩니다. 이는 일반적인 배터리로 몇 주 정도 사용할 수 있는 수준이지, 몇 년씩 사용할 수 있는 수준은 아닙니다.

 

BLE 스캐닝을 수년간 안정적으로 사용하려면 더 긴 슬립 간격(30~60초마다 스캔)을 사용하거나, 아무 일도 일어나지 않을 때 스캔을 방지하는 이벤트 기반 웨이크업 기능을 사용해야 합니다.

 

이벤트 기반 기상: 더 쉬운 방법

 

프로젝트가 지속적인 폴링 대신 외부 신호를 기다릴 수 있다면 전력 소비량이 크게 줄어듭니다.

 

타이머 웨이크업 기능은 주기적인 센서 판독에 사용됩니다.

 

#define MINUTES_BETWEEN_READINGS 15

void setup() {
  // Read sensor, store or transmit data
  float temperature = readSensor();
  transmitData(temperature);
  
  // Sleep for 15 minutes
  esp_sleep_enable_timer_wakeup(MINUTES_BETWEEN_READINGS * 60 * 1000000ULL);
  esp_deep_sleep_start();
}

 

 

GPIO 웨이크는 PIR 모션 센서 또는 버튼 누름과 같은 외부 이벤트에 반응합니다.

 

#define WAKE_PIN GPIO_NUM_33

void setup() {
  // Handle the event that woke us
  handleMotionDetected();
  
  // Configure wake on rising edge (PIR output goes high on motion)
  esp_sleep_enable_ext0_wakeup(WAKE_PIN, 1);
  esp_deep_sleep_start();
}

 

 

터치 웨이크 기능은 ESP32의 정전식 터치 핀을 사용합니다.

 

void setup() {
  // Threshold depends on your hardware - lower = more sensitive
  touchSleepWakeUpEnable(T0, 40);  // GPIO4
  esp_deep_sleep_start();
}

 

 

기상 관측소는 여러 가지 신호 발생원을 조합할 수 있습니다. 예를 들어, 기상 관측소는 타이머에 따라 매시간 작동하도록 설정할 수 있지만, 수동으로 측정값을 얻기 위해 버튼을 누르면 즉시 작동하도록 설정할 수도 있습니다.

 

실제로 활용할 수 있는 전력 예산 계산법

 

공식은 간단합니다.

 

Average Current = (active_time × active_current + sleep_time × sleep_current) / total_cycle_time

 

평균 전류 = (활동 시간 × 활동 전류 + 수면 시간 × 수면 전류) / 총 주기 시간

 

예시 1: 온도 센서

 

15분마다 깨어나 센서 값을 읽고 5초 동안 Wi-Fi를 통해 데이터를 전송합니다.

 

  • 활성 상태: 150mA에서 5초간 (Wi-Fi 전송)
  • 수면: 15µA에서 895초
  • 소요 시간: 총 900초

평균 = (5 × 150 + 895 × 0.015) / 900 = 0.85mA

 

3000mAh 배터리, 평균 0.85mA 전류 소모 시: 3,500시간 = 146일

 

2년은 아니지만, 합리적인 출발점입니다. 전송 빈도를 시간당 한 번으로 줄이면 평균 0.22mA가 되어 1년 이상 지속될 수 있습니다.

 

예시 2: 동작 감지 카메라 알림

 

주로 잠을 자다가 PIR 센서에 반응하여 깨어나 사진을 업로드합니다.

 

  • 활성 상태: 200mA에서 10초간 (카메라 + Wi-Fi), 하루 5회 이벤트
  • 수면: 15µA에서 남은 시간

 

일일 소비 전류: (50초 × 200mA) + (86,350초 × 0.015mA) = 10,000mAs + 1,295mAs = 11,295mAs

 

일일 평균: 11,295 / 86,400 = 0.13mA

 

3000mAh 배터리: 23,000시간 = 2.6년

 

빠른 참조

 

Average Current 3000mAh Battery Life
1mA 125 days
500µA 250 days
200µA 1.7 years
100µA 3.4 years
50µA 6.8 years

 

실제 2년 작동을 기준으로 평균 50~100µA를 목표로 하십시오 .

 

적합한 배터리 고르기

 

코드가 완벽하더라도 배터리 화학 구성이 잘못되면 수년간 진행해 온 프로젝트가 시작하기도 전에 무산될 수 있습니다.

 

  • 염화티오닐리튬(Li-SOCl₂, 3.6V): 장기간 사용에 적합한 배터리입니다. 연간 자가 방전율이 1% 미만이며, 보관 수명은 10년입니다. 충전식 배터리는 아니지만, 2년 이상 사용할 경우 어차피 충전할 필요가 없습니다. SAFT LS14500(AA 사이즈, 2600mAh)이 대표적인 선택입니다.
  • LiFePO4(3.2V): 연간 자가 방전율이 약 3%로 낮습니다. 재충전 가능하며, 일반 리튬보다 안전한 화학 구조를 가지고 있습니다. 태양광 충전 기능을 원하는 경우 좋은 선택입니다.
  • 일반 리튬 폴리머 배터리(3.7V): 가만히 두어도 매년 5~10%의 용량이 감소합니다. 2년 후에는 회로에서 전력을 소모하기 전에도 자체 방전으로만 10~20%의 용량이 손실됩니다. 장기간 사용하기에는 적합하지 않지만 6~12개월 정도의 프로젝트에는 사용할 수 있습니다.
  • AA 리튬 배터리(에너자이저 얼티밋): 뛰어난 저온 내성, 안정적인 작동, 3000mAh 용량. 온도 변화가 중요한 야외 환경에 적합합니다.
  • CR2032: 극저전력 용도 외에는 사용을 피하십시오. 220mAh 용량에서 평균 50µA의 전류 소모량으로도 6개월밖에 사용할 수 없습니다.
  • 권장 사항: 2년 동안 사용할 경우, 간단한 LDO 레귤레이터와 함께 리튬 티오닐 클로라이드 전지(SAFT LS14500 또는 동등 제품)를 사용하십시오. 초기 비용이 더 높지만, 매년 배터리를 교체하지 않아도 되므로 장기적으로 비용 절감 효과가 있습니다.

 

슬립 전 체크리스트

 

esp_deep_sleep_start()를 호출하기 전에 다음 체크리스트를 확인하십시오:

 

1. 와이파이와 블루투스를 명시적으로 비활성화하세요:

 

WiFi.disconnect(true);

WiFi.mode(WIFI_OFF);

btStop();

 

2. 웨이크업에 필요하지 않은 경우 ADC를 비활성화하십시오.

 

adc_power_off();

 

3. 사용하지 않는 핀은 알려진 상태로 설정하십시오 (플로팅 핀은 전력을 낭비합니다).

 

gpio_set_direction(GPIO_NUM_XX, GPIO_MODE_INPUT);

gpio_pulldown_en(GPIO_NUM_XX);

 

4. 직렬 출력을 비활성화합니다 (USB 직렬 포트는 주변 장치에 전원을 공급합니다).

 

Serial.end();

 

5. RTC 메모리에 영구 데이터를 저장합니다.

 

RTC_DATA_ATTR int persistentCounter = 0; // Survives deep sleep

 

실험 장비 없이 테스트하기

 

제대로 된 전류 측정 장비를 갖추려면 수백 달러가 듭니다. 하지만 그런 장비 없이 설계를 검증하는 방법을 알려드리겠습니다.

 

  • USB 전력 측정기 (10~15달러)는 활성 상태 동안의 전류 소모량을 보여줍니다. 절전 모드 전류에 대한 해상도는 부족하지만, 활성 상태의 전력 소모량이 예상과 일치하는지 확인하는 데 도움이 됩니다.
  • 일주일 테스트: 완전히 충전된 배터리와 전압 모니터링 로그를 사용하여 프로젝트를 배포하세요. 일주일 동안 실행하고 결과를 예측해 보세요. 일주일 후 배터리 잔량이 90%라면 매주 10%씩 감소하는 것이므로 2년이라는 목표에는 한참 못 미칩니다. 하지만 일주일 후 99.5%라면 정상적인 추세입니다.
  • 계산 결과를 신뢰하고 가정을 검증하세요. 전력 예산 계산은 입력값이 정확할 경우에만 제대로 작동합니다. 활성 시간은 타임스탬프를 사용하여 측정하세요. 최악의 경우를 가정하여 절전 모드 전류를 계산하세요(확실하지 않으면 50µA 사용). 20%의 안전 여유를 확보하세요.

 

이번 주말에 할 일

 

ESP32 배터리의 2년 수명은 다음 네 가지 결정에 달려 있습니다.

 

  1. 깊은 수면을 적극적으로 활용하세요. 활동 모드로 보내는 매 순간은 수면 모드에 있는 것보다 1만 배 더 많은 에너지를 소모합니다.
  2. 실제 필요에 맞는 웨이크업 소스를 선택하세요. 주기적인 감지에는 타이머를, 이벤트 응답에는 GPIO를, 정말 필요할 때만 듀티 사이클 BLE를 사용하세요.
  3. 제작하기 전에 전력 계산을 하세요. 평균 전류가 작동 시간을 결정합니다. 목표값을 기준으로 역산하여 실현 가능성을 검증하세요.
  4. 프로젝트가 자가 방전으로 인해 실패하는 것을 방지할 수 있는 배터리 종류를 선택하세요. 장기간 사용하려면 염화티오닐리튬(LiThOCl)을, 장기간 충전이 가능한 배터리는 인산리튬(LiFePO4)을 사용하는 것이 좋습니다.

 

가장 간단한 프로젝트부터 시작하세요. 15분 간격으로 온도를 기록하는 온도 로거 또는 GPIO 신호를 수신하여 작동하는 도어 센서 같은 것을 만들어 보세요. 절전/깨우기 주기를 구현하고, 일주일 동안 결과를 측정하여 자신감을 쌓은 후, 항상 수신 대기하는 BLE 프로젝트에 도전해 보세요. 얻은 패턴은 그대로 적용되고, 계산 방식도 확장 가능합니다.

 

ESP32는 대부분의 가정용 가전제품보다 수명이 깁니다. 기술은 특별하지 않고, 계산도 어렵지 않습니다. 칩 자체의 성능도 뛰어납니다. 이제 여러분은 ESP32를 사용하는 방법을 알게 되었습니다.

 

 

이미지 출처: https://linuxhint.com/power-esp32-battery/

 

 

이 기사의 원문은 다음 링크를 따라가시면 만날 수 있어요. 휴~ 길게 쓰기도 귀찮다.

 

👉 여기 가이드 자료에 ESP32 개발에 관한 좋은 기사 많다. 오~ 나이스!

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩