Використання внутрішнього Watchdog таймера в ESP32

Watchdog (WDT) — це вбудований таймер мікроконтролера ESP32, який автоматично перезапускає пристрій, якщо програма зависла або перестала виконуватися коректно. Ця функція особливо корисна у проєктах, що працюють без постійного контролю, наприклад, у IoT-пристроях та системах автоматизації.

1. Теорія

  • Призначення WDT: запобігає «зависанню» пристрою, автоматично його перезапускаючи.
  • Типи WDT у ESP32:
    • Task Watchdog — слідкує за окремими завданнями у FreeRTOS.
    • Main System Watchdog — контролює роботу всієї системи.
  • Принцип роботи: програма повинна періодично «годувати» (скидати) таймер WDT. Якщо цього не відбувається протягом заданого часу — виконується апаратне перезавантаження ESP32.

2. Підключення бібліотеки

Для роботи з WDT в Arduino IDE можна використовувати вбудовані функції ESP-IDF через Arduino-обгортку:

#include <esp_task_wdt.h>

3. Приклад коду

Приклад ініціалізації та використання Task Watchdog з таймаутом 5 секунд:

#include <esp_task_wdt.h>

void setup() {
  Serial.begin(115200);
  // Ініціалізація WDT на 5 секунд
  esp_task_wdt_init(5, true); // true — перезапуск при спрацюванні
  esp_task_wdt_add(NULL); // Додаємо поточне завдання (loop) у спостереження
}

void loop() {
  Serial.println("Працюємо нормально");
  delay(2000); // Затримка менше 5 секунд — WDT не спрацює

  // Скидання WDT
  esp_task_wdt_reset();

  // Якщо розкоментувати нижче — відбудеться перезапуск через 5 секунд
  /*
  Serial.println("Симулюємо зависання...");
  while (true) { } // Нескінченний цикл — WDT перезапустить ESP32
  */
}

4. Налаштування часу та завдань

  • Таймаут: задається у секундах у функції esp_task_wdt_init().
  • Додавання завдань: esp_task_wdt_add(handle) — можна відстежувати окремі задачі у FreeRTOS.
  • Видалення завдань: esp_task_wdt_delete(handle).

5. Застосування

  • IoT-датчики та контролери, що працюють у віддалених місцях.
  • Проєкти з довгими циклами та складною логікою.
  • Системи, які мають автоматично відновлюватися після збоїв.

6. Важливі зауваження

  • Не «годуйте» WDT занадто часто — це може приховати зависання коду.
  • Не використовуйте великі затримки delay() без скидання WDT.
  • У багатозадачних проєктах враховуйте, що WDT може бути налаштований для кількох потоків одночасно.

Висновок: використання внутрішнього Watchdog таймера ESP32 — це простий і надійний спосіб підвищити стабільність ваших проєктів та захистити їх від випадкових зависань.

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Ультразвуковий датчик відстані HC-SR04 для Arduino, ESP32, STM32

Ультразвуковий датчик відстані HC-SR04 для Arduino, ESP32, STM32

HC-SR04 — популярний ультразвуковий сенсор для точного вимірювання відстані в діапазоні від 2 до 450..

62.06грн.

ESP32 LED PWM: частоти та роздільна здатність ШІМ (LEDC)

ESP32 LED PWM: частоти та роздільна здатність ШІМ (LEDC)

ESP32 LED PWM Controller: керування яскравістю світлодіодів ESP32 має вбудований модуль LED PWM C..

Роз'ємний штекер мама-папа 2,54мм на 2, 3, 4, 5 пінів

Роз'ємний штекер мама-папа 2,54мм на 2, 3, 4, 5 пінів

Пластмасовий корпус для роз'єму 2,54мм без струмопровідної вставки..

1.01грн.

Радіатор для транзистора 21х15х10мм

Радіатор для транзистора 21х15х10мм

Радіатор алюмінієвий для пасивного охолодження різноманітних напівпровідникових силових компонентів:..

13.58грн.

Символьний LCD індикатор 16х2 синій

Символьний LCD індикатор 16х2 синій

Символьний двохрядний рідкокристалічний індикатор. 16 символів в одному рядку.Синя підсвіткаЗ'єднува..

83.25грн.