ESP8266:Примеры/Использование ESP8266 в режиме глубокого сна при помощи IDE Arduino

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


Использование ESP8266 в режиме глубокого сна при помощи IDE Arduino

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

Допустим, вы сделали проект на базе ESP8266, питаемый от батареи или подключили ESP NodeMCU к пауэрбанку.

Но спустя какое-то время вы понимаете, что заряд батареи/пауэрбанка расходуется очень быстро.

И как же в таком случае сэкономить электроэнергию? С помощью кода! Если использовать в скетче ESP8266-проекта функции режима сна, этот проект будет тянуть меньше электроэнергии, благодаря чему ваши батареи будут работать дольше. В этом руководстве мы как раз разберемся, как использовать режим сна ESP8266.

Необходимое оборудование

  • Плата ESP8266 - 1шт.;
  • Провод перемычка;

Справочная информация

Типы режима сна

Есть три типа режима сна: модемный, легкий и глубокий.

Differences between sleep modes esp8266.png

Все они используются для разных целей и потому предназначены для разных типов проектов.

Режим глубокого сна

Для нашего проекта нужно, чтобы все компоненты ESP8266 были выключены, за исключением часов реального времени (RTC), благодаря которым ESP8266 следит за временем.

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

Другие режимы сна

Другие режимы сна – вроде легкого и модемного – полезны, когда вам нужно сберечь заряд источника питания, но при этом сохранить некоторый функционал ESP8266 в рабочем состоянии, или когда вам просто нужны какие-то альтернативные режимы питания. Но если вам нужно, чтобы заряд батареи/пауэрбанка действительно держался долго, то режим глубокого сна – это вариант номер один.

При использовании режима глубокого сна работа проекта выглядит следующим образом:

  1. ESP8266 подключается к WiFi;
  2. ESP8266 выполняет действие (считывает данные от датчика, публикует MQTT-сообщение и т.д.);
  3. Переходит в режим сна и спит заданное количество микросекунд;
  4. Три стадии выше повторяются снова и снова;

Простой проект-пример с использованием режима глубокого сна

Давайте начнем с простого. Подключите друг к другу при помощи провода-перемычки контакты RST и GPIO16 (на плате он обозначен как D0) модуля NodeMCU. Это делается очень просто:

Esp8266 deep sleep rst do 1.png

Если взглянуть на распиновку NodeMCU, то можно увидеть, что GPIO16 – это специальный контакт, оснащенный функцией WAKE (т.е. «пробуждение»).

Esp8266 nodemcu pins.png

Контакт RST модуля ESP8266 всегда находится в состоянии «HIGH» во время работы ESP8266. Однако если этот контакт получит сигнал «LOW», это выполняет сброс микроконтроллера.

Суть этого проекта-примера в том, что мы задаем таймер для ESP8266, а когда это время заканчивается, контакт GPIO16 отправляет контакту RST сигнал «LOW». Это значит, что контакт GPIO16, будучи подключенным к RST, будет пробуждать ESP8266 каждый раз, когда отсчет таймера будет подходить к концу.

Пишем скетч для ESP-12E

Ниже – код, который нужно будет загрузить на ESP8266:

 1 /*
 2  * Скетч-пример, демонстрирующий,
 3  * как перевести ESP8266 в режим глубокого сна
 4  * Автор – Руи Сантос 
 5  * Более подробно о проекте на: http://randomnerdtutorials.com
 6  */
 7  
 8 void setup() {
 9   Serial.begin(115200);
10   Serial.setTimeout(2000);
11 
12   // Ждем инициализации последовательной коммуникации:
13   while(!Serial) { }
14   
15   // Переводим ESP8266 в режим глубокого сна на 30 секунд;
16   // ESP8266 будет пробуждать себя сама,
17   // пока контакт GPIO16 (D0 на плате NodeMCU)
18   // будет подключен к контакту RST:
19   Serial.println("I'm awake, but I'm going into deep sleep mode for 30 seconds");
20              //  "Я проснулся, но перехожу 
21              //   в режим глубокого сна на 30 секунд"
22   ESP.deepSleep(30e6); 
23   
24   // Режим глубокого сна будет длиться, 
25   // пока на контакт RST не будет подан сигнал «LOW»
26   // (например, с помощью кнопки или геркона):
27   //Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is connected to a LOW signal");
28                //  "Я проснулся, но перейду в режим глубокого сна,
29                //   и буду там находиться,
30                //   пока на контакт RST не будет подан сигнал «LOW»"
31   //ESP.deepSleep(0); 
32 }
33 
34 void loop() {
35 }

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

