#include <Arduino.h>
#include <ESP8266WiFi.h>
const char* array_ssid[] = {"ssid1", "ssid2", "ssid3", "ssid4"};
const char* array_pass[] = {"pass1", "pass2", "pass3", "pass4"};
constexpr uint8_t count_ssid = sizeof(array_ssid) / sizeof(array_ssid[0]); // вычисляем размер массива на этапе компиляции
int8_t netIndex = -1; // индекс найденной сети к которой можно подключиться. Если -1 сеть не найдена, либо сканирование не требуется т.к. уже есть подкючение.
void searchTargetNet(uint8_t networksFound);
bool tryToConnect();
// Поиск сети к которой нужно подключиться
void searchTargetNet(uint8_t networksFound){
Serial.printf("Networks found: %u\n", networksFound);
for(uint8_t i = 0; i < networksFound; i++){
for(uint8_t j = 0; j< count_ssid; j++){
if(strcmp(WiFi.SSID(i).c_str(), array_ssid[j]) == 0){
Serial.printf("Found target SSID! Index: %u , Name: %s\n",j,array_ssid[j]);
netIndex = j;
return;
}
}
}
Serial.printf("Not found target net\n");
};
// Попытка подключения
bool tryToConnect(){
uint8_t tries = 11; // Количество попыток подключения
WiFi.begin(array_ssid[netIndex], array_pass[netIndex]);
Serial.printf("Waiting");
while (--tries){
Serial.print(".");
if(WiFi.status() == WL_CONNECTED){
IPAddress ip = WiFi.localIP();
Serial.printf(" Status - connected, ip adress: %u.%u.%u.%u , RSSI: %i\n", ip[0],ip[1],ip[2],ip[3],WiFi.RSSI());
WiFi.scanDelete();
return true;
}
delay(800);
}
Serial.printf("Not connected, SSID: %s\n",array_ssid[netIndex]);
return false;
}
void setup(void) {
WiFi.persistent(false);
Serial.begin(115200);
Serial.printf("\nOur mac = %s\n",WiFi.macAddress().c_str());
WiFi.mode(WIFI_STA);
WiFi.scanNetworksAsync(searchTargetNet);
}
void loop(void) {
static uint32_t timeout = 0; //время (мс) следующего опроса
static const uint32_t interval = 10000; //интервал опроса
if( millis()>timeout){
timeout = millis()+interval;
if(WiFi.status() != WL_CONNECTED){
Serial.printf("Status - disconnected\n");
WiFi.scanNetworksAsync(searchTargetNet);
}
}
if(netIndex >= 0) {
if(tryToConnect()) netIndex = -1;
}
delay(50);
}