Esp8266 отключается wifi через время

Обновлено: 06.07.2024

По умолчанию 0 а это значит что модуль не когда не уйдет в глубокий сон.

При загрузке из глубокого сна таймер запускается на основе этой настройки. Если этот таймер истечет, узел снова войдет в глубокий сон.

Как только узел установит успешное соединение Wi-Fi, таймер перезапустится, чтобы разрешить отправку данных датчика.

Независимо от этого параметра, можно перевести узел в глубокий сон с помощью команды deepsleep

Вытащить из глубокого сна можно и подачей на контакт RSTмодуля «HIGH» или "1"

Sleep time (sec) (Время засыпания, в сек. )

Время в секундах, в течение которого узел находится в глубоком сне.

Sleep on connection failure (Спящий режим при сбое подключения)

При невозможности подключится точка доступа уходит в спящий режим.

Подраздел Special and Experimental Settings (Специальные и экспериментальные настройки)

Идем по пути Tools > Advanced Settings (Инструменты> Расширенные настройки)

Special and Experimental Settings (Специальные и экспериментальные настройки) Special and Experimental Settings (Специальные и экспериментальные настройки)

Connection Failure Threshold (Порог сбоя подключения)

Должно быть отключено

Force WiFi B/G (Принудительно использовать Wi-Fi B/G)

Должна стоять галочка, по идеи перевод в B/G режимы должен позволить сохранить энергию, но я не уверен

Restart WiFi Lost Conn (Перезапустите Wi-Fi при потере соединения)

Должно быть отключено

Force WiFi No Sleep (Принудительное включение WiFi без сна)

Periodical send Gratuitous ARP (Периодическая отправка ARP)

CPU Eco Mode (Эко-режим ЦП)

Должно быть включено.

Вызов функции delay из планировщика во время цикла ожидания. Это приведет к значительному снижению энергии - до 0,2 Вт.

При вызове delay останавливается ядро, работает только периферия, а значит при использовании функции не прекращается работа прерываний (если произойдет прерывание, то обработчик начнет работать), также продолжается передача/приём в буфер данных по последовательному порту, генерация ШИМ-сигнала также не прекращается.

Если узел только отправляет пакеты (например, только датчик, подключенный и отправляющий на какой-то сервер), то это отличный способ сэкономить энергию и уменьшить нагрев.

Но нет гарантии, что потребление энергии будет снижено. Например, когда хост получает непрерывные запросы ping, он никогда не активирует режим энергосбережения.

Если режим энергосбережения активен, узел может пропустить некоторые широковещательные пакеты. Например, пакеты p2p ESPeasy будут время от времени пропускаться, поэтому не активируйте этот режим, когда важно время ответа на полученные пакеты.

Выводы

Итак, для снижения потребления электроэнергии можно поступить двумя способами программным и железным

  • Включая Sleep awake time(Время бодрствования при выходе из сна, в сек) можно пробудить модуль подачей на контакт RST модуля ESP8266 высокого уровня, «HIGH» Например, подавая 2-3вольта через геркон, а сам факт пробуждения и будет детекцией сигнала (т. е. геркон подключаем к RTS, или по другому, подтягиваем RTS к питанию через геркон)
  • Включая Sleep awake time(Время бодрствования при выходе из сна, в сек) и пробуждая модуль по таймеру, соединено GPIO16 и RTS
  • Выключая все режимы и настраивая все программные настройки прошивки описанные выше с включением CPU Eco Mode (Эко-режим ЦП)

На сегодня все и как всегда.

Продолжение следует.

Статьи на моем канале по теме ESP Easy:

  • Делаем ESP по настоящему умной (прошивка "ESP Easy" первое знакомство, ESP Easy Flasher или как прошить ESPшку)
  • Работа с прошивкой ESP Easy, основной раздел (Main) и системная информация (System Info)
  • Прошивка ESP Easy, настройка модуля, раздел Конфигурация (Config)
  • Работа с прошивкой ESP Easy раздел Hardware Settings
  • Подключаем кнопку и светодиод и настраиваем их в прошивке ESP Easy
  • Прошивка ESP Easy настраиваем Regulator - Level Control
  • ESP8266 + ESP Easy - делаем будильник. Пишем свои правила (Rules)

