• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

NodeMCU + Dht11 зависает через час

Выбы за кого проголосовали если бы...?

  • Трам

    Голосов: 6 54.5%
  • Хиллари

    Голосов: 1 9.1%
  • Кто такие выбы?

    Голосов: 4 36.4%

  • Всего проголосовало
    11

nikolz

Well-known member
WiFi не работает этот час. Как вариант, сохранять статус в памяти (в конце концов раз в три минуты это всего 20 значений), а как появится соединение, то отправлять на сервер.

В понедельник буду весь день рядом с установкой, так что сначала буду просто смотреть за работой установки. Насос должен включаться на 5 минут каждый час. Если насос работает и отключается в то время как на сайт лог не отправляется, значит дело в WiFi-е.

p.s.сам "сайт" с логом Аэропоника
В колонке delta_Time разница в секундах между отправляемыми данными. Четко каждые 2 часа интервал на 1 час + некоторое время. Колонка time - время отправления данных.
nasos - работа насоса
light - работа освещения
У меня следующее предположение причины Вашей проблемы.
1) ESP теряет связь с роутером.
2) На роутере есть установка времени на которое выделяется адрес.
После потери связи ESP продолжает посылать сообщения по тому же адресу, но связь разорвана и адрес фактически потерян но занят.
Предположу что роутер выделяет адрес на 1 час. Через час адрес будет освобожден. ESP снова на него соединится и т д.
Что можно сделать:
1) изменить время выделения адреса.
2) В проге ESP где настраиваете WIFI вызвать две функции :
if (wifi_station_get_auto_connect()==0) wifi_station_set_auto_connect(1);
wifi_station_set_reconnect_policy(1);
 

shasoft

New member
У меня следующее предположение причины Вашей проблемы.
Судя по всему вы правы - отваливается роутер. Но esp8266 не понимает что связи уже нет и WiFi.status() возвращает WL_CONNECTED что все в порядке. В результате в одном месте начинается вечный цикл. А через час роутер заново выдает IP и соединение устанавливается. Происходит выход из цикла до следующего раза.

p.s.wifi_station_get_auto_connect не помогло. Связь не восстанавливается. Но тут уже можно решить проблему, так как мне не обязательно всегда иметь связь, час через час хватит чтобы синхронизировать время, а больше ничего и не нужно.
 

nikolz

Well-known member
Судя по всему вы правы - отваливается роутер. Но esp8266 не понимает что связи уже нет и WiFi.status() возвращает WL_CONNECTED что все в порядке. В результате в одном месте начинается вечный цикл. А через час роутер заново выдает IP и соединение устанавливается. Происходит выход из цикла до следующего раза.

p.s.wifi_station_get_auto_connect не помогло. Связь не восстанавливается. Но тут уже можно решить проблему, так как мне не обязательно всегда иметь связь, час через час хватит чтобы синхронизировать время, а больше ничего и не нужно.
Можно так решать проблему.
1) После каждого сеанса делайте явное отключение.
2) Поставьте колбек WIFI
void wifi_handle_event_cb(System_Event_t *evt)
и контролируйте в нем состояние соединения
Это должно решить проблему
3) Проверяйте перед передачей статус соединения
wifi_station_get_connect_status ();
и принимайте решение по значению.
-------------------
еще можно в роутере уменьшить время выделения адреса и он будет давать новый раньше.
 

shasoft

New member
@nikolz я вообще хотел просто раз в 30 минут переконекчиваться к роутеру. Но попробую ваше предложения проверить.
 

shasoft

New member
Можно так решать проблему.
2) Поставьте колбек WIFI
void wifi_handle_event_cb(System_Event_t *evt)
и контролируйте в нем состояние соединения
Это должно решить проблему
3) Проверяйте перед передачей статус соединения
wifi_station_get_connect_status ();
и принимайте решение по значению.
Это не работает.
В wifi_handle_event_cb не приходит событие что связь разорвалась.
wifi_station_get_connect_status Возвращает тоже значение что и при наличии сообщения.

