Использование внутреннего Watchdog таймера в ESP32

Watchdog (WDT) — это встроенный таймер микроконтроллера ESP32, который автоматически перезапускает устройство, если программа зависла или перестала выполняться корректно. Эта функция особенно полезна в проектах, работающих без постоянного контроля, например, в IoT-устройствах и системах автоматизации.

1. Теория

  • Назначение WDT: предотвращает «зависание» устройства, автоматически его перезапуская.
  • Типы WDT в ESP32:
    • Task Watchdog — следит за отдельными задачами в FreeRTOS.
    • Main System Watchdog — следит за работой всей системы.
  • Принцип работы: программа должна периодически «кормить» (сбрасывать) таймер WDT. Если этого не происходит в течение заданного времени — выполняется аппаратный сброс ESP32.

2. Подключение библиотеки

Для работы с WDT в Arduino IDE можно использовать встроенные функции ESP-IDF через Arduino-обёртку:

#include <esp_task_wdt.h>

3. Пример кода

Пример инициализации и использования Task Watchdog с таймаутом 5 секунд:

#include <esp_task_wdt.h>

void setup() {
  Serial.begin(115200);
  // Инициализация WDT на 5 секунд
  esp_task_wdt_init(5, true); // true — перезапуск при срабатывании
  esp_task_wdt_add(NULL); // Добавляем текущую задачу (loop) в наблюдение
}

void loop() {
  Serial.println("Работаем нормально");
  delay(2000); // Задержка меньше 5 секунд — WDT не сработает

  // Сброс WDT
  esp_task_wdt_reset();

  // Если раскомментировать ниже — произойдет перезапуск через 5 секунд
  /*
  Serial.println("Симулируем зависание...");
  while (true) { } // Бесконечный цикл — WDT перезапустит ESP32
  */
}

4. Настройка времени и задач

  • Таймаут: задаётся в секундах в функции esp_task_wdt_init().
  • Добавление задач: esp_task_wdt_add(handle) — можно отслеживать отдельные задачи в FreeRTOS.
  • Удаление задач: esp_task_wdt_delete(handle).

5. Применение

  • IoT-датчики и контроллеры, работающие в удалённых местах.
  • Проекты с долгими циклами и сложной логикой.
  • Системы, которые должны автоматически восстанавливаться после ошибок.

6. Важные замечания

  • Старайтесь не «кормить» WDT слишком часто — это может скрыть зависания кода.
  • Не используйте большие задержки delay() без сброса WDT.
  • В многозадачных проектах учитывайте, что WDT может быть настроен для нескольких потоков одновременно.

Вывод: использование внутреннего Watchdog таймера ESP32 — это простой и надёжный способ повысить стабильность ваших проектов и защитить их от случайных зависаний.

<< Проекты << Все товары >> Статьи, уроки >>

Написать отзыв

Примечание: HTML разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
NodeMcu ESP8266 WIFI контроллер

NodeMcu ESP8266 WIFI контроллер

Плата контроллера с беспроводной передачей данных NodeMcu. Имеет на борту модуль WIFI ESP8266&n..

238.78грн.

Arduino Nano + расширитель пинов + управление двигателем актуатора

Arduino Nano + расширитель пинов + управление двигателем актуатора

Пример реверсивного управления двигателем актуатора при помощи драйвера L298N и расширителя вхо..

Датчик уровня дискретный горизонтальный

Датчик уровня дискретный горизонтальный

Дискретный датчик, срабатывающий при достижении жидкостью определенного уровня и выше его. В сработа..

105.67грн.

Ёмкостный датчик влажности почвы аналоговый

Ёмкостный датчик влажности почвы аналоговый

Ёмкостный датчик влажности почвы V1.2 — надёжный и точный инструмент для измерения уровня влажности ..

55.36грн.

Винт М3х14мм оцинкованный

Винт М3х14мм оцинкованный

Винт оцинкованный с резьбой М3 для крепления элементов любительских проектовДлина резьбы 14 мм..

0.59грн.