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.

<< Проекти << Усі товари >> Статті, уроки >>

Написати відгук

Примітка: HTML размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
NodeMcu WIFI контролер

NodeMcu WIFI контролер

Плата контролера з безпровідною передачею даних. Має на борту модуль WIFI ESP8266 з антеною.Фле..

238.78грн.

Трансформатор струму 0-30А

Трансформатор струму 0-30А

Аналоговий датчик змінного струму силою до 30А. Це роз'ємний трансформатор струму з діаметром отвору..

261.79грн.

ATtiny обзор контролерів

ATtiny обзор контролерів

Обозначение Память программ (FLASH) [Kбайт] Память данных [байт] Kол-во линий ввода/..

LCD Keypad шилд розширення для Arduino

LCD Keypad шилд розширення для Arduino

Шилд розширення для Arduino з LCD-дисплеєм LCD1602 та набором кнопок. Підходить для плат контро..

162.43грн.

Датчик вібрації SW-420

Датчик вібрації SW-420

Датчик вібрації SW-420Датчик вібрації SW-420 призначений для виявлення вібрацій та ударів. Ідеально ..

27.93грн.

Рекомендовані товари

Вимірювання часу та точні затримки на ESP32

Вимірювання часу та точні затримки на ESP32

Вимірювання часу та точні затримки на ESP32 ESP32 має потужну систему апаратних таймерів, які доз..

0.00грн.

ESP32 Timer Groups: архітектура та використання

ESP32 Timer Groups: архітектура та використання

ESP32 Timer Groups: архітектура та використання Мікроконтролер ESP32 має потужну систему апаратни..

0.00грн.