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 размітка не підтримується! Використовуйте звичайтий текст.
    Погано           Добре
Датчик напруги мережі 220В

Датчик напруги мережі 220В

Гальванічно ізольований датчик наявності напруги мережі 220ВНапруга живлення логіки 3 ... 5 ВРозмір ..

106.67грн.

Датчик дотику ємнісний

Датчик дотику ємнісний

Датчик видає дискретний сигнал на виході, коли до нього доторкаються пальцем.Його можна використовув..

28.76грн.

Таймери Arduino UNO — Частина 2. Робота з перериваннями таймерів

Таймери Arduino UNO — Частина 2. Робота з перериваннями таймерів

Таймери Arduino UNO — Частина 2. Робота з перериваннями таймерів Теорія Що таке перери..

Гвинт М3х30мм оцинкований

Гвинт М3х30мм оцинкований

Гвинт оцинкований з різьбою М3 для кріплення елементів любительських проектівДовжина різьби 30 мм..

2.17грн.

Модуль гальванорозв'язки 4-канальний

Модуль гальванорозв'язки 4-канальний

Модуль захисту та гальванічної розв'язки 4-х дискретних входів контролера з гвинтовими клемниками. ..

114.76грн.

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

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

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

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

0.00грн.

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

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

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

0.00грн.