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 Nano
В этом проекте займемся чистой автоматикой. В данном случае озонатор будет очищать питьевую воду от ..
Arduino подключение двигателя постоянного тока и управление им.
Arduino и использование двигателей. Подключение двигателя постоянного тока и управление им.1. Управл..
Драйвер A4988. Как использовать ENABLE, SLEEP и RESET
Привет, друзья! Давайте обсудим такой важный вопрос при работе с драйвером A4988, как пины разрешени..
Orange PI автозапуск браузера на весь экран при включении
Вступительное слово Основная идея проекта - отображение содержимого нашего сайта на экране телевизо..







