Az ESP8266 a Wi-Fi-ről szól. Ha szívesen csatlakoztatná új ESP8266 modulját egy Wi-Fi hálózathoz, hogy elkezdhesse az adatok küldését és fogadását, akkor ez egy jó kiindulópont. Ha mélyebb részleteket keres egy adott Wi-Fi hálózati funkció programozásával kapcsolatban, akkor szintén jó helyen jár.
Az ESP8266 Wi-Fi könyvtárát az ESP8266 SDK alapján fejlesztették ki, az Arduino WiFi könyvtár elnevezési konvencióit és általános funkcionalitási filozófiáját alkalmazva. Idővel az ESP8266 SDK-ról az esp8266 / Arduino-ra portolt Wi-Fi funkciók gazdagsága túlnőtt az Arduino WiFi könyvtáron, és nyilvánvalóvá vált, hogy külön dokumentációt kell biztosítanunk az újdonságokról és az extra dolgokról.
Ez a dokumentáció végigvezeti az ESP8266WiFi könyvtár több osztályán, módszerén és tulajdonságán. Ha új a C++ és az Arduino használatában, ne aggódjon. Az általános fogalmaktól kezdjük, majd áttérünk az egyes osztályok tagjainak részletes leírására, beleértve a használati példákat is.
Az ESP8266WiFi könyvtár által kínált funkciók hatóköre meglehetősen széles, ezért ezt a leírást különálló dokumentumokra bontottuk, amelyek :arrow_right: jellel vannak megjelölve.
Remélhetőleg már ismeri a Blink.ino vázlat betöltését az ESP8266 modulba, és a LED villogtatását. Ha nem, kérjük, használja az Adafruit oktatóanyagát vagy a Sparkfun által kifejlesztett oktatóanyagot.
Az ESP modul Wi-Fi-hez való csatlakoztatásához (például mobiltelefon hot spothoz történő csatlakoztatásához) mindössze néhány sornyi kódra van szüksége:
#include <ESP8266WiFi.h>
void setup()
{
Serial.begin(115200);
Serial.println();
WiFi.begin("network-name", "pass-to-network");
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {}
A WiFi.begin("network-name", "pass-to-network")
sorban cserélje ki a network-name
és a pass-to-network
elemet annak a Wi-Fi-hálózatnak a nevére és jelszavára, amelyhez csatlakozni szeretne. Ezután töltse fel ezt a vázlatot az ESP modulba, és nyissa meg a soros monitort. Valami ilyesmit kellene látnia:
A vázlat első sorában, #include <ESP8266WiFi.h>
, az ESP8266WiFi könyvtárat foglaljuk bele. Ez a könyvtár ESP8266-specifikus Wi-Fi-rutinokat biztosít, amelyeket a hálózathoz való csatlakozáshoz hívunk meg.
A tényleges Wi-Fi-kapcsolat inicializálása a következő hívással történik:
WiFi.begin("network-name", "pass-to-network");
A csatlakozási folyamat eltarthat néhány másodpercig, és a következő ciklusban ellenőrizzük, hogy ez befejeződött-e:
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
A while()
ciklus addig folytatódik, amíg a WiFi.status()
nem lesz WL_CONNECTED
. A ciklus csak akkor lép ki, ha az állapot WL_CONNECTED
-re változik.
Az utolsó sor ezután kiírja a DHCP által az ESP modulhoz rendelt IP-címet:
Serial.println(WiFi.localIP());
Ha nem látja az utolsó sort, csak egyre több pontot .........
, akkor a Wi-Fi hálózat neve vagy jelszava valószínűleg helytelenül lett megadva a vázlatban. Ellenőrizze a nevet és a jelszót úgy, hogy újra csatlakozik ehhez a Wi-Fi hálózathoz számítógépével vagy mobiltelefonjával.
Megjegyzés: ha a kapcsolat létrejön, majd valamilyen oknál fogva megszakad, az ESP automatikusan újracsatlakozik az utoljára használt hozzáférési ponthoz, amint az ismét online lesz. Ezt a Wi-Fi könyvtár automatikusan elvégzi, felhasználói beavatkozás nélkül.
Ez minden, amire szüksége van az ESP8266 Wi-Fi-hez való csatlakoztatásához. A következő fejezetekben elmagyarázzuk, milyen nagyszerű dolgokat tud végrehajtani az ESP, miután csatlakoztatta.
A Wi-Fi hálózatokhoz csatlakozó eszközöket állomásoknak (STA) nevezzük. A Wi-Fi-hez való csatlakozást egy hozzáférési pont (AP) biztosítja, amely egy vagy több állomás hubjaként működik. A másik végén lévő hozzáférési pont vezetékes hálózathoz csatlakozik. A hozzáférési pont általában egy útválasztóba van integrálva, hogy hozzáférést biztosítson a Wi-Fi hálózatról az internethez. Minden hozzáférési pontot egy SSID (Service Set Identifier) ismer fel, amely lényegében annak a hálózatnak a neve, amelyet akkor választ ki, amikor egy eszközt (állomást) csatlakoztat a Wi-Fi-hez.
Az ESP8266 modulok állomásként is működhetnek, így csatlakoztathatjuk a Wi-Fi hálózathoz. Soft hozzáférési pontként (soft-AP) is működhet, saját Wi-Fi hálózat létrehozásához. Amikor az ESP8266 modul soft hozzáférési pontként működik, más állomásokat is csatlakoztathatunk az ESP modulhoz. Az ESP8266 állomásként és soft hozzáférési pontként is képes működni. Ez lehetőséget ad pl. mesh hálózatok felépítéséhez.
Az ESP8266WiFi könyvtár a C++ metódusok (függvények) és tulajdonságok széles gyűjteményét kínálja az ESP8266 modul állomás és/vagy soft access point módban történő konfigurálásához és működtetéséhez. Ezeket a következő fejezetekben ismertetjük.
Az ESP8266WiFi könyvtár több osztályra oszlik. A legtöbb esetben a kód írásakor a felhasználót nem érdekli ez a besorolás. Arra használjuk, hogy a könyvtár leírását jobban kezelhető részekre bontsuk.
Az alábbi fejezetek leírják az ESP8266WiFi egyes osztályaiban felsorolt összes függvényhívást (a C++-ban metódusokat és tulajdonságokat). A leírást alkalmazási példák és kódrészletek illusztrálják, amelyek bemutatják a függvények gyakorlati használatát. Ez az információ van szétosztva a következő dokumentumokban.
Az állomás (STA) mód arra szolgál, hogy az ESP modul csatlakozzon egy hozzáférési pont által létrehozott Wi-Fi hálózathoz.
Az állomás osztály számos olyan funkcióval rendelkezik, amelyek megkönnyítik a Wi-Fi kapcsolat kezelését. Ha a kapcsolat megszakad, az ESP8266 automatikusan újracsatlakozik az utoljára használt hozzáférési ponthoz, amint az ismét elérhető. Ugyanez történik a modul újraindításakor. Ez azért lehetséges, mert az ESP a hitelesítő adatokat az utoljára használt hozzáférési ponthoz menti a flash (nem felejtő) memóriában. A mentett adatok használatával az ESP akkor is újracsatlakozik, ha a vázlat módosult, de a kód nem módosítja a Wi-Fi módot vagy a hitelesítési adatokat.
Az állomás osztály dokumentációja
Tekintse meg a külön fejezetet példákkal.
A hozzáférési pont (Access Point = AP) olyan eszköz, amely hozzáférést biztosít a Wi-Fi hálózathoz más eszközök (állomások) számára, és összeköti őket egy vezetékes hálózattal. Az ESP8266 hasonló funkciókat tud nyújtani, kivéve, hogy nincs interfésze a vezetékes hálózathoz. Az ilyen üzemmódot soft access point-nak, soft hozzáférési pontnak, (soft-AP) nevezzük. A soft-AP-hez egyidejűleg csatlakoztatható állomások maximális száma 0 és 8 között állítható be, de az alapértelmezés szerint 4.
A soft-AP módot gyakran használják, és közbenső lépésként, mielőtt az ESP-t Wi-Fi-hez csatlakoztatnák állomás módban. Ilyenkor az ilyen hálózathoz tartozó SSID és jelszó nem ismert előre. Az ESP először soft-AP módban indul el, így laptop vagy mobiltelefon segítségével csatlakozhatunk hozzá. Ezután hitelesítő adatokat tudunk biztosítani a célhálózat számára. Ezután az ESP állomás módba kapcsol, és csatlakozhat a cél Wi-Fi-hez.
A soft-AP mód másik praktikus alkalmazása a mesh hálózatok beállítása. Az ESP soft-AP és állomás módban is működhet, így egy mesh hálózat csomópontjaként működhet.
A Soft Access Point osztály dokumentációja
Tekintse meg a különálló részt példákkal.
Ha mobiltelefont hot spothoz szeretne csatlakoztatni, általában meg kell nyitnia a Wi-Fi beállítások alkalmazást, listáznia kell az elérhető hálózatokat, és kiválaszthatja a kívánt hot spotot. Ezután írjon be egy jelszót (vagy ne), és már be is léphet. Ugyanezt megteheti az ESP-vel is. A hatótávolságon belül elérhető hálózatok keresésének és listázásának funkcióját a Scan Class valósítja meg.
Tekintse meg a külön fejezetet példákkal.
A Client osztály olyan ügyfeleket hoz létre, amelyek hozzáférhetnek a szerverek által nyújtott szolgáltatásokhoz adatok küldése, fogadása és feldolgozása érdekében.
Tekintse meg a külön fejezetet a funkciók listájával
Az ESP8266WiFiMulti.h segítségével a legerősebb WiFi jellel (RSSI) rendelkező WiFi hálózathoz csatlakozhat. Ehhez egy vagy több hozzáférési pont regisztrálása szükséges SSID-vel és jelszóval. A WiFi kapcsolat megszakadásakor automatikusan másik WiFi hálózatra vált.
Példa:
#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti wifiMulti;
// WiFi connect timeout per AP. Increase when connecting takes longer.
const uint32_t connectTimeoutMs = 5000;
void setup()
{
// Set in station mode
WiFi.mode(WIFI_STA);
// Register multi WiFi networks
wifiMulti.addAP("ssid_from_AP_1", "your_password_for_AP_1");
wifiMulti.addAP("ssid_from_AP_2", "your_password_for_AP_2");
wifiMulti.addAP("ssid_from_AP_3", "your_password_for_AP_3");
}
void loop()
{
// Maintain WiFi connection
if (wifiMulti.run(connectTimeoutMs) == WL_CONNECTED) {
...
}
}
A BearSSL::WiFiClientSecure és a BearSSL::WiFiServerSecure a szabványos Client és Server osztályok kiterjesztései, ahol a kapcsolat és adatcsere biztonságos protokollt használ a szerverekkel és kliensekkel. Támogatja a TLS 1.2-t a modern titkosítások, hash-ek és kulcstípusok széles skálájával.
A biztonságos ügyfelek és szerverek jelentős mennyiségű további memóriát és feldolgozást igényelnek a titkosítási algoritmusaik engedélyezéséhez. Általánosságban elmondható, hogy egyszerre csak egyetlen biztonságos kliens- vagy kiszolgálókapcsolat dolgozható fel, mivel az ESP8266-on kevés RAM van jelen, de vannak módszerek ennek a RAM-igénynek a csökkentésére, amelyet a vonatkozó szakaszokban részletezünk.
A BearSSL::WiFiClientSecure további információkat tartalmaz a TLS-kapcsolatok használatáról és konfigurálásáról.
A BearSSL::WiFiServerSecure az elérhető TLS-kiszolgálómódot tárgyalja. Kérjük, először olvassa el és értse meg a BearSSL::WiFiClientSecure-t, mivel a szerver ugyanazokat a fogalmakat használja.
Tekintse meg a külön fejezetet példákkal.
A Server osztály olyan szervereket hoz létre, amelyek funkcionalitást biztosítanak más programok vagy eszközök számára, amelyeket klienseknek neveznek.
Az ügyfelek csatlakoznak a szerverhez, hogy adatokat küldjenek és fogadjanak, és hozzáférjenek a biztosított funkciókhoz.
Tekintse meg a külön fejezetet példákkal / funkciók listájával.
Az UDP osztály lehetővé teszi a User Datagram Protocol (UDP) üzenetek küldését és fogadását. Az UDP egy egyszerű "tűz és felejts el" átviteli modellt használ, amely nem garantálja a szállítást, a rendelést vagy a duplikált védelmet. Az UDP ellenőrző összegeket biztosít az adatok integritásához, és portszámokat biztosít a különböző funkciók címzéséhez a datagram forrásánál és célállomásánál.
Tekintse meg a külön fejezetet példákkal / funkciók listájával.
Az ESP8266 SDK számos olyan funkciót kínál, amelyek nincsenek jelen az Arduino WiFi könyvtárban. Ha egy ilyen funkció nem illeszkedik a fent tárgyalt osztályok egyikébe, akkor valószínűleg a Generic osztályba tartozik. Ezek közé tartozik a Wi-Fi események kezelésére szolgáló kezelő, mint a csatlakozás, a kapcsolat megszakítása vagy az IP megszerzése, a Wi-Fi mód megváltoztatása, a modul alvó üzemmódjának kezelésére szolgáló funkciók, a gazdagépnév az IP-cím felbontásához stb.
Tekintse meg a külön fejezetet példákkal / funkciók listájával.
Számos technika áll rendelkezésre a Wi-Fi-csatlakozással és a kapcsolat életben tartásával kapcsolatos problémák diagnosztizálására és hibaelhárítására.
A fenti fejezetekben leírt szinte mindegyik függvény visszaad bizonyos diagnosztikai információkat.
Az ilyen diagnosztika beszerezhet egyszerű boolean
típusút, true
vagy false
, a művelet eredményének jelzésére. Ezt az eredményt a példákban leírtak szerint ellenőrizheti, például:
Serial.printf("Wi-Fi mode set to WIFI_STA %s\n", WiFi.mode(WIFI_STA) ? "" : "Failed!");
Egyes funkciók nem csak egy bináris állapotinformációt nyújtanak. Jó példa erre a WiFi.status()
.
Serial.printf("Connection status: %d\n", WiFi.status());
Ez a funkció a következő kódokat adja vissza, hogy leírja, mi történik a Wi-Fi kapcsolattal:
WL_IDLE_STATUS
, amikor a Wi-Fi állapotok közötti váltás folyamatban vanWL_NO_SSID_AVAIL
, ha a konfigurált SSID nem érhető elWL_CONNECTED
, a sikeres kapcsolat létrehozása utánWL_CONNECT_FAILED
, ha a csatlakozás sikertelenWL_CONNECT_WRONG_PASSWORD
, ha a jelszó helytelenWL_DISCONNECTED
, ha a modul nincs állomás módban konfigurálvaJó gyakorlat a függvények által visszaadott információk megjelenítése és ellenőrzése. Az alkalmazásfejlesztés és a hibaelhárítás ezzel egyszerűbb lesz.
Egy speciális funkció áll rendelkezésre a kulcsfontosságú Wi-Fi diagnosztikai információk kinyomtatására:
WiFi.printDiag(Serial);
Ennek a függvénynek a minta kimenete a következőképpen néz ki:
Mode: STA+AP
PHY mode: N
Channel: 11
AP id: 0
Status: 5
Auto connect: 1
SSID (10): sensor-net
Passphrase (12): 123!$#0&*esP
BSSID set: 0
Ezzel a funkcióval pillanatképet készíthet a Wi-Fi állapotáról az alkalmazáskód ezen részeiben, amelyekről úgy gondolja, hogy meghibásodásról van szó.
A Serial.begin
meghívásakor a Wi-Fi-könyvtárak diagnosztikai kimenete alapértelmezés szerint le van tiltva. A hibakeresési kimenet ismételt engedélyezéséhez hívja a Serial.setDebugOutput(true)
parancsot. A hibakeresési kimenet Serial1-re való átirányításához hívja a Serial1.setDebugOutput(true)
parancsot. A diagnosztikához használt soros portokkal kapcsolatos további részletekért tekintse meg a dokumentációt.
Az alábbiakban egy példa a Serial.setDebugOutput(true)
paraméterrel tárgyalt mintavázlat kimenetére:
Connectingscandone
state: 0 -> 2 (b0)
state: 2 -> 3 (0)
state: 3 -> 5 (10)
add 0
aid 1
cnt
connected with sensor-net, channel 6
dhcp client start...
chg_B1:-40
...ip:192.168.1.10,mask:255.255.255.0,gw:192.168.1.9
.
Connected, IP address: 192.168.1.10
Ugyanez a vázlat Serial.setDebugOutput(true)
nélkül csak a következőket nyomtatja ki:
Connecting....
Connected, IP address: 192.168.1.10
Az Arduino IDE kényelmes módszert biztosít bizonyos könyvtárak hibakeresésének engedélyezéséhez.
© Copyright 2017, Ivan Grokhotkov Revision 6c8c8cb2. Fordította: Maczák András 2022.