Обратите внимание, что время сна в методе deepSleep() указывается в микросекундах (мкс).

О модуле ESP-01

Если вы хотите собрать аналогичную цепь при помощи ESP-01, то вам нужно будет припаять провод как показано на схеме ниже, т.к. этот маленький контакт на чипе – это и есть GPIO16, и его нужно подключить к контакту RST.

Esp8266 esp01 gpio16 to rst.png

Но эти контакты очень маленькие, и выполнить такую спайку будет довольно сложно...

Esp8266 esp01 gpio16 tiny pin.png

Еще скетч

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

 1 /*
 2  * Скетч-пример, демонстрирующий,
 3  * как перевести ESP8266 в режим глубокого сна.
 4  * Автор – Руи Сантос 
 5  * Более подробно о проекте на: http://randomnerdtutorials.com
 6  */
 7  
 8 void setup() {
 9   Serial.begin(115200);
10   Serial.setTimeout(2000);
11 
12   // Ждем инициализации последовательной коммуникации:
13   while(!Serial) { }
14   
15   // Переводим ESP8266 в режим глубокого сна на 30 секунд;
16   // ESP8266 будет пробуждать сама себя,
17   // пока контакт GPIO16 (D0 на плате NodeMCU)
18   // будет подключен к контакту RST:
19   //Serial.println("I'm awake, but I'm going into deep sleep mode for 30 seconds");
20                //  "Я проснулся, но перехожу
21                //   в режим глубокого сна на 30 секунд"
22   //ESP.deepSleep(30e6); 
23   
24   // Режим глубокого сна будет длиться, 
25   // пока на контакт RST будет подаваться сигнал «LOW»
26   // (например, с помощью кнопки или геркона):
27   Serial.println("I'm awake, but I'm going into deep sleep mode until RESET pin is connected to a LOW signal");
28              //  "Я проснулся, но перейду в режим глубокого сна,
29              //   и буду там находиться,
30              //   пока на контакт RST не будет подан сигнал «LOW»"
31   ESP.deepSleep(0); 
32 }
33 
34 void loop() {
35 }

Как видите, параметром в методе deepSleep() в этот раз служит значение «0». Следовательно, ESP8266 будет пробуждаться только если что-то сбросит плату – это может быть, например, нажатие на кнопку, срабатывание геркона или что-то другое.

Вот так будет выглядеть вариант с кнопкой:

Esp8266 esp01 deep sleep button rst 1.png

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

Измерение силы тока

Теперь давайте при помощи мультиметра измерим силу тока ESP8266 в режиме глубокого сна. На схеме ниже показано, в каких местах нужно разместить щупы мультиметра.

Esp8266 esp01 deep sleep button rst measuring current 1.png

В режиме глубокого сна ESP-01 потребляет лишь 0.3 мА (300 мкА).

Теперь, когда я нажму на кнопку, ESP8266 выполнит запрограммированное действие – напечатает сообщение в монитор порта IDE Arduino – и через несколько миллисекунд перейдет в режим глубокого сна. При обычной эксплуатации с использованием WiFi модуль ESP8266 потребляет в диапазоне между 50 и 170 мА.

Итого

Итак, теперь вы знаете, как использовать режим глубокого сна, а следовательно – как сделать так, чтобы ваши батарейные ESP8266-проекты работали максимально долго.

См.также

Внешние ссылки