ESP32扫描WiFi网络时能否获取MAC地址?如何获取RSSI与MAC用于IPS?
问题原因
你代码中调用的WiFi.macAddress(i)方法用途错误:该方法用于获取当前开发板自身的WiFi MAC地址,无需传入参数,也无法返回扫描到的热点MAC地址。
解决方法
要获取扫描到的WiFi热点的MAC地址(即热点的BSSID),使用WiFi.BSSIDstr(i)方法即可,传入扫描结果的索引i就能返回字符串格式的对应热点MAC地址。
修正后完整代码
void loop() { // 扫描前清空上一次缓存,避免冗余结果 WiFi.scanDelete(); int n = WiFi.scanNetworks(); if(n == 0){ Serial.println("no networks found"); } else{ for (int i = 0; i < n; ++i) { Serial.print(i + 1); Serial.print(": "); Serial.print(WiFi.SSID(i)); Serial.print(" ("); Serial.print(WiFi.RSSI(i)); Serial.print(")"); Serial.print((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*"); // 输出热点MAC地址 Serial.print(" MAC: "); Serial.println(WiFi.BSSIDstr(i)); delay(10); } } delay(10000); }
补充说明
- 如果你需要字节格式的MAC地址用于定位计算,可以调用
WiFi.BSSID(i),返回值是长度为6的uint8_t数组指针,分别对应MAC地址的6段字节 - 部分加密的隐藏热点不会返回SSID,但仍然可以正常获取到BSSID和RSSI值,不影响IPS定位使用
内容的提问来源于stack exchange,提问作者Lucas-NinjaPro
相关产品推荐
相关产品推荐

