醬是創客的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代表著該網路加密模式
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