Використання внутрішнього Watchdog таймера в ESP32
Watchdog (WDT) — це вбудований таймер мікроконтролера ESP32, який автоматично перезапускає пристрій, якщо програма зависла або перестала виконуватися коректно. Ця функція особливо корисна у проєктах, що працюють без постійного контролю, наприклад, у IoT-пристроях та системах автоматизації.
1. Теорія
- Призначення WDT: запобігає «зависанню» пристрою, автоматично його перезапускаючи.
- Типи WDT у ESP32:
- Task Watchdog — слідкує за окремими завданнями у FreeRTOS.
- Main System Watchdog — контролює роботу всієї системи.
- Принцип роботи: програма повинна періодично «годувати» (скидати) таймер WDT. Якщо цього не відбувається протягом заданого часу — виконується апаратне перезавантаження ESP32.
2. Підключення бібліотеки
Для роботи з WDT в Arduino IDE можна використовувати вбудовані функції ESP-IDF через Arduino-обгортку:
#include <esp_task_wdt.h>
3. Приклад коду
Приклад ініціалізації та використання Task Watchdog з таймаутом 5 секунд:
#include <esp_task_wdt.h>
void setup() {
Serial.begin(115200);
// Ініціалізація WDT на 5 секунд
esp_task_wdt_init(5, true); // true — перезапуск при спрацюванні
esp_task_wdt_add(NULL); // Додаємо поточне завдання (loop) у спостереження
}
void loop() {
Serial.println("Працюємо нормально");
delay(2000); // Затримка менше 5 секунд — WDT не спрацює
// Скидання WDT
esp_task_wdt_reset();
// Якщо розкоментувати нижче — відбудеться перезапуск через 5 секунд
/*
Serial.println("Симулюємо зависання...");
while (true) { } // Нескінченний цикл — WDT перезапустить ESP32
*/
}
4. Налаштування часу та завдань
- Таймаут: задається у секундах у функції
esp_task_wdt_init(). - Додавання завдань:
esp_task_wdt_add(handle)— можна відстежувати окремі задачі у FreeRTOS. - Видалення завдань:
esp_task_wdt_delete(handle).
5. Застосування
- IoT-датчики та контролери, що працюють у віддалених місцях.
- Проєкти з довгими циклами та складною логікою.
- Системи, які мають автоматично відновлюватися після збоїв.
6. Важливі зауваження
- Не «годуйте» WDT занадто часто — це може приховати зависання коду.
- Не використовуйте великі затримки
delay()без скидання WDT. - У багатозадачних проєктах враховуйте, що WDT може бути налаштований для кількох потоків одночасно.
Висновок: використання внутрішнього Watchdog таймера ESP32 — це простий і надійний спосіб підвищити стабільність ваших проєктів та захистити їх від випадкових зависань.
Ультразвуковий датчик відстані HC-SR04 для Arduino, ESP32, STM32
HC-SR04 — популярний ультразвуковий сенсор для точного вимірювання відстані в діапазоні від 2 до 450..
62.06грн.
ESP32 LED PWM: частоти та роздільна здатність ШІМ (LEDC)
ESP32 LED PWM Controller: керування яскравістю світлодіодів ESP32 має вбудований модуль LED PWM C..
Роз'ємний штекер мама-папа 2,54мм на 2, 3, 4, 5 пінів
Пластмасовий корпус для роз'єму 2,54мм без струмопровідної вставки..
1.01грн.
Радіатор для транзистора 21х15х10мм
Радіатор алюмінієвий для пасивного охолодження різноманітних напівпровідникових силових компонентів:..
13.58грн.
Символьний LCD індикатор 16х2 синій
Символьний двохрядний рідкокристалічний індикатор. 16 символів в одному рядку.Синя підсвіткаЗ'єднува..
83.25грн.





