一、说明——ESP8266WiFiScan库
1、scanNetworks或者scanNetworksAsync
该函数可以扫描到ESP8266开发板所在环境中的可用WIFI网络,并且将WiFi网络信息保存到内存中。通过调用SSID、RSSI等函数,我们还可以得到这些扫描到的WIFI的更多信息。
此函数在扫描WiFi网络时采用同步扫描模式。与其相对应的还有scanNetworksAsync异步扫描WiFi。
所谓同步扫描就是每一次调用本函数时,ESP8266开发板会一次性得到完整的WiFi列表,并且将WiFi列表保存在内存中。
2、getNetworkInfo
当ESP8266开发板使用scanNetworks或者scanNetworksAsync对所处环境的WiFi网络进行扫描后,ESP8266开发板会将扫描到的网络信息保存在内存中。
通过此函数,我们可以获取扫描到的WiFi的网络名称、加密类型、信号强度、MAC地址、网络信道、网络是否隐藏等信息。
注:如需单独获取以上列出的WiFi信息中的某一项,可参考ESP8266WiFiScan库中信息类型的其它函数内容。
二、语法
wiFi.getNetworkInfo(i, ssid, encryptionType, RSSI, BSSID, channel, isHidden)
三、参数
getNetworkInfo函数会将WiFi网络信息存入参数中。这些参数的具体功能如下。
i:扫描到的接入点网络列表的序号(uint8_t型)
ssid:扫描到的接入点网络的网络名称(String型)
encryptionType:扫描到的接入点网络的加密类型(uint8_t型)
RSSI:扫描到的接入点网络的网络信号强度(int32_t型)
BSSID:扫描到的接入点网络的MAC地址(大小为6个元素的uint8数组指针)
channel:扫描到的接入点网络的网络通道(int32_t型)
isHidden:扫描到的接入点网络是否是隐藏网络(bool型)
四、返回值
如果成功获取WiFi信息,则返回true,否则返回false。
五、完整程序
#include <ESP8266WiFi.h>
void setup() {
Serial.begin(115200); //设置串口波特率,以便打印信息
delay(5000); //延时5s
WiFi.mode(WIFI_STA); //设置为无线终端模式
WiFi.disconnect(); //断开,不连接到任何一个接入点
delay(100);
Serial.println("STA建立完成");
}
void loop() {
Serial.println("同步扫描开始");
int n = WiFi.scanNetworks(); //开始同步扫描,将返回值
Serial.println("同步扫描结束"); //存放在变量n中
if (n == 0){
Serial.println("找不到网络");
}else{
Serial.println("发现网络");
// 建立一系列变量,用于存储网络信息
String ssid; // 网络名称
uint8_t encryptionType; // 网络加密类型
int32_t RSSI; // 网络信号强度
uint8_t* BSSID; // 网络接入点设备mac地址
int32_t channel; // 网络信道
bool isHidden; // 网络是否隐藏
for (int i = 0; i < n; i++) //逐个打印扫描到的接入点信息
{
//获取扫描到的接入点网络信息(网络名称,信号强度等)
WiFi.getNetworkInfo(i, ssid, encryptionType, RSSI, BSSID, channel, isHidden);
//打印扫描到的接入点网络信息(网络名称,信号强度等)
Serial.printf("%d: %s, Ch:%d, (%ddBm) %s %s\n", i + 1, ssid.c_str(), channel, RSSI, encryptionType == ENC_TYPE_NONE ? "开放" : "加密", isHidden ? "隐藏" : "显示");
}
Serial.println("");
delay(5000);// 延时5s之后再次扫描
}
}
六、附加
硬件方面只需要让esp8266通过数据线连接电脑即可(记得下载好ESP8266WiFi.h的库)
下面是实现结果