цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Сравнение энергопотребления ESP32 в активном (рабочем) режиме и в режиме глубокого сна


Сравнение энергопотребления ESP32 в активном (рабочем) режиме и в режиме глубокого сна

Автор: Mike(admin) от 1-09-2021, 05:55

ESP32 – один из самых популярных модулей микроконтроллеров с Wi-Fi, который часто используется во многих приложениях Интернета вещей (IoT). Это мощный контроллер, который поддерживает программирование двух ядер, а также имеет встроенную поддержку Bluetooth Low Energy (BLE), что делает его хорошим выбором для портативных приложений, таких как устройства GPS-трекеры и т. д. Однако в приложениях с питанием от батарей основная проблема – это энергопотребление. Энергопотребление можно увеличить за счет более разумного управления микроконтроллером, например, можно запрограммировать ESP32 на функционирование в спящем режиме в идеальных условиях, чтобы сократить энергопотребление.


Сравнение энергопотребления ESP32 в активном (рабочем) режиме и в режиме глубокого сна

В этом проекте мы проверим потребление тока широко распространенного микроконтроллера ESP32 с поддержкой Wi-Fi и Bluetooth в нормальном рабочем режиме и режиме глубокого сна (Deep Sleep).


Для этого мы будем использовать плату Devkit V4.0 на базе ESP32 от Espressif, которая имеет мост USB-UART, а также другие выводы ESP32 для легкого подключения. Программирование будет выполняться с помощью Arduino IDE.


Сравнение энергопотребления ESP32 в активном (рабочем) режиме и в режиме глубокого сна

Для проверки энергопотребления мы совершим следующие действия:


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

Схема подключения ESP32 для проверки энергопотребления следующая:


Сравнение энергопотребления ESP32 в активном (рабочем) режиме и в режиме глубокого сна

Схема довольно проста. В ней есть две кнопки. Кнопка перехода в спящий режим переводит ESP32 в режим глубокого сна, а другая кнопка используется для вывода ESP32 из спящего режима. Кнопки подключены к PIN 16 и PIN 33. Обе кнопки настроены на активный низкий уровень при нажатии, поэтому мы организуем дополнительное подтягивание. Однако, чтобы определить, находится ли ESP32 в спящем режиме или в режиме нормального рабочего состояния, мы также подключим светодиод к линии ввода/вывода.


В режиме глубокого сна ESP32, ЦП, WiFi/BT, периферийные устройства, сопроцессоры ULP – все выключены. Включены только часы реального времени (RTC). Во время пробуждения ESP32 должен быть уведомлен источником пробуждения, который выведет ESP32 из режима глубокого сна. Однако, поскольку периферия RTC включена, ESP32 можно вывести из спящего режима через GPIO с включенным RTC. Есть и другие варианты. Это может быть пробуждение через выводы прерывания внешнего пробуждения или использование таймера для пробуждения ESP32. В этом проекте мы используем пробуждение ext0 на выводе 33.


Полный код проекта приведен далее. Он написан для Arduino IDE и, следовательно, может быть легко адаптирован к вашим требованиям.



struct PushBnt{
  const uint8_t pin;
  uint32_t pressCount;
  bool pressed;
};
PushBnt pushBtn = {GPIO_NUM_16, 0, false};
uint8_t led_pin = GPIO_NUM_4;
uint8_t wakeUp_pin = GPIO_NUM_33;
TaskHandle_t taskBlinkled;
void IRAM_ATTR isr_handle() {
  pushBtn.pressed = true;
  pushBtn.pressCount = pushBtn.pressCount + 1;
}
void setup() {
  Serial.begin(115200);
  delay(1000); 
  pinMode(pushBtn.pin, INPUT_PULLUP);
  attachInterrupt(pushBtn.pin, isr_handle, FALLING);
  pinMode(led_pin, OUTPUT);
  xTaskCreate(
              blinkLed, 
              "blinkLed",  
              1024*2,     
              NULL,     
              5,        
              &taskBlinkled);   
  delay(500);
  esp_sleep_enable_ext0_wakeup((gpio_num_t)wakeUp_pin, 0);
}
void loop() {
   if (pushBtn.pressed) {
      Serial.printf("PushButton(%d) Pressed \n", pushBtn.pin);
      Serial.printf("Suspend the 'blinkLed' Task \n");
      vTaskSuspend( taskBlinkled );
      digitalWrite(led_pin, LOW);     
      Serial.printf("Going to sleep..... \n", pushBtn.pin);
      pushBtn.pressed = false;
      esp_deep_sleep_start();
  }
  esp_sleep_wakeup_cause_t wakeupReason;
  wakeupReason = esp_sleep_get_wakeup_cause();
  switch(wakeupReason)
  {
    case ESP_SLEEP_WAKEUP_EXT0  : Serial.println("using external signal ext0 for WakeUp From sleep"); break;
    case ESP_SLEEP_WAKEUP_EXT1  : Serial.println("using external signal ext1 for WakeUp From sleep"); break;
    case ESP_SLEEP_WAKEUP_TIMER  : Serial.println("using Timer signal for WakeUp From sleep"); break;
    case ESP_SLEEP_WAKEUP_TOUCHPAD  : Serial.println("using TouchPad signal for WakeUp From sleep"); break;
    case ESP_SLEEP_WAKEUP_ULP  : Serial.println("using ULP signal for WakeUp From sleep"); break;
    default : break;
    Serial.printf("Resume the 'blinkLed' Task \n");
    vTaskResume( taskBlinkled );
  }  
}
void blinkLed(void* param){  
  while(1){
    static uint32_t pin_val = 0;
    pin_val ^= 1;
    digitalWrite(led_pin, pin_val);
    Serial.printf("Led ----------------- %s\n" , pin_val? "On" : "Off");   
     vTaskDelay( 1000 / portTICK_PERIOD_MS );
  }
  taskBlinkled = NULL;
  vTaskDelete( NULL );
}

Схема была собрана на макетной плате. Ток, потребляемый схемой в активном режиме, составляет почти 58 мА, но в режиме глубокого сна он составляет почти 4,10 мА. На изображении, приведенном далее, показано потребление тока в активном режиме ESP32.


Сравнение энергопотребления ESP32 в активном (рабочем) режиме и в режиме глубокого сна

В режиме глубокого сна потребление тока упало примерно до 3,95 мА, на следующем изображении показано потребление тока в режиме глубокого сна ESP32.


Сравнение энергопотребления ESP32 в активном (рабочем) режиме и в режиме глубокого сна

Однако в режиме глубокого сна потребляемый ток ESP32 составляет почти 150 мкА. Но зарегистрированное потребление тока для данной платы ESP32 Devkit составляет почти 4,10 мА. Это связано с использованием CP2102 и линейного стабилизатора. Эти два компонента подключены к линии питания 5 В. Также на плате имеется светодиод индикации питания, подключенный к линии питания, который потребляет почти 2 мА тока.Таким образом, можно легко определить, что ESP32 потребляет очень мало энергии в режиме глубокого сна, что очень полезно для работы от батарей.




© digitrode.ru


Теги: ESP32




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

Комментарии:

Оставить комментарий