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.
Arduino 4-20 мА подключение датчика уровня
Бывают такие времена в жизни ардуинщика, когда ему приходится из глубин любительских датчиков подыма..
Регулятор оборотов двигателя 3А 6-28В
Регулятор оборотов двигателя постоянного тока. Скорость задается переменным резистором. Принц..
151.10грн.
Твердотельное реле 40А
Реле без механических контактов на 40 А. Силовым элементом данного реле является симистор.Гальваниче..
304.49грн.
Контроль исполнения программы Arduino
Контроль исполнения программы ArduinoДанная статья посвящена описанию структур, используемых для упр..
Конденсатор электролитический алюминиевый
Используется для сглаживания пульсаций в источниках питания, в генераторах сигналов, в частотных фил..
3.10грн.







