Connexió a múltiples xarxes sense fils
Connexió a múltiples xarxes sense fils emprant l'ESP8266
Quan un dispositiu basat en l'ESP8266 pot estar indistintament en diverses xarxes (a la feina, a l'escola, a casa) ens interessa no haver d'actualitzar el microprogramari (firmware) per a canviar la SSID, i contrasenya, cada cop que canviem de lloc.
Una solució és definir una estructura amb la SSID i la contrasenya, per després fer un vector d'estructures amb les diferents acreditacions per a cada xarxa:
#define N_WIFIS 2 struct stWifiList { String szSSID; String szPWD; }; struct stWifiList stWiFi[N_WIFIS] = { {"SSID_1" , "PWD_1"}, {"SSID_2" , "PWD_2"} };
Per saber totes les xarxes sense fils disponibles es pot fer servir WiFi.scanNetworks() i es pot comparar el camp szSSID de cada element del vector d'estructures stWifiList amb WiFi.SSID(i) per verificar si coincideixen. Un cop s'ha identificat una xarxa sense fils present al vector stWiFi[N_WIFIS] es procedeix a fer la connexió amb WiFi.begin(ssid, pwd).
boolean bIsListed(String szSSID) { for (int i = 0; i < N_WIFIS ; i++) { if (stWiFi[i].szSSID == szSSID) return true; } return false; } void vConnectToWiFi(String szSsid, String szPwd) { char ssid[MAX_STRING_SIZE], pwd[MAX_STRING_SIZE]; szSsid.toCharArray(ssid, szSsid.length() + 1); szPwd.toCharArray(pwd, szPwd.length() + 1); Serial.println("Connecting to WiFi network: " + String(ssid)); WiFi.begin(ssid, pwd); Serial.println("Waiting for WIFI connection..."); while (WiFi.status() != WL_CONNECTED /*&& i++ < 20*/) { Serial.print("."); vDelayESP8266(500); } Serial.println(); } boolean bTryWifiConnection() { int n = WiFi.scanNetworks(), nWhichOne; Serial.print("*"); if (n == 0) { Serial.println("\nNo networks found"); vDelayESP8266(1000); } else { for (int i = 0; i < n; ++i) { if (bIsListed(WiFi.SSID(i)), &nWhichOne) { vConnectToWiFi(stWiFi[nWhichOne].szSSID, stWiFi[nWhichOne].szPWD); return true; } } } return false; }
Us podeu descarregar un codi funcional a esp8266_multipleWifi.ino