Felderítés (Scan) osztály

Ezt az osztályt az Arduino WiFi könyvtárban a scanNetworks() függvény képviseli. Az esp8266 / Arduino mag fejlesztői további módszerekkel és tulajdonságokkal bővítik ezt a funkciót.

Ennek az osztálynak a dokumentációja két részre oszlik. Először az elérhető hálózatok keresésének funkcióit fedi le. A második leírja, hogy milyen információkat gyűjtenek a szkennelési folyamat során, és hogyan lehet hozzáférni.


Tartalomjegyzék


Hálózatok keresése

A hálózatok keresése több száz ezredmásodpercig tart. Ez megtehető egyetlen futtatással, amikor elindítjuk a vizsgálati folyamatot, várunk a befejezésre, és eredményt biztosítunk – mindezt egyetlen funkcióval. Egy másik lehetőség az, hogy ezt lépésekre bontja, mindegyiket külön funkció végzi. Így a szkennelés közben más feladatokat is végrehajthatunk. Ezt aszinkron szkennelésnek hívják. Az alábbiakban mindkét szkennelési módszert dokumentáljuk.


scanNetworks

Keressen elérhető Wi-Fi hálózatokat egy futással, és adja vissza a felfedezett hálózatok számát.


WiFi.scanNetworks()

Ez a funkció többarcú, amely két opcionális paramétert is elfogad az aszinkron szkennelés kiterjesztett funkcionalitásának biztosítására, valamint a rejtett hálózatok keresésére.


WiFi.scanNetworks(async, show_hidden)

Mindkét függvényparaméter boolean típusú. Ezek biztosítják a folyamatos funkcionalitást:


scanComplete

Ellenőrzi az aszinkron szkennelés eredményét.


WiFi.scanComplete()

A vizsgálat befejezésekor a funkció visszaadja a felfedezett hálózatok számát.

Ha a vizsgálat nem történik meg, akkor a visszaadott érték < 0, az alábbiak szerint:


scanDelete

Törli a legutóbbi szkennelés eredményét a memóriából.


WiFi.scanDelete()


scanNetworksAsync

Indítsa el az elérhető Wi-Fi hálózatok keresését. Ha végzett, hajtson végre egy másik funkciót.


WiFi.scanNetworksAsync(onComplete, show_hidden)

Funkcióparaméterek:

Példakód:


#include <ESP8266WiFi.h>

void prinScanResult(int networksFound)
{
  Serial.printf("%d network(s) found\n", networksFound);
  for (int i = 0; i < networksFound; i++)
  {
    Serial.printf("%d: %s, Ch:%d (%ddBm) %s\n", i + 1, WiFi.SSID(i).c_str(), WiFi.channel(i),
      WiFi.RSSI(i), WiFi.encryptionType(i) == ENC_TYPE_NONE ? "open" : "");
  }
}


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

  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  delay(100);

  WiFi.scanNetworksAsync(prinScanResult);
}


void loop() {}

A példa kimenete:


5 network(s) found
1: Tech_D005107, Ch:6 (-72dBm)
2: HP-Print-A2-Photosmart 7520, Ch:6 (-79dBm)
3: ESP_0B09E3, Ch:9 (-89dBm) open
4: Hack-4-fun-net, Ch:9 (-91dBm)
5: UPC Wi-Free, Ch:11 (-79dBm)


Az eredmények megmutatása

Az alábbi funkciók hozzáférést biztosítanak a szkennelés eredményéhez. Nem számít, hogy a szkennelés szinkron vagy aszinkron módban történt, a vizsgálati eredmények ugyanazon API használatával érhetők el.

Az egyes eredmények egy "networkItem" megadásával érhetők el, amely azonosítja a felfedezett hálózat indexét (nullától indul).


SSID

Adja vissza a vizsgálat során felfedezett hálózat SSID-jét.


WiFi.SSID(networkItem)

