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

Нужна помощь Как просканировать сеть, если известетно ее имя?

Slacky

Member
Как просканировать методом перебора есть в примерах.

А есть ли возможность проверить, присутствует ли известная сеть не перебором всех сетей?

Спасибо.
 

Slacky

Member
Почитал более подробно про WIFI.scanNetworks().

Есть вот такое описание.

There is on overload of this function that accepts two optional parameters to provide extended functionality of asynchronous scanning as well as looking for hidden networks.

WiFi.scanNetworks(async, show_hidden)

Both function parameters are of boolean type. They provide the flowing functionality:

  • asysnc - if set to true then scanning will start in background and function will exit without waiting for result. To check for result use separate function scanComplete that is described below.
  • show_hidden - set it to true to include in scan result networks with hidden SSID.
Далее нужно вызывать функцию

WiFi.scanComplete()

Которая возвращает или количество найденных сетей (это как я понял) или

If scan is not done, then returned value is < 0 as follows:

  • Scanning still in progress: -1
  • Scanning has not been triggered: -2
Ну так вот в тестовом скетче возвращается все время -1 ...

Может я что-то не так понял?

Спасибо.

P.S. Зачем все это? Ну по описанию scanNetworks(true, false) поиск в таком случает работает в бекграйнде и не занимает время, программа может дальше выполняться, время от времени проверяя, что там возвращает функция scanComplete().
 

pvvx

Активный участник сообщества
Как можно сканировать сеть с одновременной работой WiFi?
Приемник и передатчик (SoftAP/Station) работают на одном канале и "быстрых прыжков" по каналам драйвер WiFi от Espressif для ESP8266 делать не умеет.
Сканирование на ESP возможно, только при отключении функций приема-передачи или постоянный прием пакетов по одному каналу с вашим разбором, т.к. аппаратные фильтры на пакеты у него не предусмотрены.
То, что вы копаете - это внешние навески и они дают только описанные варианты - "прием пакетов по одному каналу с вашим разбором".
В SDK есть функция перехвата события приема внешнего "probe request" на текущем канале...
В итоге можно получить их список.
Снимок1493.gif Снимок1494.gif

PS: Что у вас подразумевается под "просканировать сеть" не ясно.
 
Последнее редактирование:

Slacky

Member
@pvvx, а кто сказал, что WiFi подключен? Сканирование как раз и нужно, когда WiFI отвалился ...
 

pvvx

Активный участник сообщества
@pvvx, а кто сказал, что WiFi подключен? Сканирование как раз и нужно, когда WiFI отвалился ...
Вы ничего и не сказали. Клещами и вытаскиваем то, что вы там подразумеваете под "сканированием" :)
Уточняйте далее, без наводящих вопросов, а то нифига не понятно, что вам надо. Ответов и нет :)
Ну и про то, что никак не просканировать сеть на других участников, без разрывов текущих соединений - это беда у ESP8266, а не у всех WiFi модулей... Как и возможности держать station на другом канале от SoftAP.
Так-же методы стандартного "сканирования сетей" различаются по типам - активные и пассивные.
 
Последнее редактирование:

Slacky

Member
@pvvx так элементарно же :))) Есть пример WiFiScan.ino в библиотеке Arduuino IDE. А его слегка подправил на предмет scanNetworks() с параметрами. И ничего не получилось, как описано в документации ...

Код:
#include "ESP8266WiFi.h"

int n;
bool scanning;

void setup() {
  Serial.begin(115200);

  // Set WiFi to station mode and disconnect from an AP if it was previously connected
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  Serial.println("Setup done");
  n = -3;
  scanning = true;
  WiFi.scanDelete();
}

void loop() {
    // WiFi.scanNetworks will return the number of networks found
  if (scanning) {
    Serial.println("scan start");
    WiFi.scanNetworks(true, false);
    scanning = false;
    n = -3;
  }
  if (n == -3) {
    Serial.println("scan done");
    n = WiFi.scanComplete();
  }
  if (n == -1)
    Serial.println("Continue networks found");
  else if (n == -2) {
    Serial.println("No networks found");
    scanning = true;
    n = -3;
    WiFi.scanDelete();
  } else {
    Serial.print(n);
    Serial.println(" networks found");
    for (int i = 0; i < n; ++i)
    {
      // Print SSID and RSSI for each network found
      Serial.print(i + 1);
      Serial.print(": ");
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*");
      delay(10);
    }
    scanning = true;
    n = -3;
    WiFi.scanDelete();
  }
  Serial.println("");

  // Wait a bit before scanning again
  delay(5000);
}
 

pvvx

Активный участник сообщества
@pvvx так элементарно же :))) Есть пример WiFiScan.ino в библиотеке Arduuino IDE.
Т.е. вы обсуждаете конкретный "скетч", а не как произвести "сканирование WiFi сети" с некими параметрами?
Тогда помочь нечем... Впишите туда проверку на искомое имя и вопрос решится. :)
 

Slacky

Member
@pvvx, так изначально все так и было сделано. Но n = WiFi.scanNetworks() без параметров занимает очень много времени. Потому я и зацепился за WiFi.scanNetworks(true, false), потому что оно фоном работает ...
 
Сверху Снизу