WiFi Provisioning (nastavenie WiFi) na ESP32 môže mať rôzne metódy. Ak obídeme štandardné metódy ako hard-coded WiFi SSID a heslo v programe, môžeme využiť aj iné metódy, ktoré umožnia používateľovi nastaviť WiFi SSID a heslo skrz iné dostupné metódy.
Pre ľahké projekty a hobby použitie je určite zaujímavým spôsobom SoftAP s webserverom, ktorý umožní nastaviť WiFi SSID a heslo. ESP32 je tak v režime prístupového bodu AP, najčastejšie tvorí WiFi sieť bez hesla a po pripojení na AP vás presmeruje v prehliadači skrz Captive Portál na webové rozhranie. Najznámejším zástupcom je WiFiManager, ktorý bol primárne navrhnutý pre mikrokontróler ESP8266, avšak funguje aj pre ESP32. Sú tam ale mnohé problémy, najmä s použitím najnovších Arduino Core pre ESP32, ktoré nemusia byť plne kompatibilné so staršími verziami tejto knižnice. Posledný stable release WiFiManagera má v súčastnosti takmer rok. Musím ale povedať, že s posledným Arduino Core pre ESP32, ktoré je založené na ESP-IDF v5.3.X funguje v poriadku.

WiFiManager je veľmi ľahký na implementáciu a používal ho napríklad aj môj WiFi termostat pre ESP8266 i ESP32 z roku 2020 a 2021. Implementácia na týchto dvoch architektúrach bola identická z pohľadu programu, identické príkazy, ľahká medziplatformová prenositeľnosť. WiFiManager zadanú WiFi konfiguráciu ukladá aj do pamäte, teda pri novom spustení mikrokontroléra sa rovno pripojí na WiFi a WiFiManager ani nevysiela SSID v AP režime ESP32.
Medzi nevýhody treba zaradiť aj to, že ak už raz WiFi a heslo skrz portál nastavíte, ESP32 sa okamžite prepne do STA módu a webové rozhranie WiFiManagera už nemôžete použiť až do doby, kým ESP32 stratí WiFi pripojenie, respektíve ak sa k WiFi nepripojí po reštarte. WiFiManager umožňuje aj nahrávanie OTA .bin firmvéru, avšak je to možné iba ak ESP32 nie je pripojené na WiFi a má aktívny WiFiManager portál.
Rovnako tak, ak vysielaná WiFi sieť nie je šifrovaná a SSID a heslo, ktoré skrz HTML formulár do ESP32 odošlete uvidí ktokoľvek, kto sa na túto sieť prihlási, napr. skrz Wireshark. Môžete však vytvoriť aj WiFi sieť s WPA/WPA2-PSK šifrovaním, kedy zadefinujete aj heslo. SSID WiFiManager portálu môžete nastaviť manuálne, prípadne môžete zvoliť automaticky generované meno z chip id ako vidieť nižšie, chip id F0EF49C0.


