Перейти до вмісту
    Arduino / ESP32 Deep Sleep: Зменшення Споживання Енергії на 100x

    ESP32 Deep Sleep: Зменшення Споживання Енергії на 100x

    Оцініть цю публікацію!
    [Усього: 0 Середнє значення: 0]

    Більшість IoT-пристроїв на ESP32 працюють від батареї, і неоптимізований режим сну може швидко розрядити її. Це призводить до частих замін батарейок, що незручно і дорого, особливо у великих мережах датчиків.

    На практиці, датчик вологості, який періодично передає дані на сервер, може працювати до місяця від батареї при активному режимі, але лише до 6 місяців у стандартному режимі сну. Це критично для віддалених пристроїв, де заміна батарейок неможлива.

    Контекст і чому це важливо

    Deep Sleep – це режим надзвичайно низького енергоспоживання в ESP32, де процесор практично повністю вимкнений. Цей режим особливо актуальний для IoT-пристроїв, які збирають дані з датчиків та надсилають їх на сервер з невеликою періодичністю.

    Якщо не використовувати Deep Sleep або використовувати його неправильно, пристрій постійно буде споживати значну кількість енергії, навіть коли не виконує жодних корисних задач. Це призводить до передчасного виходу з ладу батареї, збільшення експлуатаційних витрат та обмеження терміну служби пристрою.

    Практична реалізація

    Щоб увімкнути Deep Sleep, потрібно правильно налаштувати таймер та встановити відповідні біти в регістрі `TEN`.

    #include <WiFi.h>
    
    // Константа для періоду Deep Sleep (в мікросекундах)
    #define DEEP_SLEEP_DURATION_MS 60000
    
    void setup() {
      Serial.begin(115200);
      delay(1000);
    
      // Вимкнути WiFi перед переходом в Deep Sleep
      WiFi.disconnect();
      WiFi.mode(WIFI_OFF);
    
      // Встановити таймер для Deep Sleep
      esp_sleep_enable_timer_wakeup(DEEP_SLEEP_DURATION_MS);
    
      // Встановити біт Deep Sleep Enable (TEN)
      esp_deep_sleep_set_wakeup_time(0, DEEP_SLEEP_DURATION_MS);
    
      Serial.println("Перехід в Deep Sleep...");
      vTaskDelete(NULL); // Завершити всі завдання
      esp_deep_sleep_start();
    }
    
    void loop() {
      // Цей код ніколи не буде виконано, якщо Deep Sleep працює правильно
    }
    

    Цей код налаштовує таймер, щоб ESP32 прокидався кожні 60 секунд. `esp_deep_sleep_set_wakeup_time` визначає час пробудження, а `esp_deep_sleep_start()` ініціює перехід у режим Deep Sleep, зменшуючи споживання струму приблизно на 100 разів порівняно з активним режимом.

    Поширені помилки та підводні камені

    • Неправильне налаштування таймера: Якщо таймер встановлений невірно, пристрій може не прокидатися або прокидатися занадто часто, що зменшує ефективність Deep Sleep. Перевірте значення `DEEP_SLEEP_DURATION_MS` відповідно до ваших потреб.
      • Залишені WiFi-з’єднання: Не вимкнувши WiFi перед Deep Sleep, пристрій продовжуватиме споживати енергію на підтримку з’єднання. Завжди вимикайте WiFi перед переходом у Deep Sleep.
    • Неправильне завершення завдань: Якщо завдання не завершені, вони можуть перешкодити переходу в Deep Sleep або спричинити непередбачувану поведінку. Використовуйте `vTaskDelete(NULL)` для завершення всіх завдань перед Deep Sleep.

    Порівняння підходів

    Без Deep Sleep, пристрій у активному режимі споживає близько 80-120mA, що виснажує батарею за кілька тижнів. Використання Deep Sleep дозволяє зменшити це споживання до 10-20µA, що значно збільшує термін служби батареї до кількох місяців або навіть років.

    Deep Sleep дає можливість створити автономні IoT-пристрої з мінімальним споживанням енергії, що значно знижує експлуатаційні витрати.

    Висновки

    Deep Sleep ідеально підходить для IoT-пристроїв, які потребують тривалого терміну служби батареї, таких як датчики вологості, температури та руху. Почніть з налаштування таймера на 60 секунд та переконайтеся, що WiFi вимкнено перед переходом у Deep Sleep, щоб максимізувати енергоефективність.

    Залишити відповідь

    Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *