Az ESP8266 által biztosított funkciók száma állomás módban sokkal kiterjedtebb, mint az eredeti Arduino WiFi könyvtárban. Ezért az eredeti dokumentáció kiegészítése helyett úgy döntöttünk, hogy a vázlatból újat írunk.
Az állomásosztály leírása négy részre oszlik. Először a hozzáférési ponttal való kapcsolat létrehozásának módszereit tárgyalja. A második olyan módszereket biztosít a kapcsolat kezelésére, mint pl. a reconnect
vagy az isConnected
. A harmadik a kapcsolatokra vonatkozó információk beszerzésére szolgáló tulajdonságokra vonatkozik, például MAC- vagy IP-címre. Végül a negyedik szakasz alternatív módszereket kínál a csatlakozáshoz, mint pl. Wi-Fi Protected Setup (WPS).
Az alábbi pontok leírást és kódrészleteket tartalmaznak az egyes módszerek használatáról.
További kódmintákért tekintse meg a külön szakaszt, amely kifejezetten az állomásosztályra vonatkozó példákat tartalmaz.
A modul állomás módba kapcsolása a begin
funkcióval történik. A begin
-nek tipikusan átadott paraméterek közé tartozik az SSID és a jelszó, így a modul egy adott hozzáférési ponthoz tud csatlakozni.
WiFi.begin(ssid, password)
Alapértelmezés szerint az ESP megpróbál újra csatlakozni a Wi-Fi hálózathoz, amikor megszakad. Ezt nem kell külön kóddal kezelni. A kapcsolat megszakadásának szimulálására jó módszer a hozzáférési pont visszaállítása. Az ESP jelenti a kapcsolat megszakadását, majd megpróbál automatikusan újracsatlakozni.
A begin
függvénynek számos változata létezik (a C++-ban a függvény többarcúságnak nevezik). Az egyik közvetlenül fent volt: WiFi.begin(ssid, password)
. A többarcúságnak rugalmasságot biztosítanak az elfogadott paraméterek számában vagy típusában.
A begin
legegyszerűbb többarcúsága a következő:
WiFi.begin()
Meghívása engedélyezi az állomás módot, és csatlakozik az utoljára használt hozzáférési ponthoz a flash memóriába mentett konfiguráció alapján.
Megjegyzés:
begin
hívása azt eredményezi, hogy a modul STA + softAP módba kerül, ha a modult előzőleg AP módba helyezték.WiFi.mode()
-t az Generic osztály dokumentációjában).Az alábbiakban a begin
egy másik többarcúságának szintaxisa látható az összes lehetséges paraméterrel:
WiFi.begin(ssid, password, channel, bssid, connect)
A paraméterek jelentése a következő:
ssid
- karakterlánc, amely tartalmazza annak a hozzáférési pontnak az SSID-jét, amelyhez csatlakozni szeretnénk, legfeljebb 32 karakterből állhatpassword
- a hozzáférési pont jelszava, egy karakterlánc, amely legalább 8 karakter hosszú és nem lehet hosszabb 64 karakternélchannel
- az AP csatornája, ha egy adott csatornával szeretnénk működni, ellenkező esetben ez a paraméter elhagyhatóbssid
- az AP mac-címe, ez a paraméter szintén nem kötelezőconnect
- egy boolean
paraméter, amely false
értékre állítva utasítja a modult, hogy mentse el a többi paramétert anélkül, hogy ténylegesen kapcsolatot létesítene a hozzáférési ponttalTiltsa le a DHCP klienst (Dynamic Host Configuration Protocol), és állítsa be az állomás interfész IP-konfigurációját a felhasználó által megadott tetszőleges értékekre. Az interfész statikus IP-konfiguráció lesz a DHCP által biztosított értékek helyett.
WiFi.config(local_ip, gateway, subnet, dns1, dns2)
A függvény true
-t ad vissza, ha a konfigurációmódosítás sikeresen végrehajtva. Ha a konfiguráció nem alkalmazható, mert pl. a modul nem állomás vagy állomás + soft access point módban van, akkor false
értéket ad vissza.
A következő IP-konfiguráció gondoskodik:
local_ip
- írja be ide azt az IP-címet, amelyet az ESP állomás interfészéhez szeretne rendelnigateway
- tartalmaznia kell az átjáró (útválasztó) IP-címét a külső hálózatok eléréséhezsubnet
- ez egy maszk, amely meghatározza a helyi hálózat IP-címeinek tartományátdns1, dns2
– opcionális paraméterek, amelyek meghatározzák a tartománynév-szerverek (DNS) IP-címeit, amelyek egy tartománynév-könyvtárat tartanak fenn (pl. www.google.co.uk), és lefordítják azokat számunkra IP-címekrePéldakód:
#include <ESP8266WiFi.h>
const char* ssid = "********";
const char* password = "********";
IPAddress staticIP(192,168,1,22);
IPAddress gateway(192,168,1,9);
IPAddress subnet(255,255,255,0);
void setup(void)
{
Serial.begin(115200);
Serial.println();
Serial.printf("Connecting to %s\n", ssid);
WiFi.config(staticIP, gateway, subnet);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {}
A példa kimenete:
Connecting to sensor-net
.
Connected, IP address: 192.168.1.22
Kérjük, vegye figyelembe, hogy a statikus IP-konfigurációjú állomás általában gyorsabban csatlakozik a hálózathoz. A fenti példában körülbelül 500 ms-ig tartott (egy pont . jelenik meg). Ennek az az oka, hogy az IP-konfiguráció DHCP-kliens általi megszerzése időt vesz igénybe, és ebben az esetben ez a lépés kimarad. Ha mindhárom paramétert 0.0.0.0-nak adja meg (local_ip, gateway és subnet), akkor újra engedélyezi a DHCP-t. Új IP-címek beszerzéséhez újra csatlakoztatnia kell az eszközt.
Csatlakoztassa újra az állomást. Ez úgy történik, hogy megszakítja a csatlakozást a hozzáférési ponttól, majd újrakezdi a kapcsolatot ugyanahhoz az AP-hoz.
WiFi.reconnect()
Megjegyzések: 1. Az állomásnak már csatlakoznia kell egy hozzáférési ponthoz. Ha nem ez a helyzet, akkor a függvény false
értéket ad vissza, és nem hajt végre semmilyen műveletet. 2. Ha true
értéket ad vissza, az azt jelenti, hogy a kapcsolódási folyamat sikeresen elindult. A felhasználónak továbbra is ellenőriznie kell a kapcsolat állapotát, és meg kell várnia a WL_CONNECTED
jelentését:
WiFi.reconnect();
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Az aktuálisan konfigurált SSID-t és jelszót null
értékre állítja, és leválasztja az állomást egy hozzáférési pontról.
WiFi.disconnect(wifioff)
A wifioff
egy opcionális boolean
paraméter. Ha true
, akkor az állomás mód kikapcsol.
true
értéket ad vissza, ha az állomás csatlakozik egy hozzáférési ponthoz, vagy false
értéket, ha nem.
WiFi.isConnected()
Konfigurálja a modult úgy, hogy a bekapcsoláskor automatikusan csatlakozzon az utoljára használt hozzáférési ponthoz.
WiFi.setAutoConnect(autoConnect)
Az autoConnect
opcionális paraméter. Ha false
értékre van állítva, az automatikus csatlakozási funkció le lesz tiltva. Ha kihagyja vagy true
-ra állítja, akkor az automatikus csatlakozás engedélyezve lesz.
Ez "társ" funkció a setAutoConnect()
-hez. true
értéket ad vissza, ha a modul úgy van beállítva, hogy bekapcsoláskor automatikusan csatlakozzon az utoljára használt hozzáférési ponthoz.
WiFi.setAutoConnect(autoConnect)
Ha az automatikus csatlakozás funkció le van tiltva, akkor a függvény false
értéket ad vissza.
Beállítja, hogy a modul megkíséreljen-e újracsatlakozni egy hozzáférési ponthoz, ha megszakad.
WiFi.setAutoReconnect(autoReconnect)
Ha az autoReconnect
paraméter true
ra van állítva, akkor a modul megpróbálja visszaállítani a megszakadt kapcsolatot az AP-vel. Ha false
értékre van állítva, akkor a modul leválasztva marad.
Megjegyzés: A setAutoReconnect(true)
futtatásakor, ha a modul már le van választva, nem csatlakozik újra a hozzáférési ponthoz. Ehelyett a reconnect()
-et kell használni.
Várja meg, amíg a modul csatlakozik a hozzáférési ponthoz. Ez a funkció az állomás vagy állomás + soft hozzáférési pont módban konfigurált modulokhoz használható.
WiFi.waitForConnectResult()
A függvény a következő kapcsolati állapotok egyikét adja vissza:
WL_CONNECTED
a sikeres kapcsolat létrehozása utánWL_NO_SSID_AVAIL
arra az esetre, ha a konfigurált SSID nem érhető elWL_CONNECT_FAILED
, ha a csatlakozás sikertelenWL_CONNECT_WRONG_PASSWORD
, ha a jelszó helytelenWL_IDLE_STATUS
, amikor a Wi-Fi állapotok közötti váltás folyamatban vanWL_DISCONNECTED
, ha a modul nincs állomás módban konfigurálva-1
időtúllépéskorBeszerezi az ESP állomás interfészének MAC-címét.
WiFi.macAddress(mac)
A függvény a mac
-kel, amely egy memóriahelyre mutató pointer (6 elemből álló uint8_t
tömb) biztosítja a helyet a mac-cím mentéséhez. Ugyanezt a mutatóértéket adja vissza maga a függvény.
Példakód:
if (WiFi.status() == WL_CONNECTED)
{
uint8_t macAddr[6];
WiFi.macAddress(macAddr);
Serial.printf("Connected, mac address: %02x:%02x:%02x:%02x:%02x:%02x\n", macAddr[0], macAddr[1], macAddr[2],
macAddr[3], macAddr[4], macAddr[5]);
}
A példa kimenete:
Mac address: 5C:CF:7F:08:11:17
Ha nem érzi jól magát a mutatókkal, akkor ennek a funkciónak opcionális verziója is elérhető. A mutató helyett egy formázott karakterláncot ad vissza, amely ugyanazt a mac-címet tartalmazza.
WiFi.macAddress()
Példakód:
if (WiFi.status() == WL_CONNECTED)
{
Serial.printf("Connected, mac address: %s\n", WiFi.macAddress().c_str());
}
Az ESP állomás interfészének IP-címének megszerzésére használt funkció.
WiFi.localIP()
A visszaadott érték típusa: IPAddress. Néhány módszer áll rendelkezésre az ilyen típusú adatok megjelenítésére. Az alábbi példák jól bemutatják az IPAddress-t visszaadó subnetMask, gatewayIP és dnsIP leírását.
Példakód:
if (WiFi.status() == WL_CONNECTED)
{
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}
A példa kimenete:
Connected, IP address: 192.168.1.10
Beszerezi az állomás interfészének alhálózati maszkját.
WiFi.subnetMask()
Az alhálózati maszk beszerzéséhez a modult a hozzáférési ponthoz kell csatlakoztatni.
Példakód:
Serial.print("Subnet mask: ");
Serial.println(WiFi.subnetMask());
A példa kimenete:
Subnet mask: 255.255.255.0
Beszerezi az átjáró IP-címét.
WiFi.gatewayIP()
Példakód:
Serial.printf("Gataway IP: %s\n", WiFi.gatewayIP().toString().c_str());
A példa kimenete:
Gataway IP: 192.168.1.9
Beszerezi a Domain Name Servers (DNS) IP-címeit.
WiFi.dnsIP(dns_no)
A dns_no
bemeneti paraméterrel megadhatjuk, hogy melyik Domain Name Server IP-jére van szükségünk. Ez a paraméter nulla alapú, és az engedélyezett értékek semmi, 0 vagy 1. Ha nincs megadva paraméter, akkor a DNS #1 IP-címe kerül visszaadásra.
Példakód:
Serial.print("DNS #1, #2 IP: ");
WiFi.dnsIP().printTo(Serial);
Serial.print(", ");
WiFi.dnsIP(1).printTo(Serial);
Serial.println();
A példa kimenete:
DNS #1, #2 IP: 62.179.1.60, 62.179.1.61
Beszerezi az ESP-állomáshoz rendelt DHCP-állomásnevet.
WiFi.hostname()
A függvény String
típust ad vissza. Az alapértelmezett gazdagépnév ESP_24xMAC formátumban van, ahol a 24xMAC a modul MAC-címének utolsó 24 bitje.
A gazdagépnév a következő funkcióval módosítható:
WiFi.hostname(aHostname)
Az aHostname
bemeneti paraméter lehet char*
, const char*
vagy String
. A hozzárendelt gazdagépnév maximális hossza 32 karakter. A függvény az eredménytől függően true
vagy false
értéket ad vissza. Például, ha túllépi a 32 karakteres korlátot, a függvény false
értéket ad vissza az új gazdagépnév hozzárendelése nélkül.
Példakód:
Serial.printf("Default hostname: %s\n", WiFi.hostname().c_str());
WiFi.hostname("Station_Tester_02");
Serial.printf("New hostname: %s\n", WiFi.hostname().c_str());
A példa kimenete:
Default hostname: ESP_081117
New hostname: Station_Tester_02
A Wi-Fi kapcsolat állapotát adja vissza.
WiFi.status()
A függvény a következő kapcsolati állapotok egyikét adja vissza:
WL_NO_SHIELD
= 255, a WiFi Shield könyvtárral való kompatibilitás érdekébenWL_IDLE_STATUS
= 0, amikor a Wi-Fi állapotok közötti váltás folyamatban vanWL_NO_SSID_AVAIL
= 1, arra az esetre, ha a konfigurált SSID nem érhető elWL_SCAN_COMPLETED
= 2, a keresés befejeződöttWL_CONNECTED
= 3, a sikeres kapcsolat létrehozása utánWL_CONNECT_FAILED
= 4, ha a csatlakozás sikertelenWL_CONNECTION_LOST
= 5, ha a kapcsolat megszakadtWL_CONNECT_WRONG_PASSWORD
= 6, ha a jelszó helytelenWL_DISCONNECTED
= 7, ha a modul nincs állomás módban konfigurálvaA visszaadott érték típusa wl_status_t
, amely a wl_definitions.h fájlban van definiálva
Példakód:
#include <ESP8266WiFi.h>
const char* ssid = "********";
const char* password = "********";
void setup(void)
{
Serial.begin(115200);
Serial.printf("Connection status: %d\n", WiFi.status());
Serial.printf("Connecting to %s\n", ssid);
WiFi.begin(ssid, password);
Serial.printf("Connection status: %d\n", WiFi.status());
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.printf("\nConnection status: %d\n", WiFi.status());
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {}
A példa kimenete:
Connection status: 7
Connecting to sensor-net
Connection status: 7
......
Connection status: 3
Connected, IP address: 192.168.1.10
A 7-es és 3-as kapcsolati állapotok a következőképpen nézhetők meg a wl_definitions.h fájlban:
3 - WL_CONNECTED
7 - WL_DISCONNECTED
E példa alapján a fenti kód futtatásakor a modul kezdetben nem csatlakozik a hálózathoz, és a 7 - WL_DISCONNECTED
kapcsolati állapotot adja vissza. A WiFi.begin(ssid, password)
futtatása után azonnal szintén nincs kapcsolat. Ezután körülbelül 3 másodperc elteltével (az 500 ms-onként megjelenő pontok száma alapján) végül csatlakozik, és a 3 – WL_CONNECTED
állapotot adja vissza.
Visszaadja a Wi-Fi hálózat nevét, amelyet hivatalosan Service Set Identification (SSID)-nek hívnak.
WiFi.SSID()
A visszaadott érték String
típusú.
Példakód:
Serial.printf("SSID: %s\n", WiFi.SSID().c_str());
A példa kimenete:
SSID: sensor-net
Visszaadja a Wi-Fi hálózathoz társított jelenlegi, előre megosztott kulcsot (jelszót).
WiFi.psk()
A visszaadott érték String
típusú.
Visszaadja annak a hozzáférési pontnak a mac-címét, amelyhez az ESP-modult a csatlakozáshoz irányították. Ezt a címet hivatalosan Basic Service Set Identification (BSSID)-nek hívják. A visszaadott mutató az, amit a felhasználó beállított a begin() bssid argumentummal történő meghívásakor. Ez nem feltétlenül tükrözi annak a hozzáférési pontnak a mac-címét, amelyhez az ESP modul állomás interfésze jelenleg csatlakozik.
WiFi.BSSID()
A BSSID()
függvény egy mutatót ad vissza arra a memóriahelyre (egy uint8_t
tömbre, amely 6 elemből áll), ahová a BSSID mentve van.
String
típusként.
WiFi.BSSIDstr()
Példakód:
Serial.printf("BSSID: %s\n", WiFi.BSSIDstr().c_str());
A példa kimenete:
BSSID: 00:1A:70:DE:C1:68
Visszaadja a Wi-Fi hálózat jelerősségét, amelyet hivatalosan Received Signal Strength Indication (RSSI)-nek hívnak.
WiFi.RSSI()
A jelerősség értéke dBm-ben van megadva. A visszaadott érték típusa int32_t
.
Példakód:
Serial.printf("RSSI: %d dBm\n", WiFi.RSSI());
A példa kimenete:
RSSI: -68 dBm
Az ESP8266 SDK alternatív módszereket kínál az ESP-állomás hozzáférési ponthoz való csatlakoztatására. Közülük az esp8266 / Arduino mag a WPS-t és a Smart Config-ot valósítja meg, amint azt az alábbiakban részletesen ismertetjük.
A következő beginWPSConfig
funkció lehetővé teszi a hálózathoz való csatlakozást a Wi-Fi Protected Setup (WPS) használatával. Jelenleg csak a nyomógombos konfiguráció (WPS_TYPE_PBC
mód) támogatott (SDK 1.5.4).
WiFi.beginWPSConfig()
A kapcsolat eredményétől függően a függvény true
vagy false
értéket ad vissza (boolean
típusú).
Példakód:
#include <ESP8266WiFi.h>
void setup(void)
{
Serial.begin(115200);
Serial.println();
Serial.printf("Wi-Fi mode set to WIFI_STA %s\n", WiFi.mode(WIFI_STA) ? "" : "Failed!");
Serial.print("Begin WPS (press WPS button on your router) ... ");
Serial.println(WiFi.beginWPSConfig() ? "Success" : "Failed");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {}
A példa kimenete:
Wi-Fi mode set to WIFI_STA
Begin WPS (press WPS button on your router) ... Success
.........
Connected, IP address: 192.168.1.102
Az ESP modul és a hozzáférési pont Smart Config kapcsolata speciális csomagok lekérdezésével történik, amelyek tartalmazzák a kívánt AP SSID-jét és jelszavát. Ehhez a mobileszköznek vagy számítógépnek rendelkeznie kell a kódolt SSID és jelszó sugárzásának funkciójával.
A következő három funkció érhető el a Smart Config megvalósításához.
Indítsa el az intelligens konfigurációs módot a kívánt hozzáférési pont SSID azonosítóját és jelszavát tartalmazó speciális csomagok megkeresésével. Az eredménytől függően true
vagy false
értéket ad vissza.
beginSmartConfig()
A Smart Config állapotának lekérdezése annak eldöntéséhez, hogy mikor kell leállítani a konfigurációt. A függvény boolean típusú true
vagy false
értéket ad vissza.
smartConfigDone()
Leállítja a Smart Config, felszabadítja a beginSmartConfig() által lefoglalt puffert. Az eredmény függvényében a függvény true
vagy false
, boolean típusú értéket ad vissza.
stopSmartConfig()
A Smart Config funkcióval kapcsolatos további részletekért tekintse meg az ESP8266 API felhasználói kézikönyvét.
© Copyright 2017, Ivan Grokhotkov Revision 02c1a502. Fordította: Maczák András