Спящий режим ESP8266
Рассмотрение режимов глубокого сна ESP8266. Примеры использования
Спящий режим ESP8266
29.02.2024 в 10:37   1019 0
Версия для печати

Спящий режим ESP8266

logo

В данной  статье мы рассмотрим как организовать три режима сна на плате ESP8266. Отправляя микроконтроллер в сон мы тем самым экономим энергию, это важно, когда устройство питается от аккумулятора и работает круглосуточно.

Виды спящего режима

Существует четыре различных режима сна: без снарежим сна модема, легкий сон и глубокий сон. В следующей таблице показаны различия между каждым режимом.

table

Теперь рассмотрим каждый режим более подробно

No-sleep

В режиме No-Sleep, будет работать все по максимуму. Очевидно, что это наиболее неэффективно.

Потребление — до 215 мА в режиме передачи, 100 мА — в режиме приема, 70 мА — в режиме ожидания.

Modem-sleep

Это режим по умолчанию для ESP8266. Тем не менее, он используется только когда вы подключены к точке доступа. Потребление при этом порядка 15мА.

В режиме «Modem-sleep» контроллер отключает wi-fi между интервалами маяка DTIM . Этот интервал устанавливается вашим маршрутизатором.

Спящий режим модема обычно используется для приложений, которым требуется мощность процессора. 
Когда постоянное соединение Wi-Fi не требуется, а приложение необходимо сохранить, очень полезно снизить энергопотребление.
Управление этим режимом достигается за счет управления Wi-Fi


WiFi.forceSleepBegin(); // Wifi off
delay();
WiFi.forceSleepWake(); // Wifi on

Когда вам нужно перейти в спящий режим, используйте первую инструкцию
Когда вам нужно проснуться, используйте вторую инструкцию.
Можно использовать в цикле.

Light-sleep

Выполняет ту же функцию, что и «Modem-sleep», но также отключает системные часы и приостанавливает работу CPU. Потребление при этом режиме еще меньше и составляет порядка 1мА.

Для пробуждения не нужно перезагружать микроконтроллер, но засыпание и пробуждение происходит по сигналу который подается на пин GPIO который мы выберем программно.


void light_sleep(){
wifi_station_disconnect();
wifi_set_opmode_current(NULL_MODE);
wifi_fpm_set_sleep_type(LIGHT_SLEEP_T);
wifi_fpm_open(); // Enables force sleep
gpio_pin_wakeup_enable(GPIO_ID_PIN(N*), GPIO_PIN_INTR_LOLEVEL);
wifi_fpm_do_sleep(0xFFFFFFF); // Sleep for longest possible time
}

N* — номер GPIO пина, который мы выберем для засыпания/пробуждения микроконтроллера.

Deep-sleep

Все выключено, но часы реального времени (RTC), будут работать. Это наиболее энергоэффективный вариант, микросхема ESP8266 потребляет всего 20 мкА. Обратите внимание, что ток может быть выше, если у вас в схеме есть другие потребители, например светодиоды, стабилизаторы напряжения, датчики.

Этот режим перезагружает микроконтроллер, поэтому после просыпания он будет заново подключаться к WiFi. Т.е. в этом режиме виртуально нажимается кнопка reset и программа начинает работать с начала.

Чтобы перевести ESP8266 в режим глубокого сна, нужно написать всего одну строку:


ESP.deepSleep(15e6); // сон  (5 минут = 300e6) или 0 - чтобы не просыпаться самостоятельно

Чтобы вручную разбудить, нужно на вывод RST подать сигнал LOW.

Чтобы микросхема могла самостоятельно выйти из глубокого сна нужно сделать перемычку RST на GPIO 16, который помечен как D0. Если посмотрите на распиновку, увидите, что GPIO 16 имеет функцию WAKE

Припаяйте перемычку как нарисовано ниже для платы NodeMCU:

Перемычка  для платы WeMos D1 mini:

Для платы ESP-01S

Материал также доступен на моем канале: Яндекс Дзен и в группе ВК
Категория: Программирование | Добавил: :, (01.12.2022) W
Просмотров: 1019 | Теги: Энергосбережение, deep-sleep, Sleep, ESP8266 | Рейтинг: 0.0/0
Поделиться:
Всего комментариев: 0
avatar