• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Как проверить доступна ли точка доступа?

Народ, подскажите как обустроить. Девайс на даче. Работает когда нет 220В от аккума. Соответственно 220В пропало, устройство перегрузилось и т.к. точки доступа нет, оно само стало точкой доступа. А теперь 220В дали. Но точка доступа иногда долго включается. Тепрькогда у меня режим WiFi AP у меня есть переменная, которая скажем равна 1. И мне надо при этом понять, что точка доступа стала доступна, тогда можно и WiFI на устройстве перезапускать. Как просканировать точку доступа?
 

aZholtikov

Active member
Поподробнее плз...

Точка доступа это ESP или роутер?
Девайс это ESP или еще что?
 

aZholtikov

Active member
ИМХО. Я просто уточнял у Delphin911 подробности, так как посчитал, что довольно опытный участник форума не будет спрашивать детсадовские вещи...
Очень интересно уточнение проблемы. Возможно что-то глубже... :)
 

CodeNameHawk

Moderator
Команда форума
Я просто уточнял у Delphin911 подробности, так как посчитал,
Так это и ежу понятно, что в разделе для начинающих пишут...
Вопрос тс предельно прост, но даже с подсказкой, там много подводных камней.
Связь с роутером != связи с инетом.
Подсоединился а не работает, надо вводить задержки или доп. проверки.
Если устройств меньше пяти или они подключаются в разное время, то есть вариант работы работы через есп, которая работает в режиме STA+AP...
 
Последнее редактирование:

tretyakov_sa

Moderator
Команда форума
У меня есть библиотека которую я использую в своих устройствах. Качайте и пробуйте.
 

enjoynering

Well-known member
у esp8266 есть функция автоматического подключения к последней точке доступа

Код:
if (WiFi.getAutoReconnect() != true) {WiFi.setAutoReconnect(true);} //set auto reconnection to wireless network if disconnected
if (WiFi.getAutoConnect()   != true) {WiFi.setAutoConnect(true);}   //set auto connection to last recorded wireless network on power-on
 
Связь с роутером нужно проверить. Интернет устройство использует раз в сутки, что бы время засинхронизировать.
А так требуется иметь возможность подключиться к нему, что бы посмотреть данные. Можно и без роутера напрямую. Но если есть рабочий роутер, то через него проще.
На счет опыта... не сказал бы что я уж такой опытный. Всего вторую приблуду на ESP делаю. Мноооога чего еще не знаю.
tretyakov_sa спасибо за наводку попробую.
у esp8266 есть функция автоматического подключения к последней точке доступа
А этот код в setup скажем прописывается и в случае потери соединения с роутером будет пытаться восстановить его? А если свет отрубили и роутер выключен скажем пару часов, он все два часа будет пытаться восстановить связь? Если так, то наверное это не годится. По хорошему по потере связи раз в час он бы опрашивал роутер и ладно.
 

aZholtikov

Active member
Связь с роутером нужно проверить. Интернет устройство использует раз в сутки, что бы время засинхронизировать.
А так требуется иметь возможность подключиться к нему, что бы посмотреть данные. Можно и без роутера напрямую. Но если есть рабочий роутер, то через него проще.
На счет опыта... не сказал бы что я уж такой опытный. Всего вторую приблуду на ESP делаю. Мноооога чего еще не знаю.
tretyakov_sa спасибо за наводку попробую.

А этот код в setup скажем прописывается и в случае потери соединения с роутером будет пытаться восстановить его? А если свет отрубили и роутер выключен скажем пару часов, он все два часа будет пытаться восстановить связь? Если так, то наверное это не годится. По хорошему по потере связи раз в час он бы опрашивал роутер и ладно.
Запускаем такое например раз в час или раньше :). Если нужная сеть появилась - подключаемся.
Код:
        uint8_t scan = WiFi.scanNetworks(false, false);
        String name;
        int32_t rssi;
        uint8_t encryption;
        uint8_t *bssid;
        int32_t channel;
        bool hidden;
        for (int8_t i = 0; i < scan; i++)
        {
            WiFi.getNetworkInfo(i, name, encryption, rssi, bssid, channel, hidden);
            if (name == ssid)
                WiFi.begin(ssid.c_str(), password.c_str());
        }
 

CodeNameHawk

Moderator
Команда форума
Связь с роутером нужно проверить.
В принципе можно обойтись и без сканирования.
"Главной есп", после появления 220, раз в час пробуетесь подключиться к роутеру.
Если подключение есть, пробуете открыть тестовую страницу в интернете, если все ОК, даете команду остальным есп переключиться на роутер. (На AP, работающем на есп, остальные есп переключаются после пропадания 220, конечно если есть питание от аккумов.)
 
Последнее редактирование:
А нет чего-нибудь навроде пинга? Идея вот какая. Вот я включил девайс, он загрузился, подключился к WiFi, работает. При этом, скажем раз в минуту он пингает точку доступа. Тут отключилась сеть (дача же, бывает несколько раз в неделю или в месяц). Девайс продолжает пингать точку доступа и, если чрез 5 минут точка не ожила, впадает сам в режим точки доступа. После этого он раз в 5-10 минут пытается подключиться к точке доступа. Как смог подключиться, дальше снова в обычном режиме работает.
 

aZholtikov

Active member
Без 220В он работает у меня от аккумулятора.
Ну я бы тогда сделал так:
1. Включение.
2. Сканирование сети.
3. Есть - подключаемся. Нет - AP.
4. В режиме AP сканируем каждый час. Есть - подключаемся.

И следим за событием STA_DISCONNECT (вроде так называется). Случилось - начинаем с пункта 2.
 
Так оно и сделано. Только бывает, что устройство работает, а свет выключили и точка доступа стала недоступна. И ту надо, что бы устройство в AP перешло, что бы можно было подключиться к нему со смартфона.
Нашел библиотеку ESP32ping. Ща потестю.
 
Вот еще нашел:
Код:
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
Тоже как вариант.
 
Сверху Снизу