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. Його правильне використання підвищує надійність пристроїв і запобігає зависанням.
Роз'ємний штекер мама-папа 2,54мм на 2, 3, 4, 5 пінів
Пластмасовий корпус для роз'єму 2,54мм без струмопровідної вставки..
1.01грн.
Шестерня для зубчатого ременю на 40 зубців під вісь 8 мм
Використовується для передачі та редукції обертаючого моменту від двигуна до вісі 8 ммКількість зубц..
87.33грн.
Цифровий датчик температури та вологості DHT11 з підтягуючим резистором
Вимірювання відносної вологості в межах 20 ... 90 %Точність вимірювання вологості ± 5,0 %RHВимірюван..
74.11грн.
Шестерня для зубчатого ременю на 40 зубців під вісь 5 мм
Використовується для передачі та редукції обертаючого моменту від двигуна до вісі 5 ммКількість зубц..
79.68грн.
Насос погружний 3 ... 6В 120л/год
Насос рідинний погружного типу.Використовується для поливу домашніх рослин, для мініатюрних фонтанів..
69.82грн.





