Использование внутреннего Watchdog таймера в ESP32
Watchdog (WDT) — это встроенный таймер микроконтроллера ESP32, который автоматически перезапускает устройство, если программа зависла или перестала выполняться корректно. Эта функция особенно полезна в проектах, работающих без постоянного контроля, например, в IoT-устройствах и системах автоматизации.
1. Теория
- Назначение WDT: предотвращает «зависание» устройства, автоматически его перезапуская.
- Типы WDT в ESP32:
- Task Watchdog — следит за отдельными задачами в FreeRTOS.
- Main System Watchdog — следит за работой всей системы.
- Принцип работы: программа должна периодически «кормить» (сбрасывать) таймер WDT. Если этого не происходит в течение заданного времени — выполняется аппаратный сброс ESP32.
2. Подключение библиотеки
Для работы с WDT в Arduino IDE можно использовать встроенные функции ESP-IDF через Arduino-обёртку:
#include <esp_task_wdt.h>
3. Пример кода
Пример инициализации и использования Task Watchdog с таймаутом 5 секунд:
#include <esp_task_wdt.h>
void setup() {
Serial.begin(115200);
// Инициализация WDT на 5 секунд
esp_task_wdt_init(5, true); // true — перезапуск при срабатывании
esp_task_wdt_add(NULL); // Добавляем текущую задачу (loop) в наблюдение
}
void loop() {
Serial.println("Работаем нормально");
delay(2000); // Задержка меньше 5 секунд — WDT не сработает
// Сброс WDT
esp_task_wdt_reset();
// Если раскомментировать ниже — произойдет перезапуск через 5 секунд
/*
Serial.println("Симулируем зависание...");
while (true) { } // Бесконечный цикл — WDT перезапустит ESP32
*/
}
4. Настройка времени и задач
- Таймаут: задаётся в секундах в функции
esp_task_wdt_init(). - Добавление задач:
esp_task_wdt_add(handle)— можно отслеживать отдельные задачи в FreeRTOS. - Удаление задач:
esp_task_wdt_delete(handle).
5. Применение
- IoT-датчики и контроллеры, работающие в удалённых местах.
- Проекты с долгими циклами и сложной логикой.
- Системы, которые должны автоматически восстанавливаться после ошибок.
6. Важные замечания
- Старайтесь не «кормить» WDT слишком часто — это может скрыть зависания кода.
- Не используйте большие задержки
delay()без сброса WDT. - В многозадачных проектах учитывайте, что WDT может быть настроен для нескольких потоков одновременно.
Вывод: использование внутреннего Watchdog таймера ESP32 — это простой и надёжный способ повысить стабильность ваших проектов и защитить их от случайных зависаний.
NodeMcu ESP8266 WIFI контроллер
Плата контроллера с беспроводной передачей данных NodeMcu. Имеет на борту модуль WIFI ESP8266&n..
238.78грн.
Arduino Nano + расширитель пинов + управление двигателем актуатора
Пример реверсивного управления двигателем актуатора при помощи драйвера L298N и расширителя вхо..
Датчик уровня дискретный горизонтальный
Дискретный датчик, срабатывающий при достижении жидкостью определенного уровня и выше его. В сработа..
105.67грн.
Ёмкостный датчик влажности почвы аналоговый
Ёмкостный датчик влажности почвы V1.2 — надёжный и точный инструмент для измерения уровня влажности ..
55.36грн.
Винт М3х14мм оцинкованный
Винт оцинкованный с резьбой М3 для крепления элементов любительских проектовДлина резьбы 14 мм..
0.59грн.





