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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Роз'ємний штекер мама-папа 2,54мм на 2, 3, 4, 5 пінів

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

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

1.01грн.

Шестерня для зубчатого ременю на 40 зубців під вісь 8 мм

Шестерня для зубчатого ременю на 40 зубців під вісь 8 мм

Використовується для передачі та редукції обертаючого моменту від двигуна до вісі 8 ммКількість зубц..

87.33грн.

Цифровий датчик температури та вологості DHT11 з підтягуючим резистором

Цифровий датчик температури та вологості DHT11 з підтягуючим резистором

Вимірювання відносної вологості в межах 20 ... 90 %Точність вимірювання вологості ± 5,0 %RHВимірюван..

74.11грн.

Шестерня для зубчатого ременю на 40 зубців під вісь 5 мм

Шестерня для зубчатого ременю на 40 зубців під вісь 5 мм

Використовується для передачі та редукції обертаючого моменту від двигуна до вісі 5 ммКількість зубц..

79.68грн.

Насос погружний 3 ... 6В 120л/год

Насос погружний 3 ... 6В 120л/год

Насос рідинний погружного типу.Використовується для поливу домашніх рослин, для мініатюрних фонтанів..

69.82грн.