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

Регулятор оборотов двигателя 20А 10-60В

Регулятор скорости вращения двигателя постоянного тока. Обороты задаются переменным резистором. ..

272.90грн.

Таймеры и FreeRTOS на ESP32

Таймеры и FreeRTOS на ESP32

Таймеры и FreeRTOS на ESP32 ESP32 работает под управлением FreeRTOS, и в дополнение к аппаратным ..

Циклы 6 — Прерывание циклов

Циклы 6 — Прерывание циклов

Циклы 6 — Прерывание циклов Введение При работе с циклами в Arduino бывают ситуации, ког..

Джойстик двухосевой

Джойстик двухосевой

Двухосевой джойстик с кнопкой — это удобный модуль управления для проектов на Arduino, ESP32 и други..

44.72грн.

Модуль реле одноканальный 5В 10А

Модуль реле одноканальный 5В 10А

Одноканальный модуль реле для подключения напрямую к дискретному выходу контроллера. Светодиодная ин..

43.11грн.

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

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

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

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

0.00грн.

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

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

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

0.00грн.