Diferència entre revisions de la pàgina «Connexió a múltiples xarxes sense fils»
| (Hi ha una revisió intermèdia del mateix usuari que no es mostren) | |||
| Línia 16: | Línia 16: | ||
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)'''. | 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) { | + | boolean bIsListed(String szSSID, int *pnWhichOne) { |
for (int i = 0; i < N_WIFIS ; i++) { | for (int i = 0; i < N_WIFIS ; i++) { | ||
| − | if (stWiFi[i].szSSID == szSSID) | + | if (stWiFi[i].szSSID == szSSID){ |
| + | *pnWhichOne = i; | ||
return true; | return true; | ||
| + | } | ||
} | } | ||
return false; | return false; | ||
| Línia 30: | Línia 32: | ||
WiFi.begin(ssid, pwd); | WiFi.begin(ssid, pwd); | ||
Serial.println("Waiting for WIFI connection..."); | Serial.println("Waiting for WIFI connection..."); | ||
| − | while (WiFi.status() != WL_CONNECTED | + | while ( WiFi.status() != WL_CONNECTED ) { |
Serial.print("."); | Serial.print("."); | ||
vDelayESP8266(500); | vDelayESP8266(500); | ||
| Línia 44: | Línia 46: | ||
} else { | } else { | ||
for (int i = 0; i < n; ++i) { | for (int i = 0; i < n; ++i) { | ||
| − | if (bIsListed(WiFi.SSID(i | + | if (bIsListed(WiFi.SSID(i), &nWhichOne)) { |
vConnectToWiFi(stWiFi[nWhichOne].szSSID, stWiFi[nWhichOne].szPWD); | vConnectToWiFi(stWiFi[nWhichOne].szSSID, stWiFi[nWhichOne].szPWD); | ||
return true; | return true; | ||
Revisió de 13:30, 23 maig 2018
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, int *pnWhichOne) {
for (int i = 0; i < N_WIFIS ; i++) {
if (stWiFi[i].szSSID == szSSID){
*pnWhichOne = i;
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 ) {
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