Általános (Generic)

Az ESP8266WiFi könyvtár dokumentációjának első példájában megbeszéltük, hogyan ellenőrizhető, hogy a modul mikor csatlakozik a Wi-Fi hálózathoz. Vártuk, amíg létrejön a kapcsolat. Ha a hálózat nem elérhető, a modul várhat így, és soha többé nem csinál mást. Egy másik példa a Wi-Fi aszinkron szkennelési módban bemutatta, hogyan kell megvárni a szkennelés eredményét, és ezzel párhuzamosan valami mást kell tenni – villogni egy LED-et, amely nem zavarja a villogási mintát. Alkalmazzuk hasonló funkcionalitást, amikor a modult hozzáférési ponthoz csatlakoztatjuk.


Tartalomjegyzék


Bevezetés

Az alábbi példában egy másik nagyszerű példát mutatunk be arra, hogy az ESP néhány feladatot egyszerre és nagyon kevés programozással hajtson végre.


Mik azok a taszkok?

Szeretnénk írni egy kódot, amely tájékoztat minket, hogy létrejött vagy megszakadt a kapcsolat a Wi-Fi hálózattal. Ugyanakkor szeretnénk néhány időkritikus feladatot elvégezni. Villogó LED-del szimuláljuk. Az általános osztály specifikus, eseményvezérelt metódusokat biztosít, amelyek aszinkron módon futnak, attól függően, hogy pl. kapcsolat állapotát, miközben már más feladatokat végzünk.


Eseményvezérelt metódusok

Az összes ilyen metódus listája az Általános osztály dokumentációjában található.

Ezek közül kettőt szeretnénk használni: * az onStationModeGotIP meghívása, amikor az állomáshoz IP-cím van hozzárendelve. Ezt a hozzárendelést elvégezheti a DHCP kliens vagy a WiFi.config(...) futtatása. * onStationModeDisconnected hívja, ha az állomás le van választva a Wi-Fi hálózatról. A lekapcsolás oka nem számít. Az esemény akkor is aktiválódik, ha a kódról a WiFi.disconnect() végrehajtásával megszakad a kapcsolat, mert gyenge a Wi-Fi jel, vagy ha a hozzáférési pont ki van kapcsolva.


Az események regisztrálása

Az események működéséhez mindössze két lépést kell végrehajtanunk:

Ha ez az esemény aktiválódik, a kód kinyomtatja az állomás lekapcsolásáról szóló információt.

Ez az. Ez minden, amit tennünk kell.


A kód

A teljes kód, beleértve az elején tárgyalt mindkét módszert, alább található.


#include <ESP8266WiFi.h>

const char* ssid = "********";
const char* password = "********";

WiFiEventHandler gotIpEventHandler, disconnectedEventHandler;

bool ledState;


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

  pinMode(LED_BUILTIN, OUTPUT);

  gotIpEventHandler = WiFi.onStationModeGotIP([](const WiFiEventStationModeGotIP& event)
  {
    Serial.print("Station connected, IP: ");
    Serial.println(WiFi.localIP());
  });

  disconnectedEventHandler = WiFi.onStationModeDisconnected([](const WiFiEventStationModeDisconnected& event)
  {
    Serial.println("Station disconnected");
  });

  Serial.printf("Connecting to %s ...\n", ssid);
  WiFi.begin(ssid, password);
}


void loop()
{
  digitalWrite(LED_BUILTIN, ledState);
  ledState = !ledState;
  delay(250);
}


A kód ellenőrzése

A fenti vázlat feltöltése és egy soros monitor megnyitása után hasonló naplót kell látnunk:


Connecting to sensor-net ...
Station connected, IP: 192.168.1.10

Ha kikapcsolja, majd visszahelyezi a hozzáférési pontot, a következőket fogja látni:


Station disconnected
Station disconnected
Station disconnected
Station connected, IP: 192.168.1.10

A csatlakozás, a leválasztás és az üzenetek nyomtatása a loop() hátterében történik, amely a LED villogásáért felelős. Ezért a pislogási minta állandóan zavartalan marad.


Következtetés

Nézze meg az általános osztály eseményeit. Segítenek kompaktabb kódot írni. Használja őket arra, hogy gyakorolja a kód felosztását aszinkron módon végrehajtott különálló feladatokra.

Az általános osztályba tartozó funkciók áttekintését az Általános osztály dokumentációjában találja.


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