Приветствую гуру форума. Нарисовалась проблемка на одном из объектов. Использую WiFi реле на основе ESP32. Такие реле у меня стоят минимум на более 200 обьектах. Начинал ставить довольно на большой территории в разных городах года 3 назад. Все работают без сбоев и каких то проблем круглыми сутками. Коммутируют активную нагрузку (лампочки 60 ватт). И вот неожиданно для меня попался обьект, на котором контроллер время от времени зависает, не известно в каком состоянии. Помогает только передёргивание питанием, или EN на корпус. Пробовал менять на другие такие же реле, не помогает, менять с обьекта, на котором релюха работает без сбоев, на этом обьекте уходит в даун. Особенность установки данного обьекта в том, что это дачный посёлок. и в нем частенько кто то использует сварку, включает какието мощные нагреватели. Вообщем сеть похоже грязновата. Пока не хочу лезть в изменения железки (ведь везде то работает) , хочу попрововать вачдоком попытаться решить вопрос. Пока не было опыта внедрения вачдока в ESP32 (на атмеге делал, но там вообщем то было просто, вовремя обнуляй и всё). Почитал про ESP32, как то всё очень мудрёно выглядит эта собака. Вот и прошу сообщество поделиться кусочком кода, кому не жалко сторожевой собакой. Чесно, мне не верится что поможет, а вдруг. Или может у кого есть опыт, и была точно такая же ситация, побороли или нет? Спасибо.
отсюда не подойдёт? код особо не смотрел, как там реализовано
Что прямо действительно так просто?
#include <esp_task_wdt.h>
#define WDT_TIMEOUT 60
void setup() {
esp_task_wdt_init(WDT_TIMEOUT, true); // Init Watchdog timer
}
void loop() {
esp_task_wdt_reset(); // Reset watchdog timer
}
по крайней мере компилируется. Попробую. вдруг сработает. Спасибо. Но жду ещё предложений, или этапов борьбы с похожей поблемой.
У меня не сработало. Вернее в тепличных условиях стола работает. На даче следит за температурой и включает обогреватель. Вот там иногда зависает и никакой вачдог не возвращает в нормальный режим. Найдёте решение будет отлично.
насколько я помню, на ЕСП32 ватчдог работает всегда, его отдельно запускать не надо.
Нет не работает всегда. Может когда loop () выполняется он и срабатывает, но у меня луп точно не крутится (диодик не моргает )
Залил обновленную прошивку на обьект. Посмотрим сработает или нет отпишусь. Там каждые пару тройку дней приходится механически перегружать релюху.
К сожалению не помогла собака. Процессор в очередной раз завис в неизвестном состоянии. При нормальной работе, он сосдаёт всегда собственную точку доступа, подключившись к которой можно через браузер настроить все функции реле, а так же подключен к роутеру и имеет на борту интернет, через котоый можно управлять релюхой дистанционно. Так вот всё это пропадает, как будто, ESP32 переходит в режим сна. Пока не знаю куда копать. Может какой нибудь есть в нём таймер, который перезагрузит его из любого состояния?
Вот в этом примере присутствует еще один параметр в инициализации.
esp_task_wdt_add(NULL); //add current thread to WDT watch
У меня не получилось. Боюсь что только внешний.
Добрый день.
Решили проблему?
У меня так-же бывают зависы, но , насколько понял это происходит при критическом провисании питания до остановки работы процессора и возврата питания. Особенно хорошо это демонстрирует фонарь на одной литиевой батарейке в 4.2 вольт, к которой напрямую посащен dev модуль esp32wroom. При разряде батареи до какого-то уровня esp всегда зависает намертво и возврат питания не помогает, только переподключение.
Приобрел TLC7733 который следит за питанием. Вообще в критичных случаях думаю сделать аппаратный вотч, который будет перезапускаться с GPIO и невовремя выполненный сброс таймера будет приводит к физической перезагруке esp.
ESP32 CAM и ничего не виснет больше месяца, с 2х камер.
Много лет назад у нас на работе после очередного (планового) обновления сервера 1С он стал «жрать память как не в себя». Я, честно говоря, не знаю / не помню выяснили ли по какой причине это было, но решение этой проблемы было достаточно простым. В 23:50 запускалось резервное копирование базы данных 1С, а за 10 минут до него просто перезапускался сам 1С-сервер (не физическое устройство, а служба). Проблем больше не было.
Я это в чему… может проще купить дешевый RTC и по сигналу его «будильника» перезапускать плату раз в сутки/в неделю/месяц?)
так код тогда в проекты надо!!!
Где то была моя же тема про зависание ESP32 при управлении индуктивной нагрузки. Если управлять непосредственно с пинов ESP, то она вешается. Данная тема, это я хотел решить проблему через собаку, но она не спасла, ESP32 по прежнему вешалась при выключении нагрузки. Снайбер частично спасал ситуацию, но всё равно изредка релюха вешалась. Решение всё же нашлось. Уже полгода полёт нормальный, забыл дорогу на обьект, всё работает, коммутирует
5 амперные моторы.
Ну эдак и у меня бОльшая часть, не 200 конечно, вообще никогда не наблюдалось зависов, наверно и по году есть которые не выключались.
Но есть критичные проекты где хотелось бы повышенной гарантии работоспособности.
Провел эксперимент с плавной усадкой батареи на esp32wroom32D
обвисает при просадке ближе к 2.8 вольт и потом не восстанавливается и с использованием встроенного wdt последней версии с разными нстройками. при рабочем loop оно конечно работает, но ситуацию не спасает с плавным провисанием питания не до полного отключения.
Там нет Brown-out Detection (BOD) настроек? В Пиках они за такое отвечают. Сброс при опред. напряжении
говорят что есть и активирован по умолчанию, как минимум для защиты данных памяти.
И, что интересно, при сегодняшнем эксперименте с плавным разрядом у меня слетела прошивка.
неудивительно! и из флэшей всю энергию высосал )))
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
штоп выключить.
какой .h файл - не помню, думаю, найдете
Для защиты памяти, в том смысле, что при низком напряжении может что попало на флеш записаться.