醬是創客的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
