醬是創客的ESP32教學主題第十篇,以Ai-Thinker安信可NodeMCU-32S(使用Arduino語言)來實作教學,本篇教學將著重掃描SCAN所有Wi-Fi SSID/RSSI無線基地台訊號強度/加密模式,有了這些訊息才能讓用戶來選擇Client要連線到哪一個無線網路基地台,這個的用途是減少用戶輸入錯的SSID,導致ESP32一直無法連到基地台

以下是我們今天的目標

  • 先使用WiFi.scanNetworks(),取得有多少的WiFi基地台,它的演算法是先抓訊號最強的
  • WiFi.SSID代表著該網路的SSID名稱
  • WiFi.RSSI代表著該網路的RSSI無線網路訊號強度
  • WiFi.encryptionType代表著該網路加密模式

設備:
安信可NodeMCU-32S #露天拍賣 #蝦皮購物

WiFi.encryptionType的byte對應表如下
encryptionType 0:WIFI_AUTH_OPEN
encryptionType 1:WIFI_AUTH_WEP
encryptionType 2:WIFI_AUTH_WPA_PSK
encryptionType 3:WIFI_AUTH_WPA2_PSK
encryptionType 4:WIFI_AUTH_WPA_WPA2_PSK
encryptionType 5:WIFI_AUTH_WPA2_ENTERPRISE
encryptionType 6:WIFI_AUTH_MAX

Arduino 範例程式碼如下

//醬是創客 開發實作的好夥伴
#include "WiFi.h"

void setup() {
  Serial.begin(115200);
}
 
void loop() {
   scanAP();
   delay(10000);
}

void scanAP(void) {
  int n = WiFi.scanNetworks();
  delay(1000);
  Serial.println("scan Wi-Fi done");
  if (n == 0)
    Serial.println("no Wi-Fi networks found");
  else
  {
    Serial.print(n);
    Serial.println(" Wi-Fi networks found");
    for (int i = 0; i < n; ++i)
     {
      Serial.print(i + 1);
      Serial.print(": ");
      //印出SSID
      Serial.print(WiFi.SSID(i));
      Serial.print(" (");
      //印出RSSI強度
      Serial.print(WiFi.RSSI(i));
      Serial.print(")");
      //印出加密模式
      Serial.println(WiFi.encryptionType(i),HEX);
      delay(10);
     }
  }
}

Arduino 序列埠監控視窗 輸出如下

scan Wi-Fi done
8 Wi-Fi networks found
1: TP-LINK_E5EDE0 (-26)3
2: Fu-shun_Hotel (-79)4
3: HITRON-17 (-81)4
4: VIP (-85)4
5: HITRON-A9C0-2.4G (-89)3
6: HITRON-52 (-89)4
7: cm-40 (-91)4
8: Home46 (-91)4
scan Wi-Fi done
8 Wi-Fi networks found
1: TP-LINK_E5EDE0 (-29)3
2: Fu-shun_Hotel (-82)4
3: Cht3595 (-86)3
4: HITRON-17 (-86)4
5: VIP (-87)4
6: Home46 (-91)4
7: HITRON-52 (-91)4
8: HITRON-A9C0-2.4G (-93)3