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.
NodeMcu WIFI контролер
Плата контролера з безпровідною передачею даних. Має на борту модуль WIFI ESP8266 з антеною.Фле..
238.78грн.
Трансформатор струму 0-30А
Аналоговий датчик змінного струму силою до 30А. Це роз'ємний трансформатор струму з діаметром отвору..
261.79грн.
ATtiny обзор контролерів
Обозначение Память программ (FLASH) [Kбайт] Память данных [байт] Kол-во линий ввода/..
LCD Keypad шилд розширення для Arduino
Шилд розширення для Arduino з LCD-дисплеєм LCD1602 та набором кнопок. Підходить для плат контро..
162.43грн.
Датчик вібрації SW-420
Датчик вібрації SW-420Датчик вібрації SW-420 призначений для виявлення вібрацій та ударів. Ідеально ..
27.93грн.







