Страница на этапе разработки
В данном уроке мы рассмотри 3 способа уменьшения потребления питания за счет разных режимов сна:
Для реализации режима сна Mode-Sleep нам необходимо на программном уровне включить/выключить модем, для этого пишем следующий текст:
WiFi.forceSleepBegin(); // Wifi off
// что то делаем
WiFi.forceSleepWake(); // Wifi on
Для реализации режима сна Light-sleep необходимо написать следующий текст который мы поместим в отдельную функцию:
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* — номер ножки которую мы выберем для засыпания/пробуждения микроконтроллера.
Для реализации режима сна Deep-sleep нам необходимо написать следующий текст:
ESP.deepSleep (time);
Время измеряется в мкс, максимальное время может быть 4 294 967 295 мкс, это около 71 минуты. Из этого вытекает, что мы не можем заснуть дольше чем на 71 минуту.
Напишем программный код для проверки работы каждого из режима и зафиксируем ток потребления в каждом режиме.
Для проверки работы Modem-sleep режима, мы подключимся к Wi-Fi сети, выдадим сообщение, что подключение удалось, прейдем в режим Modem-sleep, поморгаем светодиодом который находиться на плате и перейдем в режим паузы, для фиксации тока потребления, после фиксации тока потребления, мы выйдем с режима сна и проверим наличии подключения к Wi-Fi, по отсутствию подключения и увеличения тока потребления мы сможем определить, что данный режим работает правильно.
Программный код
WiFi.disconnect();
Для проверки режима сна Light sleep, мы так же оставим два светодиода, только вместо отключения модема пропишем уже готовую функцию Light-sleep и назначим 14 вывод для засыпания и пробуждения:
#include
#define GPIO5 5
#define GPIO4 4
#define WAKE_UP_PIN 4
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(14), GPIO_PIN_INTR_LOLEVEL);
wifi_fpm_do_sleep(0xFFFFFFF); // Sleep for longest possible time
}
void setup() {
// настраиваем ножки на выход
pinMode(GPIO5, OUTPUT);
pinMode(GPIO4, OUTPUT);
Serial.begin(115200);
}
void loop() {
digitalWrite(GPIO5, HIGH);
delay(500);
digitalWrite(GPIO5, LOW);
digitalWrite(GPIO4, HIGH);
delay(500);
digitalWrite(GPIO4, LOW);
Serial.println(«sleep»);
delay(200);
light_sleep();
delay(200);
Serial.println(«Wake up»);
}
Для проверки режима сна deep sleep, мы подключим только светодиод, который будет моргать до момента полного засыпания. По резкому уменьшению тока потребления микроконтроллера мы сможем понять, что глубокий режим сна наступил и все кроме системного таймера выключено.
программный код