Подписывайтесь на наш канал TehnoZet-2 , будет интересно! Мы активно развиваемся! Понравилась статья, хотите продолжения - пишите комментарии, ставьте лайк, жмите палец вверх!

У ESP8266 есть несколько общих проблем, особенно при попытке записать новую прошивку или загрузке скриптов.

Вот подборка наиболее распространенных проблем с ESP8266 и способы для их исправления.

Устранение неполадок ESP8266 - NodeMCU Flasher

Где скачать флешер NodeMCU?

Перейдите в репозиторий GitHub флешера NodeMCU и загрузите флешер для вашей версии Windows, нажав кнопку «Raw»:

Какие настройки следует использовать с флешером NodeMCU?

Флешер NodeMCU уже поставляется с правильными настройками по умолчанию.

Настройки по умолчанию:

image_1.jpg

После нажатия кнопки «Flash» ничего не происходит, прошивальщик NodeMCU не запускает процесс перепрошивки

Если вы нажали кнопку «Flash» и ничего не происходит . Это может быть одно из двух:

  • ESP не находится в режиме прошивки (перепроверьте, подключен ли GPIO 0 к GND при включении питания)
  • программатор FTDI не может подать достаточный ток на ESP

image_2.jpg

Проблема 1 - Как заставить ESP перейти в режим прошивки:

Если он все еще сообщает «Ожидание MAC», попробуйте следующее:

  1. Подключите провод от вашего reset ESP8266 к GND
  2. Отсоедините этот провод от GND и присоединитесь к VCC

Повторите шаги несколько раз, пока ESP не перезагрузится, и, скорее всего, флешер NodeMCU сможет обнаружить ESP и начать процесс перепрошивки.

Проблема 2. Если FTDI не может обеспечить достаточный ток, возможно, придется купить новый программатор FTDI или подключить ESP8266 к внешнему источнику питания.

Флешер NodeMCU зависает или останавливается на определенном проценте

image_3.jpg

  1. Отключите питание от ESP + FTDI: Закройте окно флешера NodeMCU
  2. Подключите ESP + FTDI к компьютеру снова
  3. Откройте флешер NodeMCU и попробуйте скорость передачи 19200 бод

Если этот процесс завершится неудачно, повторите ту же процедуру для следующих скоростей передачи (38400, 57600, 74880 и 115200).

Ппо крайней мере 5 человек столкнулись с той же проблемой, и этот способ решил ее.

Как должен выглядеть NodeMCU после успешной прошивки?

У него должна быть зеленая стрелка внизу слева.

image_4.jpg

Разблокировка программатора FTDI на ПК с Windows

В качестве альтернативы можете связаться с продавцом, который продал программатор FTDI.

Если возникли проблемы с установкой драйверов FTDI в Windows 7/8 / 8.1 / 10, вполне вероятно, что FTDI заблокирован.

Устранение неполадок ESP8266 - ESPlorer IDE

ESPlorer IDE Ошибка: разрешен только один tcp сервер

Сегодня еще 1 человек написал о том что на ночь отключает роутер и утром включает.
Ну и ESP не подключается к нему сама, т.к. она переходит в Точку доступа.

The text was updated successfully, but these errors were encountered:

Forldol commented Jan 17, 2019

default

@AndrewMyName, можно настроить через какое время подключаться к роутеру. Если я правильно понял. Если у вас роутер загружается минуту или две, ставьте больше время.

Forldol commented Jan 17, 2019

@renat2985, по поводу таймера на перезагрузку, сегодня пробовал так сделать но при отключении роутера точка доступа устройства на появляется (ждал минут 30), а при включении роутера устройства в сети не видно, таймер на перезагрузку тоже почему-то не сработал.

