Práca so sieťou
Práca so sieťou na doske Raspberry Pi Pico W/H
Ako sme sa rozprávali, mikrokontrolér ESP32 je vybavený WiFi modulom s podporou štandardu 802.11 b/g/n a so štandardnou podporou bezpečnostných vlastností IEEE 802.11 ako sú WFA, WPA/WPA2_ a WAPI.
Mikrokontrolér vie dokonca pracovať ako Access Point. Tým pádom môže poskytovať pre ostatné zariadenia v sieti rozličné služby. Napríklad môže slúžiť ako webový server, ktorý bude poskytovať webové používateľské rozhranie pre ovládanie pripojených akčných členov alebo môže poskytovať len stavovú stránku s informáciami zozbieranými z pripojených senzorov.
The network
Module
Pre prácu so sieťou má ESP32 k dispozícii modul
network
. Pred začiatkom práce ho teda importneme:>>> import network
Následne vytvoríme WiFi sieťové rozhranie, ktoré bude pracovať v režime pracovnej stanice (z angl. station interface) a aktivujeme ho:
>>> wlan = network.WLAN(network.STA_IF) >>> wlan.active(True)
Následne sa môžeme pozrieť, aké bezdrôtové siete máme v dosahu:
>>> wlan.scan()
Výsledkom bude zoznam sietí s informáciami ako:
- SSID siete
- MAC adresa rozhrania
- sila signálu
- číslo kanála
Ak sa teda chceme k niektorej z nich pripojiť, potrebujem poznať SSID siete a heslo pre prístup k nej. Samotné pripojenie vykonáme pomocou volania metódy
.connect()
nad objektomwlan
:>>> wlan.connect('SSID', 'password')
Po (ne)úspešnom pripojení môžeme overiť stav pripojenia volaním metódy
.isconnected()
, ktorá vráti hodnotuTrue
, ak sme sa úspešne pripojili alebo hodnotuFalse
, ak nie. Nastavenie pripojenia vieme overiť volaním metódy.ifconfig()
:>>> wlan.isconnected() True >>> wlan.ifconfig() '192.168.1.128', '255.255.255.0', '192.168.1.1', '192.168.1.1') (
Len pre úplnosť je možné dodať, že MAC adresu zariadenia môžeme získať takto:
>>> wlan.config('mac') b'`\x01\x94\x1b\xf7\xb1'
Od tohto momentu je mikrokontrolér pripojený a môžeme s ním vykonávať sieťové operácie.
Poznámka
Spomínal som, že je možné mikrokontrolér ESP32 použiť aj v režime Access Point-u. To je možné zabezpečiť napríklad týmto fragmentom kódu:
# create access-point interface
= network.WLAN(network.AP_IF)
ap
# set the ESSID of the access point
='ESP-AP')
ap.config(essid
# set how many clients can connect to the network
=10)
ap.config(max_clients
# activate the interface
True) ap.active(
Pripojenie k WiFi
Pripojiť sa k sieti je vhodné počas štartu zariadenia, resp. vzhľadom na šetrenie spotreby sa jemožné pripájať k sieti podľa potreby - napríklad v pravidelných intervaloch niekoľkokrát do dňa. Za tým účelom je možné použiť napr. túto funkciu:
def do_connect(ssid, password): import network = network.WLAN(network.STA_IF) wlan True) wlan.active(if not wlan.isconnected(): print('connecting to network...') connect(ssid, password) wlan.while not wlan.isconnected(): pass print('network config:', wlan.ifconfig())