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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
ESP32: незалежне керування двома кроковими двигунами NEMA17

ESP32: незалежне керування двома кроковими двигунами NEMA17

ESP32: незалежне керування двома кроковими двигунами NEMA17 Коротко: нижче — два готових варіанти: (..

Arduino SIM800 управління реле за вихідним дзвінком

Arduino SIM800 управління реле за вихідним дзвінком

Пропоную вашій увазі приклад простого застосування можливостей SIM800 під час вихідного дзвінка. В р..

Збільшуючий перетворювач напруги 0,9...5В у 5В

Збільшуючий перетворювач напруги 0,9...5В у 5В

Мініатюрний перетворювач напруги до 5ВВхідна напруга постійного струму 0,9 ... 5 ВНа виході USB-порт..

33.08грн.

Налаштування струму драйвера A4988

Налаштування струму драйвера A4988

Мікросхеми - драйвера крокових двигунів такі, як A4988, відрізняються від звичайних H-мостів, або по..

Створення простого таймера на ESP32: приклад періодичного виклику функції

Створення простого таймера на ESP32: приклад періодичного виклику функції

Створення простого таймера на ESP32: приклад періодичного виклику функції Під час розробки проєкт..