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

Типи Watchdog у ESP32

Task Watchdog (TWDT)

  • Слідкує за виконанням задач у FreeRTOS.
  • Якщо задача "зависла" і не звітує вчасно — викликається reset системи.
  • Використовується для моніторингу тривалих операцій.

Interrupt Watchdog (IRAM WDT)

  • Контролює обробники переривань.
  • Якщо ISR зависає, WDT примусово перезавантажує ESP32.
  • Використовується для виявлення проблем у перериваннях.

RTC Watchdog

  • Працює навіть у режимі deep sleep.
  • Відслідковує нестабільне живлення.
  • Може перезапустити систему після збою.

Порівняльна таблиця

Тип WDT Що контролює Коли застосовувати
Task Watchdog Задачі FreeRTOS Моніторинг циклів, сенсорних задач
Interrupt Watchdog Обробники переривань Виявлення зависань ISR
RTC Watchdog Deep Sleep, живлення Автономні пристрої з енергозбереженням

Архітектура Watchdog у ESP32

WDT інтегрований у ядро FreeRTOS, взаємодіє з ESP-IDF та Arduino Core. Використовує апаратні регістри і таймери всередині чипа.

Налаштування Task Watchdog

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

#include <esp_task_wdt.h>

Ініціалізація

esp_task_wdt_init(5, true); // Таймаут 5 секунд
esp_task_wdt_add(NULL);     // Додаємо головну задачу

Скидання таймера

esp_task_wdt_reset(); // Викликається у loop()

Видалення задачі

esp_task_wdt_delete(NULL);

Приклад коду для моніторингу задач

#include <esp_task_wdt.h>

void setup() {
  Serial.begin(115200);
  esp_task_wdt_init(3, true);
  esp_task_wdt_add(NULL);
}

void loop() {
  Serial.println("Робота...");
  delay(1000);
  esp_task_wdt_reset();
}

Використання RTC Watchdog

esp_sleep_enable_wakeup_timer(10 * 1000000); // Пробудження через 10 секунд
esp_deep_sleep_start();

Це гарантує, що пристрій завжди прокинеться, навіть якщо програма зависне.

Приклад: «Розумний датчик»

  • ESP32 читає сенсор.
  • Записує дані.
  • Лягає у deep sleep.
  • Завдяки RTC WDT завжди відновлює роботу.

Відладка і логування WDT

  • Використовуйте Serial.print() та ESP_ERROR_CHECK().
  • Типові повідомлення:
    Task watchdog got triggered.
  • Постійні перезапуски можуть вказувати на нестабільне живлення.

Типові помилки

  • ❌ Забули викликати esp_task_wdt_reset().
  • ❌ Занадто короткий таймаут.
  • ❌ Використання delay() замість vTaskDelay().
  • ❌ Ігнорування ISR-зависань.

Висновок

Watchdog — це не «костиль», а обов’язковий механізм захисту для будь-яких IoT-рішень на ESP32. Його правильне використання підвищує надійність пристроїв і запобігає зависанням.

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

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

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
LCD Keypad шилд розширення для Arduino

LCD Keypad шилд розширення для Arduino

Шилд розширення для Arduino з LCD-дисплеєм LCD1602 та набором кнопок. Підходить для плат контро..

162.43грн.

Аналогові входи ESP32: особливості, приклади та рекомендації

Аналогові входи ESP32: особливості, приклади та рекомендації

Аналогові входи ESP32: особливості, приклади та рекомендації Особливості АЦП ESP32 Кількість к..

Припой з флюсом 1,0мм 10г

Припой з флюсом 1,0мм 10г

Припой олов'янно-свинцевий ПОС-60 (Ø1мм, 10г) в колбі з безвідмивочним флюсом призначений для з'єдна..

97.25грн.

Змінний резистор багатообертовий

Змінний резистор багатообертовий

Потенціометр для надточного налаштування опору.Потужність 2 ВтКут обертання 3600°Розміри вказані на ..

73.09грн.

Кінцевий вимикач або кінцевик

Кінцевий вимикач або кінцевик

Має одну групу перемикаючих контактів. На кінчику ричага встановлений рухомий ролік.Максимальний стр..

23.58грн.