Általános (Generic) osztály

Az ebben a részben leírt módszerek és tulajdonságok az ESP8266-ra vonatkoznak. Az Arduino WiFi könyvtár dokumentációja nem foglalkozik velük. Mielőtt teljes körűen dokumentálnák, olvassa el az alábbi információkat.


onEvent


void onEvent(WiFiEventCb cb, WiFiEvent_t event=WIFI_EVENT_ANY) __attribute__((deprecated))


WiFiEventHandler


WiFiEventHandler  onStationModeConnected (std::function< void(const WiFiEventStationModeConnected &)>)
WiFiEventHandler  onStationModeDisconnected (std::function< void(const WiFiEventStationModeDisconnected &)>)
WiFiEventHandler  onStationModeAuthModeChanged 
                    (std::function< void(const WiFiEventStationModeAuthModeChanged &)>)
WiFiEventHandler  onStationModeGotIP (std::function< void(const WiFiEventStationModeGotIP &)>)
WiFiEventHandler  onStationModeDHCPTimeout (std::function< void(void)>)
WiFiEventHandler  onSoftAPModeStationConnected 
                    (std::function< void(const WiFiEventSoftAPModeStationConnected &)>)
WiFiEventHandler  onSoftAPModeStationDisconnected 
                    (std::function< void(const WiFiEventSoftAPModeStationDisconnected &)>)

Meg kell jegyezni, hogy amikor egy WiFi interfész leáll, az összes WiFiClients leáll, és az összes WiFiServer leáll. Amikor megjelenik az interfész, a felhasználó feladata, hogy újra csatlakoztassa a megfelelő WiFi-klienseket, és visszaállítsa a WiFi-kiszolgálókat. A WiFi állomás interfészéhez javasoljuk, hogy állítson be egy visszahívást az onStationModeDisconnected() számára, amely leállítja a felhasználói alkalmazás WiFi-klienseit és WiFi-kiszolgálóit (erőforrás-tisztítás), és egy másik visszahívást az onStationModeGotIP()-hez, amely visszaállítja őket. A SoftAP interfésznél, amikor az interfész megjelenik, minden szervert is elő kell hozni.

A WiFiEventHandler részletes magyarázata a példákat tartalmazó részben található: arrow_right: kifejezetten az Általános osztálynak szentelve.

Alternatív megoldásként ellenőrizze az ESP8266WiFi könyvtár példamappájában elérhető WiFiEvents.ino példavázlatot.


persistent


WiFi.persistent(persistent)

