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.
Циклы 4 — Цикл do...while
Циклы 4 — Цикл do...while Введение Цикл do...while — это разновидность цикла while, но с..
Датчик вращения енкодер KY-040
Енкодер вращения KY-040 - это поворотный датчик, который индицирует степень поворота оси и в каком н..
37.93грн.
Отправка данных в Google Sheets по таймеру (ESP32 раз в 5 минут пишет данные)
ESP32 → Google Sheets: отправка данных в таблицу раз в 5 минут В этом примере ESP32 автоматичес..
Кодовый замок из набора резисторов
Используя несколько сдвоенных компараторов можно сделать кодовый замок, ключ для которого будет сост..
Усилитель PAM8610 10x2Вт с регулировкой громкости и разъемами
Стерео усилитель звуковой частоты класса D с переменным резистором регулирования громкости, разъемам..
131.91грн.