Okrem štandardného blokovacieho mechanizmu WiFiManagera, t.j. mód pri ktorom sa program nevykonáva do doby, kým nie je ESP32 pripojené na WiFi môžete použiť aj non-blocking mechanizmus WiFiManagera, kedy funkcionality WiFiManagera udržujete skrz volanie wm.process() funkcie v nekonečnej slučke programu. Program sa môže voľne vykonávať a dotoho môžete kedykoľvek ESP32 pripojiť na vašu domácu WiFi sieť, teda program nezablokuje.
Poďme na pokročilejšie metódy. ESP32 podporuje SmartConfig. Je to technológia pôvodne vyvinutá Texas Instruments, ktorá umožňuje preposlanie SSID a hesla cieľovej WiFi siete skrz smartfón, ktorý používa kompatibilnú aplikáciu. Texas Instruments SmartConfig používa na svojich WiFi čipoch rady CC3X00. ESP32 podporuje tri základné typy SmartConfigu a to Airkiss, ESP-TOUCH a ESP-TOUCH V2. Testoval som ESP-TOUCH (V1). Aplikácia EspTouch umožňuje pripojenie mikrokontroléra ESP32 na WiFi sieť, ku ktorej je pripojený aj smartfón.
Z pohľadu použitia to funguje tak, že používateľ si v aplikácii EspTouch najprv zvolí verziu protokolu ESP-TOUCH, ktorá ho ďalej presmeruje na polia formulára, kde používateľ vidí BSSID (inými slovami MAC adresu LAN rozhrania routra), taktiež SSID routra na ktorý je aktuálne pripojený. Do poľa heslo zadá heslo na túto WiFi sieť a používateľ ešte špecifikuje počet zariadení, ktoré chce do siete pripojiť. Zároveň sa ešte volí typ paketu a to Broadcast / Multicast. Skúšal som oba, oba typy fungujú a nezaznamenal som výraznejší rozdiel v rýchlosti pripojenia ESP32 na WiFi sieť.
ESP32 používa svoju programovú implementáciu SmartConfigu, kde v nekonečnej slučke čaká na SmartConfig konfiguráciu. Vtedy používateľ musí zadané údaje v aplikácii EspTouch odoslať cez CONFIRM tlačidlo. Po chvíli aplikácia odpovie, že klient bol pripojený a tiež zobrazí IP adresu, ktorá mu po DHCP bola pridelená.



LAN MAC na prístupovom bode, na ktorý sa pripája ESP32 skrz SmartConfig (viditeľný aj v aplikácii)

SmartConfig klient úspešne pripojený na WiFi skrz aplikáciu EspTouch
Program pre ESP32 obsahoval pripojenie k existujúcej WiFi sieti, ktorej SSID a heslo má ESP32 uložené zavolaním funkcie WiFi.begin(). Následne v programe beží 10 sekundový timeout po ktorý sa ESP32 musí pripojiť k WiFi. Ak k tomu nedošlo, zapne sa funkcionalita SmartConfig a ESP32 čaká na paket s dátami. V danom čase sa z aplikácie SSID a heslo zašle, ESP32 ho obdrží a pripojí sa na WiFi a DHCP mu pridelí IP adresu 192.168.1.217. Uloženie SSID a hesla do flash pamäte ESP32 treba urobiť manuálne, nakoľko SmartConfig ho iba použije ale neuloží! Následne po power-on cykle môžeme vidieť, že sa ESP32 k WiFi pripojí, keďže je už nakonfigurovaná a SmartConfig sa už znova nespustil.

Z hľadiska prenosu dát o SSID a heslo to funguje tak, že SSID a heslo zašle smartfón na router (respektíve prístupový bod) a ten ho zašle priamo mikrokontroléru a pripojí ho na WiFi. Je to typ UDP paketu. Paket musí byť samozrejme na strane ESP32 dekódovaný a SSID a heslo sa z neho vyextrahuje. Smartfón tak nekomunikuje s mikrokontrolérom napriamo. Do WiFi siete bude pripojených iba daný počet zariadení. Teda ak je count nastavený na 1 a máte 2 zariadenia v SmartConfig režime, pripojí sa iba jedno z nich. Rovnako tak SmartConfig nemusí fungovať v prípade, že máte dual-band WiFi a ste so smartfónom pripojený na 5GHz band a ESP32 sa pripája na 2,4 GHz band, i keď ide o totožnú WiFi sieť. V mojom prípade to ale fungovalo a aj takto sa ESP32 pripojilo na WiFi, aplikácia EspTouch to ale neodporúčala. BSSID bolo rovnaké pre obe WiFi.

Okrem EspTouch aplikácie existuje aj obdobná aplikácia ESP BLE Provisioning, respektíve skôr známa ako BluFi. Rovnako tak aj táto aplikácia umožňuje WiFi Provisioning, avšak skrz Bluetooth (BLE). Skrz aplikáciu sa nastavenuje QR kód, ktorý má zariadenie ESP32 vygenerované s možnosťou nastavenia PINu pre spárovanie v rámci Security1, ktorá okrem iného zabezpečí aj šifrovaný prenos a autentifikáciu. Neskúšal som ale tento spôsob, podľa referencií tiež funguje spoľahlivo.


