Closed VolodyaVolodya closed 1 month ago
И Вам здравствуйте. Если не затруднит, хотелось бы поподробнее описание проблемы, мне легче искать было бы. Благодарю.
Здравствуйте. Таймер отлично работает, когда подключен к интернету. Если пропадает связь начинаются проблемы. Через час после исчезновения сети, устройство перезагружается(я так думаю, это мое мнение) и каждые десять минут включает и отключает канал. Если устройство включить в ручную, канал работает и без сети. Настраивал два задания вкл и выкл и один канал. Проблему можно увидеть если отключить сеть на час и более.
Спасибо большое, теперь гораздо проще искать, буду разбираться.
Итак, освежил в памяти код:
"Через час после исчезновения сети, устройство перезагружается(я так думаю, это мое мнение)..." Явных причин для этого в коде я не вижу, буду на "железе" экспериментировать. Возможно Watchdog где-то в библиотечной функции обращения к NTP-серверу срабатывает, не знаю.
"...и каждые десять минут включает и отключает канал." После старта/рестарта устройство в течение десяти минут пытается подключиться к сети с SSID, прописанным в EEPROM. При неуспехе устройство перезагружается в режиме точки доступа и в течение десяти минут ожидает подключения к себе. Затем устройство перезагружается назад в режим станции опять десять минут пытается подключиться к сети с SSID, прописанным в EEPROM, опять перезагружается в режиме точки доступа, далее по кругу. "Дёрганье" канала в момент старта/рестарта, связано с тем, что в setup() вызов функции установки состояний каналов (строка 3636 read_channellist_from_EEPROM_and_switch_channels()) делается не сразу и только в режиме станции.
Впрочем, всё это излишние подробности, Ваша проблема в том, что прошивка изначально писалась для устройств:
Поэтому, если Вам нужен таймер, стабильно работающий при нестабильном Wi-Fi (Интернете), то наилучший вариант - подключить к ESP модуль RTC и брать время/дату с него. Ваш уровень в С++ мне, естественно, неизвестен, поэтому совет риторический.
С пунктом 1. я поработаю, самому интересно.
Ваш проект мне понравился, мое почтение. Да, я, подумывал прикрутить часы реального времени, если бы написали комментарии на русском языке основной программы и цикла, я бы смог, опыт программирования на си есть. Чужой код сложноват для разбора. С комментариями бы разобрался. Если комментарии возможны это было бы чудесно. Вы и так проделали много работы., просить об этом мне неловко.
Да нет, переводить комментарии на русский - вряд ли. Загоните текст скетча в онлайн-переводчик, откройте в отдельном окне, да поглядывайте в непонятных местах исходника, всего то. Я так иногда с китайскими кодами разбираюсь, временами бывает даже весело читать )).
Жаль, что проблема не решена. Проблема явно в обработке заданий, потому что если включить "вручную", перезагрузка не происходит. Возможно проблема в переполнения ОЗУ (это мое мнение). В описании устройства вы пишите - временное пропадание WiFi/Internet на работу не влияет. Хотелось бы чтоб это соответствовало. Предлагаю свою помощь в качестве тестера.
Прошу прощения за долгую паузу - на работе горячий период (ещё не закончился), возможностей поєкспериментировать нет.
Сразу вопрос - видите ли Вы в логах "Перезагрузка программным сторожевым таймером/Restart after software watch dog reset" после того, как "Через час после исчезновения сети, устройство перезагружается(я так думаю, это мое мнение)..." ?
Дальше попробуем помощь в качестве тестера, отработаем версию с NTP :
NTP_POLLING_INTERVAL - да этот интервал влияет на перезагрузку. Установил 10 минут и начал экспериментировать.
строчка if ( !statusWiFi ) { return; } - исправляет ситуацию, устройство не перезагружается за заданный интервал опроса NTP. Но как только девайс подключается к сети, сразу идет перезагрузка с такими же логами, см.выше.
Надеюсь что понятно объяснил, готов дальше к сотрудничеству.
"_NTP_POLLINGINTERVAL - да этот интервал влияет на перезагрузку. " - отлично, мы на верном пути. "строчка if ( !statusWiFi ) { return; } - исправляет ситуацию" - то есть, когда нет коннекта с Wi-Fi мы за временем не ходим. "Но как только девайс подключается к сети, сразу идет перезагрузка с такими же логами" - напоминает ситуацию, когда Wi-Fi уже есть, а Интернета в нём ещё нет. И в момент попытки связаться с недоступным NTP-сервером срабатывает watchdog. ОК, пока что общие рассуждения, позже посмотрю подробнее код. Благодарю Вас, информация полная и качественная ))
в логике таймера нашел проблему . при отключения сети, работает не корректно