Однако функция hostbyname возвращает ошибку (что неудивительно). Так что есть вариант с её помощью делать проверку. Т.е. взять список доменов и если для них всех IP адрес не возвращается - значит соединение отвалилось и нужно переконнектится.
 

nikolz

Well-known member
Это не работает.
В wifi_handle_event_cb не приходит событие что связь разорвалась.
wifi_station_get_connect_status Возвращает тоже значение что и при наличии сообщения.

Однако функция hostbyname возвращает ошибку (что неудивительно). Так что есть вариант с её помощью делать проверку. Т.е. взять список доменов и если для них всех IP адрес не возвращается - значит соединение отвалилось и нужно переконнектится.
покажите место где у вас настройка WIFI , как вы написали колбек и какой статус Вы получаете.
--------------
А вы ответ от сервера получаете?
---------------
У меня сделано так,
ESP посылает данные на сервер по UDP после этого ждет ответ. Ответ от сервера приходит не позже 20 мс (обычно 10) в колбек приема.
На это время я включаю таймер. Когда таймер сработал (т е ответ не пришел) снова устанавливаю таймер на 20 мс и считаю число установок. Когда время ожидания достигнет макс заданного принимаю решение что сервер не работает.
Отсутствие связи идентифицируется статусом.
wifi_station_get_connect_status==5 - связь есть иначе ее нет.
 

shasoft

New member
покажите место где у вас настройка WIFI
@nikolz показать сложно, так как этот код я уже вырезал.
Однако идея с hostbyname успешно сработала. Если по всем узловым доменам не удалось получить их IP (я их несколько сделал чтобы если сайт отвалится, то железяка не думала что отвалился интернет), то делаю реконнект. По логам вижу что реконект успешно произошел.

как вы написали колбек и какой статус Вы получаете.
При обрыве соединений вообще никаких вызовов калбека не происходило.
 

shasoft

New member
Спасибо за помощь, автоматика работает. Вчера поставил плату на установку 15 часов все работает нормально.

При проверке доступности WiFi через функцию hostbyname роутер вообще перестал отваливаться. Возможно он считает что раз запросы идут, то значит клиент "жив" и не нужно его отключать.
Хотя, я и раньше отправлял лог на внешний сайт не реже чем 1 раз в 3 минуты, но раньше отваливалось, а теперь нет. Так что не совсем понятно почему, но роутер теперь не отваливается.
 

achuser

New member
У меня работает минут 25-30, после чего виснет, и недоступно устройство не только по сети, но и в сериал затухает, пока не ребутнешь.

Выше описанные проблемы влияли только на связь или все же вешали устройство полностью?

Сделал рефреш на странице раз в 5 сек + функция отображения времени из интернета, по ней смотрю когда зависает, так же висит датчик ds18b20.

Посмотрю еще несколько циклов зависания, чтобы понять, всегда ли время работы около 25 минут...
 

shasoft

New member
У меня работает минут 25-30, после чего виснет, и недоступно устройство не только по сети, но и в сериал затухает, пока не ребутнешь.

Выше описанные проблемы влияли только на связь или все же вешали устройство полностью?

Сделал рефреш на странице раз в 5 сек + функция отображения времени из интернета, по ней смотрю когда зависает, так же висит датчик ds18b20.

Посмотрю еще несколько циклов зависания, чтобы понять, всегда ли время работы около 25 минут...
У меня просто связи не было, само устройство работало.
 

7L-electronics

New member
Моё решение такое для связки Arduino+esp+router+мой сайт:
1.На сайте есть check.php , который просто в ответ пишет OKconnect
2.Arduino справшивает ESP: ты жива? И если жива то переходит к п.3, если нет, то ресетит модуль через вывод RST ESP.
3.Arduino просит esp обратиться к странице check.php (сделано POST запросом, а можно и GET)
4.ESP отдает ответ arduino.
5.Если arduino не находит в ответе OKconnect, то делает рестарт esp.

