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. Його правильне використання підвищує надійність пристроїв і запобігає зависанням.
ESP32: незалежне керування двома кроковими двигунами NEMA17
ESP32: незалежне керування двома кроковими двигунами NEMA17 Коротко: нижче — два готових варіанти: (..
Arduino SIM800 управління реле за вихідним дзвінком
Пропоную вашій увазі приклад простого застосування можливостей SIM800 під час вихідного дзвінка. В р..
Збільшуючий перетворювач напруги 0,9...5В у 5В
Мініатюрний перетворювач напруги до 5ВВхідна напруга постійного струму 0,9 ... 5 ВНа виході USB-порт..
33.08грн.
Налаштування струму драйвера A4988
Мікросхеми - драйвера крокових двигунів такі, як A4988, відрізняються від звичайних H-мостів, або по..
Створення простого таймера на ESP32: приклад періодичного виклику функції
Створення простого таймера на ESP32: приклад періодичного виклику функції Під час розробки проєкт..





