Для проектов Интернета вещей (IoT) энергопотребление — критический фактор. Мы научим вас использовать режимы сна ESP32, чтобы ваше устройство работало месяцами от одного аккумулятора.
Содержание
Режимы работы ESP32
ESP32 поддерживает четыре основных режима для экономии энергии:
- Активный режим (Active Mode): Всё включено. Потребление ~160-260 мА.
- Modem Sleep (Light Sleep): Отключается радио (WiFi/BT). CPU работает на сниженной частоте. Состояние памяти сохраняется.
- Глубокий сон (Deep Sleep): CPU и большая часть периферии отключены. Только RTC (часы реального времени) следят за временем или датчиками. Потребление ~10-150 мкА.
- Гибернация (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) и просыпайтесь только тогда, когда это действительно нужно. Используйте мультиметр с поддержкой мкА, чтобы убедиться, что ваша плата действительно «засыпает».