АМС | ОЛЕД 0,96 | Адафрут | Ардуино | Режим глубокого сна

В этой статье мы собираемся экономить электроэнергию ESP32, работая со спящими режимами. Есть две основные области, которые нам необходимо рассмотреть:

  1. Источник пробуждения
  2. Тип спящего режима для использования

Для источника пробуждения мы будем использовать таймер, а для спящего режима — режим глубокого сна. Итак, начнем. Мы будем использовать код, который мы написали в предыдущей статье. Вы можете найти эту статью по адресу:



Напишите код для режима гибернации с таймером

Мы просто включаем функцию таймера, чтобы разбудить 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. Это здорово, так как мы используем таймер для пробуждения.

  1. Добавьте следующий код в вашу 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 после того, как вы выполнили свою задачу. Надеюсь это поможет. Пожалуйста, оставьте комментарий о том, как вы этого добились, и подпишитесь.