Práca s WiFi modulom

scan WiFi sietí, pripojenie k WiFi, vytvorenie prístupového bodu

Práca so sieťou na doske Raspberry Pi Pico W/H

Ak je doska s mikrokontrolérom vybavená sieťovým modulom, môžeme ju využiť na bezdrôtovú komunikáciu. Dosky Raspberry Pi Pico 1 a 2 W, rovnako ako mikrokontroléry z rodiny ESP, majú integrovaný Wi‑Fi modul, takže umožňujú pripojenie do siete bez káblov.

Mikrokontrolér môže fungovať nielen v režime klienta, ale aj ako prístupový bod (Access Point). V tomto režime môže poskytovať rôzne sieťové služby pre ostatné zariadenia. Môže napríklad slúžiť ako webový server s používateľským rozhraním pre ovládanie pripojených akčných členov alebo poskytovať jednoduchú stránku s údajmi zo senzorov.

Modul network

Pre prácu so sieťou mámem v jazyku MicroPython k dispozícii modul network, pokiaľ doska, na ktorej je mikrokontrolér osadený, obsahuje sieťový modul. Pred začiatkom práce ho teda importneme:

>>> import network

Pomocou funkcie hostname() je možné nastaviť alebo získať názov hostiteľa, ktorý bude zariadenie identifikovať v sieti. Tento názov sa použije pre všetky sieťové rozhrania:

>>> network.hostname('thsensor')
>>> network.hostname()
'thsensor'

Vytvorenie WiFi klienta

Najprv 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)

Po vytvorení môžeme urobiť sken WiFi sietí, ktorú sú 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 objektom wlan:

    >>> wlan.connect('SSID', 'password')
  • Po (ne)úspešnom pripojení môžeme overiť stav pripojenia volaním metódy .isconnected(), ktorá vráti hodnotu True, ak sme sa úspešne pripojili alebo hodnotu False, ak nie. Nastavenie pripojenia vieme overiť volaním metódy .ipconfig():

    >>> wlan.isconnected()
    True
    >>> wlan.ipconfig('addr4')
    ('192.168.1.128', '255.255.255.0')
  • 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.

Funkcia do_connect()

Na stránkach dokumentácie jazyka MicroPython môžete nájsť pomocnú funkciu do_conenct(). Pre vlastné použitie si ju môžete rozlične upraviť, ako napr. takto:

def do_connect(ssid, password):
    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect(ssid, password)
        while not wlan.isconnected():
            pass
    print('network config:', wlan.ifconfig())

Vytvorenie prístupového bodu

V prípade, že chceme vytvoriť prístupový bod, vytvoríme objekt sieťového rozhrania s parametrom network.AP_IF:

iface = network.WLAN(network.AP_IF)

Následne nastavíme potrebné vlastnosti rozhrania a teda prístupového bodu podľa potreby pomocou metódy .config(). Metóda obsahuje niekoľko voliteľných parametrov. Ich zoznam závisí od typu sieťovej technológie, ovládača a portu MicroPythonu. Pre viac konkrétne možnosti sa treba pozrieť do dokumentácie modulu network, prípadne do dokumentácie konkrétnej dosky, napr. Pico W a Pico 2 W. Tým najpodstatnejším nastavením je však určite názov vytváranej WiFi siete a heslo pre prístup k nej. To je možné nastaviť pomocou parametrov ssid a key:

iface.config(ssid='valhala', key='WifiOfTheGods')

Nakoniec už len sieťové rozhranie aktivujeme:

iface.active(True)

Po pripojení do vytvorenej WiFi siete klientom zavolaním

iface.ifconfig()

sa zobrazia nastavenia sieťového rozhrania. Jeho predvolená IP adresa bude 192.168.4.1 a klient dostane IP adresu 192.168.4.16. Tieto predvolené hodnoty je však samozrejme možné zmeniť.

Webové rozhranie

  • použiť treťostranové knižnice. zoznam je na stránke Awesome Micropython. odporúčam použiť niečo serióznejšie ako napr. MicroDot

Odpojenie zariadenia

Po skončení komunikácie je dobré sa odpojiť od WiFi siete. To je možné dosiahnuť dvoma metódami:

  • .disconnect() - Odpojí sa od aktuálne pripojenej bezdrôtovej siete.
  • .deinit() - Okrem toho, že dôjde k odpojeniu od aktuálne pripojenej bezdrôtovej siete, sa WiFi modul ešte aj vypne. Tým dôjde k zníženiu spotreby.

Ďalšie zdroje