Возможно действительно есть смысл сделать что бы режим точки доступа включался при замкнутом какой нибудь gpio.
Или еще вариант: если в течении нескольких минут в режиме точки доступа никто не подключился - перезагружать устройство. (насколько я понял он сначала пробует подцепиться к роутеру если не получилось переходит в режим точки доступа)

TACH -> TOUCH = Кнопка, ошибка уже давно тянется из версии к версии.

@Forldol наверное изменили пароль в ESP на роутер и перезагрузили ESP? В таком случае при загрузке ESP не сможет узнать время и запустится с временем 00:00:00.
Нужно именно выключить сам роутер. Подождать когда ESP встанет в точку доступа, и потом снова включить роутер. И ждать.

@renat2985, Нет, просто выключил роутер, но точка доступа не появлялась. Ждала часа пол. Может дольше ждать надо было? Потом включил роутер но ни точки доступа ни устройства в сети не было. дождался времени когда должен был сработать таймер - ничего не произошло.

renat2985 commented Jan 17, 2019

@Forldol спасибо за эксперимент.

multysea commented Jan 19, 2019

Совершенно очевидно, что не должна настроенная система падать только из-за того, что реле, видите ли, не видя интернета переходит в AP! Лучше пожертвовать одним gpio и сделать загрузку в АР после нажатия кнопки и подачи питания, это делается один раз, а свет может пропадать 10 раз в день.

multysea commented Jan 19, 2019

Уж не говоря о том, что можно использовать для первичного подключения к сети вариант с ESP8266 SnartConfig.

@multysea если у вас так часто пропадает свет целесообразно купить UPS.
И ESP не нужен Интернет. Ей нужен роутер. Да и вообще тут проблема в другом. Как оказалось если роутер отключить от питания, в то время как ESP продолжает работать. После того как роутер снова включить ESP не подключается к роутеру и не входит в AP. - это баг исправим.

multysea commented Jan 19, 2019

Специально исследовал, на бета версии с моими модулями - после перезагрузки роутера подключается без проблем, на стабильной - нет. И насчёт интернета, мне все это нужно чтобы контролировать объект удаленно, т.е. я захожу в сеть снаружи, и если, после восстановления интернета или света устройства находятся в режиме АР - это исключает возможность взаимодействия с ними. ИБП есть, но изучаю критические варианты развития событий:).

tretyakovsa commented Jan 20, 2019

Здесь нужно в корне переделать алгоритм работы, и скорее всего все поменяю. Станет проще и лучше.

Egor2101 commented Jan 20, 2019

Forldol commented Jan 20, 2019

@renat2985 Сделал, ничего не поменялось. Проблема в том, что после отключения роутера модуль не переходит в режим АР,а после включения роутера его нет в сети.

tulavolond commented Feb 1, 2019

При первом включении проверяет был ли настроен интернет, если да то работает и всё время следит есть связь или нет.
если пропал интернет, ждет когда снова появится, подключается, и в точку не переходит, проверено.
Всё оч. просто

// void setup() //Запускаем WIFI
WIFIinit(false);
//>
Далее правим или перезаписываем функцию

void WIFIinit(bool flag) // --------------------Получаем ssid со страницы
HTTP.on("/ssid", HTTP_GET, jsonWrite(configSetup, "ssid", HTTP.arg("ssid"));
jsonWrite(configSetup, "password", HTTP.arg("password"));
saveConfig(); // Функция сохранения данных во Flash
HTTP.send(200, "text/plain", "OK"); // отправляем ответ о выполнении
>);
// --------------------Получаем ssidap со страницы
HTTP.on("/ssidap", HTTP_GET, jsonWrite(configSetup, "ssidAP", HTTP.arg("ssidAP"));
jsonWrite(configSetup, "passwordAP", HTTP.arg("passwordAP"));
saveConfig(); // Функция сохранения данных во Flash
HTTP.send(200, "text/plain", "OK"); // отправляем ответ о выполнении
>);

