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

Arduino SIM800 тест схеми підключення

Привіт друзі! Arduino SIM800 тест схеми підключення. З цього блогу розпочнемо нову рубрику. За остан..

Що таке Arduino та які його основні переваги й компоненти?

Що таке Arduino та які його основні переваги й компоненти?

Що таке Arduino та які його основні переваги й компоненти? Arduino — це популярна платформа..

Модуль Bluetooth SPP-C

Модуль Bluetooth SPP-C

Протокол зв'язку : Bluetooth специфікація v2.1+EDRРадіус дії : до 10 метрів (рівень потужності 2)Нап..

112.48грн.

Модуль термопари К-типу MAX6675 0...+1024 °C для Arduino

Модуль термопари К-типу MAX6675 0...+1024 °C для Arduino

Цей модуль на основі спеціалізованої мікросхеми MAX6675 призначений для точного вимірювання високих ..

168.35грн.

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

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

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