Оптимизация энергопотребления ESP32: Полный гид

Оптимизация энергопотребления ESP32: Полный гид

Как снизить потребление тока ESP32 с миллиампер до микроампер. Спящие режимы, настройка частоты и советы для работы от батареек.

Основы

Вернуться в блог

Для проектов Интернета вещей (IoT) энергопотребление — критический фактор. Мы научим вас использовать режимы сна ESP32, чтобы ваше устройство работало месяцами от одного аккумулятора.

Блок-схема ESP32
Режимы

Режимы работы ESP32

ESP32 поддерживает четыре основных режима для экономии энергии:

  1. Активный режим (Active Mode): Всё включено. Потребление ~160-260 мА.
  2. Modem Sleep (Light Sleep): Отключается радио (WiFi/BT). CPU работает на сниженной частоте. Состояние памяти сохраняется.
  3. Глубокий сон (Deep Sleep): CPU и большая часть периферии отключены. Только RTC (часы реального времени) следят за временем или датчиками. Потребление ~10-150 мкА.
  4. Гибернация (Hibernation): Отключено почти всё, включая большую часть памяти RTC. Только таймер пробуждения. Самый экономный режим.
Сравнение

Энергопотребление в цифрах

Сравнение режимов сна

Режим CPU Radio Типичный ток
Active ON ON 160–260 мА
Light Sleep PAUSED OFF ~0.8 мА
Deep Sleep OFF OFF 10–150 мкА
Hibernation OFF OFF ~5 мкА
Радио

Отключение WiFi и Bluetooth

WiFi и Bluetooth потребляют больше всего энергии. Если они не нужны постоянно, отключайте их программно:

#include "WiFi.h"

void setup() {
  // Отключение WiFi
  WiFi.mode(WIFI_OFF);
  
  // Отключение Bluetooth
  btStop();
}
Код

Использование Deep Sleep

В режиме глубокого сна ESP32 отключает почти всё. После пробуждения программа запускается заново с функции setup().

#define uS_TO_S_FACTOR 1000000ULL  /* Коэффициент перевода мкс в сек */
#define TIME_TO_SLEEP  60        /* Время сна в секундах */

void setup(){
  Serial.begin(115200);
  
  // Настройка таймера пробуждения
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  
  Serial.println("ESP32 уходит в сон на 60 секунд...");
  Serial.flush(); 
  
  // Уход в глубокий сон
  esp_deep_sleep_start();
}

void loop(){}
Советы

Советы для работы от батареи

  • Используйте голые модули: На стандартных платах (DevKit) есть светодиоды питания и USB-чипы, которые “едят” ток даже в режиме сна.
  • Датчик освещенности или кнопка: Вместо таймера используйте просыпание по внешнему сигналу (EXT0, EXT1) на пинах RTC_GPIO.
  • Снижайте частоту: Если ваш проект просто читает датчик, снизьте частоту процессора до 80 МГц или ниже через setCpuFrequencyMhz(80).
  • Держите данные в памяти RTC: Обычные переменные стираются после сна. Используйте атрибут RTC_DATA_ATTR, чтобы сохранить данные между перезагрузками.
Итог

Заключение

Оптимизация потребления — это искусство баланса. Начинайте с самого глубокого сна (Deep Sleep) и просыпайтесь только тогда, когда это действительно нужно. Используйте мультиметр с поддержкой мкА, чтобы убедиться, что ваша плата действительно «засыпает».