Использование внутреннего 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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Припой с флюсом 1,0мм 10г

Припой с флюсом 1,0мм 10г

Припой оловянно-свинцовый ПОС-60 (Ø1мм, 10г) в колбе предназначен для соединения деталей с помощью п..

97.25грн.

Модуль часов реального времени DS1302

Модуль часов реального времени DS1302

Модуль часов реального времени на основе микросхемы DS1302 предназначен для работы с любительскими..

50.25грн.

LM317 линейный регулятор напряжения

LM317 линейный регулятор напряжения

Популярная микросхема - регулируемый регулятор напряженияВыходное напряжение 1,25 ... 37 ВВыходной т..

14.47грн.

Трансформатор тока 0-100А

Трансформатор тока 0-100А

Аналоговый датчик переменного тока силой до 100А. Это раскрывающийся трансформатор тока с диаметром ..

268.69грн.

Задатчик тока 4 20мА. Схема простого в изготовлении токового задатчика

Задатчик тока 4 20мА. Схема простого в изготовлении токового задатчика

Прибор позволяет получать на выходе 0...20 мА, 4...20 мА. Области применения представленного устр..