Introduction

先前為了使用開發板用作自動數據紀錄器,分別測試了基於 ESP8266、 ESP32 的網路連接,最後使用代碼如下。

函式庫

ESP8266

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>

ESP32

#include <WiFi.h>
#include <HTTPClient.h>

全域設定(WiFi 資訊設定)

struct WiFiCredentials {
  String ssid;
  String password;
};
 
WiFiCredentials networks[] = {
  {"SSID1", "PASS1"},
  {"SSID2", "PASS2"},
  {"SSID3", "PASS3"},
};

函式

void connectToWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.disconnect();
  int n = WiFi.scanNetworks();
  Serial.println("Scan WiFi");
 
  if (n == 0) {
    Serial.println(F("No WiFi Available."));
  } else {
    int strongestSignalIndex = -1;
    int strongestSignalRSSI = -1000;
    
    for (int i = 0; i < n; i++) {
      String currentSSID = WiFi.SSID(i);
      for (int j = 0; j < sizeof(networks) / sizeof(networks[0]); j++) {
        if (currentSSID == networks[j].ssid) {
          if (WiFi.RSSI(i) > strongestSignalRSSI) {
            strongestSignalRSSI = WiFi.RSSI(i);
            strongestSignalIndex = j;
          }
        }
      }
    }
    
    if (strongestSignalIndex != -1) {
      WiFiCredentials bestNetwork = networks[strongestSignalIndex];
      Serial.print("Connecting to WiFi: '" + bestNetwork.ssid + "' Connecting.");
      WiFi.begin(bestNetwork.ssid.c_str(), bestNetwork.password.c_str());
 
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      Serial.println(F("Connected to The Wifi: "));
      Serial.println(WiFi.localIP());
      Serial.println(WiFi.RSSI());
    } else {
      Serial.println(F("No WiFi Available."));
    }
  }
}