• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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 для выхода дальше.
 
Сверху Снизу