A mag 3-as verziójától kezdődően a perzisztencia alapértelmezés szerint le van tiltva, és a WiFi nem indul el automatikusan rendszerindításkor (lásd: PR #7902).

Korábban az SDK automatikusan elindította a WiFi-t rendszerindításkor. Ezt valószínűleg az Espressif AT FW-hez szánták, amely interaktív és megőrzi a WiFi állapotát az újraindítások során. Ez a viselkedés általában irreleváns az Arduino API esetében, mivel a vázlatok a WiFi.begin() vagy WiFi.softAP() utasításokkal kezdődnek.

Ez a változás a szabványos vázlatokkal ártalmatlan: a WiFi.mode() hívásai a szokásos módon engedélyezik a rádiót. Ezenkívül kisimítja az áramcsúcsokat a rendszerindításkor, és csökkenti a DHCP-feszültséget.

Az örökölt viselkedés visszaállítható az enableWiFiAtBootTime() meghívásával a kódban bárhonnan (ez egy gyenge void függvény, amely a linkerrel való lejátszásra szolgál).


#include <ESP8266WiFi.h>

void setup () {
#ifdef WIFI_IS_OFF_AT_BOOT
    enableWiFiAtBootTime(); // can be called from anywhere with the same effect
#endif
    ....
}

Amikor ennek a hívásnak köszönhetően helyreáll a régi viselkedés, az ESP8266 képes újra csatlakozni az utoljára használt WiFi hálózathoz, vagy ugyanazt a hozzáférési pontot hozza létre bekapcsoláskor vagy alaphelyzetbe állításkor. Alapértelmezés szerint ezek a beállítások a flash memória meghatározott szektoraiba íródnak minden alkalommal, amikor módosítják őket a WiFi.begin(ssid, passphrase) vagy a WiFi.softAP(ssid, passphrase, channel), illetve amikor a WiFi.disconnect vagy a WiFi.softAPdisconnect meghívásra kerül. E függvények gyakori meghívása a flash memória elhasználódását okozhatja (lásd az #1054-es problémát).

A WiFi.persistent(false) meghívása után a WiFi.begin, WiFi.disconnect, WiFi.softAP vagy WiFi.softAPdisconnect csak a memóriában lévő aktuális WiFi-beállításokat módosítja, és nincs hatással a flash memóriában tárolt WiFi-beállításokra.


mode


bool mode(WiFiMode_t m)

Átvált a normál WiFi módok egyikére, ahol m az egyik:

  1. WIFI_OFF: kapcsolja ki a WiFi-t.

  2. WIFI_STA: váltás Állomás (STA) módba.

  3. WIFI_AP: váltson Hozzáférési pont (AP) módba.

  4. WIFI_AP_STA: az állomás (STA) és a hozzáférési pont (AP) mód engedélyezése.


getMode


WiFiMode_t getMode()

Lekéri az aktuális WiFi módot (a fenti négy szabványos mód közül egyet).


WiFi power management, DTIM


bool setSleepMode (WiFiSleepType_t type, int listenInterval=0)

Az alvó mód típusa: WIFI_NONE_SLEEP, WIFI_LIGHT_SLEEP vagy WIFI_MODEM_SLEEP.

(A listenInterval az esp8266-arduino core v2.5.0-ban jelent meg a nonos-sdk V3 előtti utolsó V2-es verziójával).

Idézve a nonos-sdk adatlapot:

  1. NONE: kapcsolja ki az energiatakarékosságot.

  2. LIGHT vagy MODEM: A TCP időzítő sebessége 250 ms-tól 3 másodpercig emelkedhet

Ha a listenInterval értéke 1...10, LIGHT vagy MODEM módban az állomás minden (DTIM-intervallum * listenInterval) felébred. Ez energiát takarít meg, de előfordulhat, hogy az állomás interfésze kihagyja a sugárzott adatokat.

Ellenkező esetben (alapértelmezett érték 0) az állomás minden DTIM-intervallumban felébred (a hozzáférési pontban konfigurálva).

A Wikipédiát idézve:

A Delivery Traffic Indication Map (DTIM) egyfajta forgalmi jelzési térkép (TIM), amely tájékoztatja az ügyfeleket a pufferelt multicast/broadcast adatok jelenlétéről a hozzáférési ponton. A periodikus jeladón belül generálódik a DTIM intervallum által meghatározott frekvencián. A jeladók olyan csomagok, amelyeket egy hozzáférési pont küld a vezeték nélküli hálózat szinkronizálására.


setOutputPower


void WiFi.setOutputPower(float dBm)

Beállítja a maximális adási teljesítményt dBm-ben. Az értékek 0 és 20,5 [dBm] között mozognak, és 0,25 többszöröseinek kell lenniük. Ez lényegében egy vékony burkolat az SDK system_phy_set_max_tpw() API-hívása körül.

Ha a jelzaj miatt wifi kapcsolati problémák merülnek fel, próbálja meg csökkenteni a Tx teljesítményét. Ez hatékonynak bizonyult azokban az esetekben, amikor STA mód van használatban a 802.11n phy (alapértelmezett) szabvánnyal. Ha például 17,5 dBm-re vagy valamivel alacsonyabbra csökkenti, az csökkentheti a zajt és javíthatja a kapcsolatot, bár a maximális hatótávolság is csökken.


setPhyMode


bool  setPhyMode (WiFiPhyMode_t mode)

Beállítja a WiFi rádió phy módot. Az argumentum egy WiFiPhyMode_t típusú enum, az érvényes értékek: - WIFI_PHY_MODE_11B: 802.11b mód - WIFI_PHY_MODE_11G: 802.11g mód - WIFI_PHY_MODE_11N: 802.11n mód.

A NONOS SDK API-referencia dokumentuma szerint az AP mód csak a b/g-t támogatja, lásd a wifi_set_phy_mode() API-val kapcsolatos megjegyzéseket. True sikert ad vissza, egyébként false-t.

Egyes kísérletek kimutatták, hogy a 802.11b mód rendelkezik a leghosszabb LOS hatótávolsággal, míg a 802.11n mód a leghosszabb beltéri hatótávolsággal.

Megfigyelték, hogy egyes wifi-routerek 802.11n-ről g/b-re romolhatnak, ha egy ESP8266 g/b phy módban csatlakozik hozzájuk. Ez azt jelenti, hogy az összes eszköz teljes wifi-kapcsolatát érinti.


getPhyMode


WiFiPhyMode_t  getPhyMode (WiFiPhyMode_t mode)

Lekéri a jelenleg beállított WiFi rádió phy módját.


forceSleepBegin


bool  forceSleepBegin (uint32 sleepUs=0)

Menti az aktuálisan beállított WiFi módot, és a modem kényszeralvó állapotát elindítja a megadott időre (us).


forceSleepWake


bool  forceSleepWake ()

A forceSleepBegin() után meghívva. Visszaállítja az előző WiFi módot, és megkísérli az újracsatlakozást, amikor az STA aktív volt.


shutdown és resumeFromShutdown


bool  shutdown (WiFiState& state)
bool  shutdown (WiFiState& state, uint32 sleepUs)
bool  resumeFromShutdown (WiFiState& state)
bool  shutdownValidCRC (const WiFiState& state)

Tárolja az STA interfész IP-konfigurációját a megadott state struktúrában, és meghívja a forceSleepBegin(sleepUs) parancsot. Visszaállítja az STA interfész konfigurációját az state-ből, és meghívja a forceSleepWake() függvényt.

Ezeket a metódusokat kis fogyasztású forgatókönyvekben kívánják használni, pl. ahol az ESP.deepSleep az akkumulátor töltöttségi szintjének megőrzése érdekében a műveletek között használatos. A felhasználó felelőssége a WiFiState megőrzése a shutdown() és a resumeFromShutdown() között, az RTC felhasználói adatokban és/vagy a flash memóriában való tárolásával.

Használati példát a WiFiShutdown.ino oldalon talál.


Egyéb funkcióhívások


int32_t  channel (void)
WiFiSleepType_t  getSleepMode ()
bool  enableSTA (bool enable)
bool  enableAP (bool enable)
int  hostByName (const char *aHostname, IPAddress &aResult)

a V3 előtti SDK-val jelent meg:
uint8_t getListenInterval ();
bool isSleepLevelMax ();

A fenti funkciók dokumentációja még nem készült el.

A kódmintákért kérjük, olvassa el a külön szakaszt, amely kifejezetten az általános osztálynak szentelt példákat tartalmaz.


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