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. Його правильне використання підвищує надійність пристроїв і запобігає зависанням.
LCD Keypad шилд розширення для Arduino
Шилд розширення для Arduino з LCD-дисплеєм LCD1602 та набором кнопок. Підходить для плат контро..
162.43грн.
Аналогові входи ESP32: особливості, приклади та рекомендації
Аналогові входи ESP32: особливості, приклади та рекомендації Особливості АЦП ESP32 Кількість к..
Припой з флюсом 1,0мм 10г
Припой олов'янно-свинцевий ПОС-60 (Ø1мм, 10г) в колбі з безвідмивочним флюсом призначений для з'єдна..
97.25грн.
Змінний резистор багатообертовий
Потенціометр для надточного налаштування опору.Потужність 2 ВтКут обертання 3600°Розміри вказані на ..
73.09грн.
Кінцевий вимикач або кінцевик
Має одну групу перемикаючих контактів. На кінчику ричага встановлений рухомий ролік.Максимальний стр..
23.58грн.





