Watchdog і таймери ESP32
ESP32 має вбудований Watchdog Timer (WDT), який використовується для захисту програми від зависань. Він працює у зв’язці з системними таймерами та дозволяє автоматично перезапускати контролер, якщо код перестав виконуватися коректно. Це особливо важливо у проєктах «Інтернет речей» та автоматизації, де пристрій повинен працювати надійно без постійного втручання людини.
Як пов’язані таймери та WDT
- WDT (Watchdog Timer) базується на апаратному таймері ESP32.
- Кожен WDT має власний «таймаут» (час очікування).
- Якщо протягом заданого інтервалу програма не «погодує» (reset/refresh) WDT, він перезапустить систему.
- Таким чином WDT використовує таймери для відліку часу бездіяльності програми.
Захист програми від зависань
Програма може зависнути через помилки у коді, нескінченні цикли чи апаратні проблеми. Watchdog стежить, щоб цього не сталося:
- Якщо код працює правильно, у ньому регулярно викликається функція «годування» WDT.
- Якщо код «застряг» і WDT не скинуто вчасно — контролер автоматично перезавантажується.
- Це гарантує, що пристрій не залишиться «мертвим», а повернеться у робочий стан.
Приклад: використання Task Watchdog
#include "esp_task_wdt.h"
void setup() {
Serial.begin(115200);
// Ініціалізація WDT: таймаут 5 секунд
esp_task_wdt_init(5, true);
// Додаємо поточний потік (loop) під контроль
esp_task_wdt_add(NULL);
}
void loop() {
Serial.println("Працюємо нормально...");
delay(1000);
// "Годуємо" watchdog
esp_task_wdt_reset();
// Якщо закоментувати рядок вище — WDT перезапустить контролер через 5 секунд
}
Приклад: захист від зависання у довгому циклі
void loop() {
for (long i = 0; i < 1000000000; i++) {
// довгі обчислення...
if (i % 1000000 == 0) {
// скидання WDT всередині важкого циклу
esp_task_wdt_reset();
}
}
}
Особливості та рекомендації
- WDT існує як для CPU, так і для таймерів FreeRTOS.
- Системний WDT за замовчуванням увімкнено — він перезапускає ESP32 при блокуванні.
- Для критичних задач використовуйте Task Watchdog та «годуйте» його у робочих потоках.
- Не варто вимикати WDT без потреби — це знижує надійність системи.
Висновок
Watchdog в ESP32 — це механізм на основі таймерів, який забезпечує стабільність роботи мікроконтролера. Він автоматично перезапускає пристрій при зависаннях, захищаючи вашу систему від збоїв. Використання WDT особливо актуальне в автономних IoT-пристроях, що працюють 24/7.
Arduino бігаюча доріжка з світлодіодів
Arduino бігаюча доріжка з світлодіодівРобимо бігаючу доріжку з світлодіодів на Arduino. В даному вип..
Трансформатор струму 0-30А
Аналоговий датчик змінного струму силою до 30А. Це роз'ємний трансформатор струму з діаметром отвору..
261.79грн.
Шестерня для зубчатого ременю на 36 зубців під вісь 5 мм
Використовується для передачі та редукції обертаючого моменту від двигуна до вісі 5 ммКількість зубц..
79.68грн.
Драйвер двох колекторних двигунів L298N
Модуль драйвера для керування роботою одного двохполюсного високооммного крокового двигуна або двома..
105.58грн.






