АМС | ОЛЕД 0,96 | Адафрут | Ардуино | Режим глубокого сна
В этой статье мы собираемся экономить электроэнергию ESP32, работая со спящими режимами. Есть две основные области, которые нам необходимо рассмотреть:
- Источник пробуждения
- Тип спящего режима для использования
Для источника пробуждения мы будем использовать таймер, а для спящего режима — режим глубокого сна. Итак, начнем. Мы будем использовать код, который мы написали в предыдущей статье. Вы можете найти эту статью по адресу:
Напишите код для режима гибернации с таймером
Мы просто включаем функцию таймера, чтобы разбудить ESP32. Ниже показана функция, которую мы будем использовать для пробуждения ESP32.
esp_sleep_enable_timer_wakeup(<time in microseconds)
Чтобы инициализировать спящий режим, мы просто используем функцию глубокого сна вместе с конфигурациями сна, используя esp_sleep_pd_config.
esp_sleep_pd_config(ESP_PD_DOMAIN_MAX, ESP_PD_OPTION_OFF); esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF); esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_OFF); esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_OFF); esp_deep_sleep_start();
Необходимо настроить конфигурацию, чтобы активировать режим гибернации. Спящий режим должен быть настроен до запуска esp_deep_sleep_start(). В режиме гибернации единственным активным компонентом ESP32 является таймер RTC. Это здорово, так как мы используем таймер для пробуждения.
- Добавьте следующий код в вашу Arduino IDE. Помните, что это дополнение к предыдущему скрипту.
#define convert_to_microseconds 1000000 #define rtc_timer_in_seconds 5 RTC_DATA_ATTR int bootCount = 0; void hibernation() { // Setup the RTC Boot Counter ++bootCount; Serial.println("Boot number: " + String(bootCount)); // Turn of OLED display.ssd1306_command(SSD1306_DISPLAYOFF); // Must setup the way the ESP32 will wake up first esp_sleep_enable_timer_wakeup(rtc_timer_in_seconds * convert_to_microseconds); esp_sleep_pd_config(ESP_PD_DOMAIN_MAX, ESP_PD_OPTION_OFF); esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF); esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_SLOW_MEM, ESP_PD_OPTION_OFF); esp_sleep_pd_config(ESP_PD_DOMAIN_RTC_FAST_MEM, ESP_PD_OPTION_OFF); esp_deep_sleep_start(); }
Выключение 0,96 IIC OLED
IIC OLED — еще один элемент, который нам нужно отключить. Это устройство также потребляет энергию. К счастью, мне удалось найти код для отключения этого с помощью библиотеки Adafruit. Показанный ниже код необходимо добавить перед переводом устройства в спящий режим.
display.ssd1306_command(SSD1306_DISPLAYOFF);
Добавьте код в свой цикл в ESP32 после того, как вы выполнили свою задачу. Надеюсь это поможет. Пожалуйста, оставьте комментарий о том, как вы этого добились, и подпишитесь.