• Система автоматизации с открытым исходным кодом на базе 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;
  }
Тоже как вариант.
 
Сверху Снизу