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. Його правильне використання підвищує надійність пристроїв і запобігає зависанням.
Arduino SIM800 тест схеми підключення
Привіт друзі! Arduino SIM800 тест схеми підключення. З цього блогу розпочнемо нову рубрику. За остан..
Що таке Arduino та які його основні переваги й компоненти?
Що таке Arduino та які його основні переваги й компоненти? Arduino — це популярна платформа..
Модуль Bluetooth SPP-C
Протокол зв'язку : Bluetooth специфікація v2.1+EDRРадіус дії : до 10 метрів (рівень потужності 2)Нап..
112.48грн.
Модуль термопари К-типу MAX6675 0...+1024 °C для Arduino
Цей модуль на основі спеціалізованої мікросхеми MAX6675 призначений для точного вимірювання високих ..
168.35грн.
Налаштування струму драйвера A4988
Мікросхеми - драйвера крокових двигунів такі, як A4988, відрізняються від звичайних H-мостів, або по..





