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.
Датчик напруги мережі 220В
Гальванічно ізольований датчик наявності напруги мережі 220ВНапруга живлення логіки 3 ... 5 ВРозмір ..
106.67грн.
Датчик дотику ємнісний
Датчик видає дискретний сигнал на виході, коли до нього доторкаються пальцем.Його можна використовув..
28.76грн.
Таймери Arduino UNO — Частина 2. Робота з перериваннями таймерів
Таймери Arduino UNO — Частина 2. Робота з перериваннями таймерів Теорія Що таке перери..
Гвинт М3х30мм оцинкований
Гвинт оцинкований з різьбою М3 для кріплення елементів любительських проектівДовжина різьби 30 мм..
2.17грн.
Модуль гальванорозв'язки 4-канальний
Модуль захисту та гальванічної розв'язки 4-х дискретних входів контролера з гвинтовими клемниками. ..
114.76грн.







