Использование внутреннего 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 — это простой и надёжный способ повысить стабильность ваших проектов и защитить их от случайных зависаний.
Припой с флюсом 1,0мм 10г
Припой оловянно-свинцовый ПОС-60 (Ø1мм, 10г) в колбе предназначен для соединения деталей с помощью п..
97.25грн.
Модуль часов реального времени DS1302
Модуль часов реального времени на основе микросхемы DS1302 предназначен для работы с любительскими..
50.25грн.
LM317 линейный регулятор напряжения
Популярная микросхема - регулируемый регулятор напряженияВыходное напряжение 1,25 ... 37 ВВыходной т..
14.47грн.
Трансформатор тока 0-100А
Аналоговый датчик переменного тока силой до 100А. Это раскрывающийся трансформатор тока с диаметром ..
268.69грн.
Задатчик тока 4 20мА. Схема простого в изготовлении токового задатчика
Прибор позволяет получать на выходе 0...20 мА, 4...20 мА. Области применения представленного устр..