// Попытка подключения к точке доступа
WiFi.mode(WIFI_STA);
byte tries = 11;
String _ssid = jsonRead(configSetup, "ssid");
String _password = jsonRead(configSetup, "password");
if (_ssid == "" && _password == "") WiFi.begin();
>
else WiFi.begin(_ssid.c_str(), _password.c_str());

>
// Делаем проверку подключения до тех пор пока счетчик tries
// не станет равен нулю или не получим подключение
while (--tries && WiFi.status() != WL_CONNECTED)
Serial.print(".");
delay(1000);

Удачи, у меня всё работает, попробуйте :)

multysea commented Feb 4, 2019

tulavolond , вы такой продвинутый, это прекрасно, но для широкой аудитории может быть стоило больше подробностей дать? Куда весь этот ваш код вводить, что и как потом компилировать.. И вообще, почему обычные sonoff реле нормально восстанавливают свое состояние после отключения роутера, после пропадания света, а в этом проекте такие мегатанцы с бубном, которые к тому же не решают вопрос, т.к. надежности и очевидности во всех этих таймерах на перезагрузку и таймаутах нет никакой. Поразительно, такой классный проект и с таким недоразумением. Еще раз повторюсь, не должна система зависеть от того, как долго грузится роутер!

tulavolond commented Feb 4, 2019

Добрый день! никакой я не продвинутый, с удовольствием смотрю Ваши видео!
Я всего лишь добавил флаг в функцию.
в void setup() WIFIinit(false);
>
а
в эту функцию условие и всё.
void WIFIinit(bool flag)

if (WiFi.status() != WL_CONNECTED)
if(flag == 0) StartAPMode();
>
И конечно же этот флаг желательно записывать во флэш память при подключении к wifi, тогда точно проблем не будет

пока не изменятся настройки в самом роутере.

Если отключат эл- во он не поможет, а поможет если вывалился интернет или повис роутер и.т.д.. То Будет работать и ждать когда появится.

WiFi-ESP8266 Начало работы (12) - Использование прерывания GPIO

Прерывание является случайным событием в процессе непрерывности. Это похоже на фоно, когда вы заняты некоторой работой, решайте, следует ли участвовать или игнорировать его в соответствии с приоритетным порядком телефона.

ESP8266 на основе NodeMCU имеет функцию прерывания на его пинге GPIO. Эта функция доступна на PIN-контакте D0-D8 KITEMCU DEV.

PIN-прерывание GPIO через поддержку функции прерывания ArduinoТакие как прикрепление, детектинтерно。

Прерывания могут быть подключены к любому пингу GPIO, кроме штифтов D0 / GPIO16. Поддержка стандартных типов прерываний Arduino, называемых изменением, ростом, падая.

Давайте посмотрим на функцию, используемую для установки прерывания для Suite NodeMCU в Arduino IDE.

attachInterrupt()

Эта функция используется для прикрепления прерываний на указанном контакте.

Функция: attachInterrupt(pin, ISR(callback function), interrupt type/mode);

Параметр:

pin :Чтобы установить PIN-код прерывания.

ISR (callback function) :ISR будет называться, когда происходит прерывание; эта функция не приносит никаких параметров, не возвращая ничего.

Interrupt type/mode :Определяет, что когда прерывание должно быть вызвано.

CHANGE:Используется для запуска прерывания при изменении значения PIN-кода.

RISING:Используется для того, чтобы вызвать прерывание на штифте с низкого уровня.

FALLING:Используется для запуска прерывания, когда PIN-код изменен с высокого уровня.

возвращаться: null

detachInterrupt()

Эта функция запрещена, чтобы указать прерывания на PIN-контакте GPIO.

Функция: detachInterrupt(pin)

Параметр:

pin :PIN-код GPIO прерывания должен быть отключен.

возвращаться: null

Давайте напишем программу Arduino, которая устанавливает прерывание Rising edge на 2-й PIN-код GPIO odemcu. Здесь мы подключаем переключатель на втором PIN-кода GPIO для генерации прерывания Rising edge. Кроме того, мы распечатаем время (в миллисекундах), которое происходит на окне серийного монитора.

Читайте также: