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

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

Да нет у меня никаких умных домов! Есть дачный летний домик, с обычными. кое-где еще Советскими розетками! :ROFLMAO:
Аккум стоит 32700 на 13800 мАч lifepo4 3,2 В. Хватает где-то недели на 2. Больше не тестировал.
Короче, ничего умного там нет. Есть метеостанция с экраном, по которому бегают цифири, когда 220В есть и которая сохраняет каждые 10 минут метеоданные на флешку 4Гига объемом. Для ESP я нарисовал сайт, в котором в реальном времени можно так же посмотреть метео показатели и бегаю графики изменения оных. Ну и можно вызвать данные за определенный месяц или за определенное число в виде таблицы или графиков глубиной 1 год.
Собственно все работает. Осталось мне вот реконнект отработать и всё.
 

pvvx

Активный участник сообщества
И сунул в сарай, т.к. мне лень ходить на километр. Связь BLE LongRange обычно все провряльщики указывают за 1 км. Но у нас тут рельеф не тот, чтобы найти ровно по прямой более 1 км.
А у ESP32 TX RF и в BLE можно включить и на +20дБ. Правда жрет оно....
Так что подумайте - нужен ли вам WiFi для датчиков, если им хватает CR2032 на полтора года работы.
 
Перенес строки
Код:
  if (WiFi.getAutoConnect()   != true) {WiFi.setAutoConnect(true);}   //set auto connection to last recorded wireless network on power-on
  if (WiFi.getAutoReconnect() != true) {WiFi.setAutoReconnect(true);} //set auto reconnection to wireless network if disconnected
в setup. На всякий пожарный туда же добавил
WiFi.persistent(false);
Не работает. Не подключается заново к WiFI точке при ее включении после перехода в режим AP.
Я вот думаю, может оно и не должно? Вот если в режим AP не переводить, то подключение происходит к WiFi е после пропадания и последующего восстановления у нее питания.
Я просто думаю, а с какого перепугу, находясь в режиме AP оно вдруг начнет подключаться к восстановившейся точке? Для этого у нее должно что-то постоянно эту точку мониторить. Может все-таки какое-то событие должно возникнуть при появлении в сети точки доступа?
 

aZholtikov

Active member
Режим WIFI_AP_STA.
Точка доступа работает всегда. При потери соединения с роутером девайс пытается переподключится. А точка доступа работает всегда... :)
 
Режим WIFI_AP_STA.
Точка доступа работает всегда. При потери соединения с роутером девайс пытается переподключится. А точка доступа работает всегда... :)
Вот щас не понял. Т.е. вы хотите сказать, что в этом режиме у устройства 2 IP адреса? Один свой, т.к. оно точка доступа и второй от WiFi-ной точки, к которой оно подключено?
 
Да. 2 IP. 2 MAC. Прекрасно работают параллельно.
Странно, что в в самой библиотеке такой пример не рассматривается. нет у вас ссылочки на пример использования такого режима?
И нет ли там подводных камней? Ведь получается этот режим удобнее, чем STA, т.к. устройство доступно всегда, даже когда что-то случилось с точкой доступа(WiFi точкой).
 

aZholtikov

Active member
Странно, что в в самой библиотеке такой пример не рассматривается. нет у вас ссылочки на пример использования такого режима?
И нет ли там подводных камней? Ведь получается этот режим удобнее, чем STA, т.к. устройство доступно всегда, даже когда что-то случилось с точкой доступа(WiFi точкой).
Подводных камней пока не обнаружил.
Моя реализация здесь. https://github.com/aZholtikov/ESP-NOW-Gateway (там параллельно 3 режима - AP+STA+ESP-NOW).
 

CodeNameHawk

Moderator
Команда форума
в setup. На всякий пожарный туда же добавил
WiFi.persistent(false);
Не работает. Не подключается заново к WiFI точке при ее включении после перехода в режим AP.
Я вот думаю, может оно и не должно?
Надо разделять, не работает так как должно или так как вы себе это представляете.
Понятно, что без написания кода не обойтись.
Проверяйте WiFi.status() https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/station-class.html
И делайте что надо, а у вас надо не мало, переключить всех с AP на STA.
Поэтому проще делать как я писал
Если устройств меньше пяти или они подключаются в разное время, то есть вариант работы работы через есп, которая работает в режиме STA+AP...
Тут будет достаточно проверять работает ли STA, так как AP будет все время работать.
 
Народ, а я вот что-то не могу найти. Есть возможность спросить у ESP-шки в каком режиме она находится? Клиента или точки доступа, ну или в двойном?
Я как бы изначально переменную завел. но должно же быть что-то штатное?
 

aZholtikov

Active member
Народ, а я вот что-то не могу найти. Есть возможность спросить у ESP-шки в каком режиме она находится? Клиента или точки доступа, ну или в двойном?
Я как бы изначально переменную завел. но должно же быть что-то штатное?
WiFi.getMode()
 
Надо разделять, не работает так как должно или так как вы себе это представляете.
Понятно, что без написания кода не обойтись.
Проверяйте WiFi.status() https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/station-class.html
И делайте что надо, а у вас надо не мало, переключить всех с AP на STA.
Поэтому проще делать как я писал
Ну вот и ответ на мой посчледний вопрос. Но сейчас не об этом.
Всех у меня один! :LOL: Вопрос не в том, что бы переключить, а в том, чтобы узнать, стала доступна точка доступа или нет. Ну не запускать же тупо подключение каждые сколько-то секунд?
Я собственно уже накидал тут. Если режим AP, то каждые 10 секунд смотрим окружение и если есть нужный SSID, то подключаемся. Во всяком случае работает без сбоев:
Код:
  if (millis() - zd >= 10000) {
    zd = millis();
    if (wifimode == 0) {
      int n = WiFi.scanNetworks();
      Serial.println("scan done");
      if (n == 0) {
          Serial.println("no networks found");
      } else {
        Serial.print(n);
        Serial.println(" networks found");
        for (int i = 0; i < n; ++i) {
          // Print SSID and RSSI for each network found
          if (WiFi.SSID(i) == jsonRead(configSetup, "ssid")) {
            WIFIinit();
            break;
          }
        }
      }
    }
  }
aZholtikov
Вашу блиотеку посмотрел. Спасибо за совет. Но честно поленился переписывать всю инициализацию WiFi.
 

CodeNameHawk

Moderator
Команда форума
Я как бы изначально переменную завел.
Так оно только таким как задали, и будет, не переключиться если не нет связи.
Ну не запускать же тупо подключение каждые сколько-то секунд?
Если секунды заменить на десятки минут, то да или как советовали вам выше использовать события
https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/generic-class.html
 
Если секунды заменить на десятки минут, то да или как советовали вам выше использовать события
Я не нашел событие, которое бы говорило о том, что точка доступа, которая прописана в скетче, снова стала доступна. А события по севету выше я использую. Событие подключения к точке доступа и отключения от нее.
 

Gdalex

New member
Народ, объясните, пожалуйста, назначение канала в процедуре esp_now_add_peer? Если у нас односторонняя связь, и регистрация получателя только со стороны отправителя, как получатель узнаёт, что ему надо общаться с отправителем именно на этом канале? Я так понимаю, что при регистрации пира, на стороне пира где-то должно сохраниться текущее значение канала или при каждой трансляции отправитель по информационному каналу (как я себе это представляю) говорит: "Я получателю с таким МАС-адресом сейчас на таком-то канале отправлю пакет", оба переключаются на указанный канал и происходит отправка посылки и подтверждение её получения.
Или какой-то другой механизм? Я что-то в pdf от Espressif не нашел ничего внятного по этому поводу. И в исходниках под Ардуину тоже.
 

aZholtikov

Active member
Там немного по другому.
По умолчанию ESP-NOW работает на канале 1, если ничего не менять.
Другой канал можно выбрать как первоначальными настройками esp_wifi_set_channel() при инициализации ESP-NOW, так и в любой момент выполнения программы с помощью указания конкретного канала при добавлении Пира. Тупо переключает канал ESP-NOW на конкретном устройстве. Для всех добавленных Пиров!!! Если на других устройствах канал другой - данное устройство будет "слепо".

P.S. Добавлять Пиров нужно только для отправки, для приема не надо... :) Добавили, отправили, удалили. И никаких ограничений по количеству... Принимать будет от всех.
 

aZholtikov

Active member
То есть после выполнения esp_now_add_peer устройство станет работать на канале, который был последним указанным при добавлении Пира.
 

aZholtikov

Active member
Предположим добавили 3 Пира последовательно. 1-й на канале 1, второй на канале 2, третий на 3. Устройство стало работать на канале 3. Соответственно принимать может только от устройств на канале 3.
Отправляете сообщение 2-му Пиру (он на канале 2). Устройство переключается на канал 2 и отправляет сообщение. Соответственно далее принимать может только от устройств на канале 2.
Ну и так далее...

Вообщем настоятельно не рекомендую.
 

aZholtikov

Active member
Из этого вытекает очень неприятная ситуация... Если устройство параллельно подключено к WiFi, то оно (в части ESP-NOW) автоматом станет работать на канале роутера. При попытке изменить канал оно "отвалится" от WiFi. + еще постоянная смена каналов роутером... Проблема естественно актуальна только для шлюза ESP-NOW - Internet.
Решений в сети существует 3 ( за 6 лет работы с ESP-NOW больше не нашел).
1. Принудительно установить на роутере канал 1 (если для шлюза используется WiFi подключение).
2. Использовать модуль с LAN портом (WiFi для ESP-NOW, LAN для выхода дальше). Это мой вариант реализации шлюза.
3. 2 ESP модуля, соединенных каким-либо способом (если для шлюза используется WiFi подключение). Один для ESP-NOW, второй для WiFi для выхода дальше.
 
Сверху Снизу