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 разметка не поддерживается! Используйте обычный текст.
    Плохо           Хорошо
Автоматическое управление озонатором воды на Arduino Nano

Автоматическое управление озонатором воды на Arduino Nano

В этом проекте займемся чистой автоматикой. В данном случае озонатор будет очищать питьевую воду от ..

Arduino подключение двигателя постоянного тока и управление им.

Arduino подключение двигателя постоянного тока и управление им.

Arduino и использование двигателей. Подключение двигателя постоянного тока и управление им.1. Управл..

Драйвер A4988. Как использовать ENABLE, SLEEP и RESET

Драйвер A4988. Как использовать ENABLE, SLEEP и RESET

Привет, друзья! Давайте обсудим такой важный вопрос при работе с драйвером A4988, как пины разрешени..

Светодиод 5мм

Светодиод 5мм

Светодиод диаметром 5мм. LED Максимальный ток 20 мА ..

1.98грн.

Orange PI автозапуск браузера на весь экран при включении

Orange PI автозапуск браузера на весь экран при включении

Вступительное слово Основная идея проекта - отображение содержимого нашего сайта на экране телевизо..

Рекомендуемые товары

Измерение времени и точные задержки на ESP32

Измерение времени и точные задержки на ESP32

Измерение времени и точные задержки на ESP32 ESP32 обладает мощной системой аппаратных таймеров, ..

0.00грн.

ESP32 Timer Groups: архитектура и использование

ESP32 Timer Groups: архитектура и использование

ESP32 Timer Groups: архитектура и использование Микроконтроллер ESP32 имеет мощную систему аппара..

0.00грн.