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

Микрофон ёмкостный электретный 6х5мм

Миниатюрный монофонический микрофон с двумя ножкамиДиаметр 6 ммДлина 5 ммТип электретныйЧувствительн..

7.60грн.

Джойстик шилд для Arduino UNO MEGA

Джойстик шилд для Arduino UNO MEGA

Шилд джойстика для контроллеров Arduino ua UNO и MEGAМожно использовать для самодельных игр, а так ж..

176.49грн.

Инфракрасный датчик движения HC-SR505

Инфракрасный датчик движения HC-SR505

Миниатюрный экономичный датчик движения.Напряжение питания 4,5 ... 20 ВТок покоя < 60 мкАВыходные..

76.78грн.

AT24C02 EEPROM I2C

AT24C02 EEPROM I2C

Микросхема постоянной памяти EEPROMНапряжение питания 2,7 ... 5,5 ВОбъем 256 БайтКомуникация I2..

4.54грн.

Держатель 8мм линейных направляющих CNC или 3d принтера 2шт.

Держатель 8мм линейных направляющих CNC или 3d принтера 2шт.

Держатель для крепления цилиндрических направляющих каретки CNC-станка или 3d-принтераПод диаметр на..

108.96грн.