Может и жестокий вариант, но рабочий на 100%.

С моего устройства данные идут в инет каждые 10 секунд и никакие пляски с роутером не помогли, решил всё по железному ресетить, что-бы голова не болела.
 

achuser

New member
5.Если arduino не находит в ответе OKconnect, то делает рестарт esp.
Ну если в связке с ардуиной, то все это проще, хоть пингуй что-то. А вот если одну есп пользовать. Если предположить, что она не зависла, а просто отвал коннекта, то ресет поможет. Но по прошлому опыту - валиться все, и в сериал перестает выдавать информацию и сервер падает.
 

7L-electronics

New member
Ну если в связке с ардуиной, то все это проще, хоть пингуй что-то. А вот если одну есп пользовать. Если предположить, что она не зависла, а просто отвал коннекта, то ресет поможет. Но по прошлому опыту - валиться все, и в сериал перестает выдавать информацию и сервер падает.
Те кто делает сервер на есп, пусть разоряться на про-мини и головная боль уйдет. Если жалко денег :) то нужно делать обвязку ресета есп на кондерах (типа временное реле), если зависла есп, то ресет через ключ когда кондер разрядился, а так сама есп может себя и ребутнуть... нужно только пропустить время когда мусор на пинах валиться.... Аналоговая часть это не моё, мне проще ещё один контроллер прикрутить)))
 

7L-electronics

New member
Те кто делает сервер на есп, пусть разоряться на про-мини и головная боль уйдет. Если жалко денег :) то нужно делать обвязку ресета есп на кондерах (типа временное реле), если зависла есп, то ресет через ключ когда кондер разрядился, а так сама есп может себя и ребутнуть... нужно только пропустить время когда мусор на пинах валиться.... Аналоговая часть это не моё, мне проще ещё один контроллер прикрутить)))
Вообще-то супер будет: есп контролит МК, а МК контролит есп)))

У меня от 20 до 85 отвалов wifi в день, но когда ребутит МК, на данных даже и не видно что был ресет, только если в лог перезагрузки смотреть...log.jpg
 

7L-electronics

New member
Вообще-то супер будет: есп контролит МК, а МК контролит есп)))

У меня от 20 до 85 отвалов wifi в день, но когда ребутит МК, на данных даже и не видно что был ресет, только если в лог перезагрузки смотреть...Посмотреть вложение 6797
ch_ERR - зависания есп, которых не видел уже месяц )))
 

achuser

New member
У меня есть устройство на ардуине, которое обкатано и работает прекрасно, хотел связь с ним сделать на вай фай, и убюджетить и уменьшить в размерах, используя сразу модуль МКУ, но тут и возникла проблемка, пока бросил дальше не занимался. Все же стоит понять из-за чего зависоны, и может ли оно вообще стабильно работать.
 

nikolz

Well-known member
У меня есть устройство на ардуине, которое обкатано и работает прекрасно, хотел связь с ним сделать на вай фай, и убюджетить и уменьшить в размерах, используя сразу модуль МКУ, но тут и возникла проблемка, пока бросил дальше не занимался. Все же стоит понять из-за чего зависоны, и может ли оно вообще стабильно работать.
может.
 

nikolz

Well-known member
Как может? Сколько читал форум так и не нашел решения что-бы отследить отваливание WIFI... Сказали может, так рассказывайте, только не направляйте в сторону допиливания прошивки есп и настройки роутера.
ну это Вы размечтались относительно того, что я обязан Вам рассказывать.
Тем более угадывать что Вам надо допиливать.
-----------------
Могу лишь посоветовать следующее
Если хотите чтобы все работало и вы понимали что и как
то пишите на Си на SDK сами.
Я так и делаю
ничего не отваливается.
Угадывать что там у вас я не буду.
 
Сверху Снизу