A visszaadott SSID String típusú. A networkItem a vizsgálat során felfedezett hálózat nullától induló indexe.


encryptionType

Visszaadja a vizsgálat során észlelt hálózat titkosítási típusát.


WiFi.encryptionType(networkItem)

A függvény egy olyan számot ad vissza, amely a következőképpen kódolja a titkosítási típust:

A networkItem a vizsgálat során felfedezett hálózat nullától induló indexe.


RSSI

Visszaadja a vizsgálat során észlelt hálózat RSSI-jét (Received Signal Strength Indication).


WiFi.RSSI(networkItem)

A visszaküldött RSSI int32_t típusú. A networkItem a vizsgálat során felfedezett hálózat nullától induló indexe.


BSSID

Adja vissza a BSSID-t (Basic Service Set Identification), amely a vizsgálat során felfedezett hálózat MAC-címének másik neve.


WiFi.BSSID(networkItem)

A függvény egy mutatót ad vissza arra a memóriahelyre (6 elemből álló uint8_t tömb), ahol a BSSID mentésre került.

Ha nem szereti a mutatókat, akkor ennek a függvénynek van egy másik verziója, amely egy String-et ad vissza.


WiFi.BSSIDstr(networkItem)

A networkItem a vizsgálat során felfedezett hálózat nullától induló indexe.


channel

Visszaadja a keresés során felfedezett hálózat csatornáját.


WiFi.channel(networkItem)

A visszaadott csatorna int32_t típusú. A networkItem a vizsgálat során felfedezett hálózat nullától induló indexe.


isHidden

A visszaadott információ, hogy a vizsgálat során felfedezett hálózat rejtett vagy sem.


WiFi.isHidden(networkItem)

A visszaadott érték, ha a boolean típusú, és a true azt jelenti, hogy a hálózat rejtett. A networkItem a vizsgálat során felfedezett hálózat nullától induló indexe.


getNetworkInfo

A fenti fejezetben tárgyalt összes hálózati információ visszaküldése egyetlen függvényhívásban.


WiFi.getNetworkInfo(networkItem, &ssid, &encryptionType, &RSSI, *&BSSID, &channel, &isHidden)

A networkItem a vizsgálat során felfedezett hálózat nullától induló indexe. Az összes többi bemeneti paraméter hivatkozással kerül átadásra a függvénynek. Ezért frissítésre kerülnek az adott networkItem tényleges értékeivel. Maga a függvény true vagy false boolean értéket ad vissza annak megerősítésére, hogy az információ visszakeresése sikeres volt-e vagy sem.

Példakód:


int n = WiFi.scanNetworks(false, true);

String ssid;
uint8_t encryptionType;
int32_t RSSI;
uint8_t* BSSID;
int32_t channel;
bool isHidden;

for (int i = 0; i < n; i++)
{
  WiFi.getNetworkInfo(i, ssid, encryptionType, RSSI, BSSID, channel, isHidden);
  Serial.printf("%d: %s, Ch:%d (%ddBm) %s %s\n", i + 1, ssid.c_str(), channel, RSSI,
    encryptionType == ENC_TYPE_NONE ? "open" : "", isHidden ? "hidden" : "");
}

A példa kimenete:


6 network(s) found
1: Tech_D005107, Ch:6 (-72dBm)
2: HP-Print-A2-Photosmart 7520, Ch:6 (-79dBm)
3: ESP_0B09E3, Ch:9 (-89dBm) open
4: Hack-4-fun-net, Ch:9 (-91dBm)
5: , Ch:11 (-77dBm)  hidden
6: UPC Wi-Free, Ch:11 (-79dBm)

A kódmintákért kérjük, olvassa el a külön szakaszt, amely kifejezetten a szkennelési osztályra vonatkozó példákat tartalmaza.


© Copyright 2017, Ivan Grokhotkov Revision 02c1a502. Fordította: Maczák András