03-ESP8226的WiFi扫描模式学习
上次学习Soft-AP模式后,今天学习WiFi的扫描
文章目录
- 03-ESP8266的WiFi扫描模式学习
- WiFi扫描的过程
- ESP8266WiFiScan.h库
- 一般配置流程:
- 扫描例程
- 异步扫描
- 同步扫描
- 串口调试数据
03-ESP8266的WiFi扫描模式学习
扫描的库主要对应的头文件ESP8266WiFiScan.h,主要的作用就是扫描得到热点的SSID信息。
WiFi扫描的过程
- 触发扫描
- 等待完成
- 提供结果
一般以上过程完成需要几百毫秒,根据实现以上两种方式的不同区分为同步扫描和异步扫描
同步扫描:需要等待扫描过程完成才能继续下面的操作
异步扫描:扫描过程可以执行其他任务
ESP8266WiFiScan.h库
根据库文件函数功能分为两类:
1.扫描操作
int8_t scanNetworks(bool async = false, bool show_hidden = false, uint8 channel = 0, uint8* ssid = NULL);void scanNetworksAsync(std::function<void(int)> onComplete, bool show_hidden = false);int8_t scanComplete();void scanDelete();
2.扫描信息
bool getNetworkInfo(uint8_t networkItem, String &ssid, uint8_t &encryptionType, int32_t &RSSI, uint8_t* &BSSID, int32_t &channel, bool &isHidden);String SSID(uint8_t networkItem);uint8_t encryptionType(uint8_t networkItem);int32_t RSSI(uint8_t networkItem);uint8_t * BSSID(uint8_t networkItem);String BSSIDstr(uint8_t networkItem);int32_t channel(uint8_t networkItem);bool isHidden(uint8_t networkItem);
一般配置流程:
配置WiFi为STA模式
关闭已经连接的AP热点
选择同步或者异步扫描
扫描例程
/*
内容:这个例程是学习ESP8266的扫描模式,以下是官方例程
时间:2022.4.42
作者:bobo
邮箱:980181362@qq.com
*///头文件
#include void setup() {Serial.begin(9600);Serial.println(F("\nESP8266 WiFi scan example"));// Set WiFi to station modeWiFi.mode(WIFI_STA);// Disconnect from an AP if it was previously connectedWiFi.disconnect();delay(100);
}void loop()
{String ssid;int32_t rssi;uint8_t encryptionType;uint8_t* bssid;int32_t channel;bool hidden;int scanResult;Serial.println(F("Starting WiFi scan..."));//异步扫描,将扫描结果返回WiFi.scanNetworks(/*Async*/true,/*scan-hide*/true);//这里延时体现了异步扫描的特点delay(3000);//实际测试3s左右//注意这里写法和下面同步扫描不一样 scanResult = WiFi.scanComplete();//同步扫描,将扫描结果返回// scanResult = WiFi.scanNetworks(/*Sync*/false,/*scan-hide*/true);//根据结果打印对应的信息if (scanResult == 0) {Serial.println(F("No networks found"));} else if (scanResult > 0) {Serial.printf(PSTR("%d networks found:\n"), scanResult);// Print unsorted scan resultsfor (int8_t i = 0; i < scanResult; i++) {WiFi.getNetworkInfo(i, ssid, encryptionType, rssi, bssid, channel, hidden);Serial.printf(PSTR(" %02d: [CH %02d] [%02X:%02X:%02X:%02X:%02X:%02X] %ddBm %c %c %s\n"), i, channel, bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5], rssi, (encryptionType == ENC_TYPE_NONE) ? ' ' : '*', hidden ? 'H' : 'V', ssid.c_str());yield();}} else {Serial.printf(PSTR("WiFi scan error %d"), scanResult);}// Wait a bit before scanning againdelay(5000);
}
其中同步和异步显现在函数调用后的延时上
异步扫描
WiFi.scanNetworks(/*Async*/true,/*scan-hide*/true);
//这里延时体现了异步扫描的特点
delay(3000);//实际测试3s左右
//注意这里写法和下面同步扫描不一样
scanResult = WiFi.scanComplete();//把扫描的数量赋值
如果没有delay(3000);话会显示WiFi scan error -1,也就是扫描中
#define WIFI_SCAN_RUNNING (-1)
#define WIFI_SCAN_FAILED (-2)
同步扫描
//同步扫描,将扫描结果返回
scanResult = WiFi.scanNetworks(/*sync*/false,/*scan-hide*/true);
串口调试数据
ESP8266 WiFi scan example
Starting WiFi scan…
17 networks found:
00: [CH 01] [20:6B:E7:2A:D6:4B] -70dBm * V 灏忎竵涓?
01: [CH 01] [74:05:A5:36:9A:E4] -82dBm * V liuZH
02: [CH 01] [4C:D1:A1:14:A1:ED] -71dBm * H
03: [CH 01] [4C:D1:A1:14:A1:E9] -76dBm * H
04: [CH 04] [08:40:F3:C3:B5:01] -81dBm * V Tenda_C3B500
05: [CH 06] [A0:4C:0C:8C:4E:66] -70dBm * V 702
06: [CH 06] [A2:4C:0C:AC:4E:66] -70dBm * V 702_Wi-Fi5
07: [CH 01] [14:DE:39:32:F5:FC] -87dBm * V HONOR-051LI8
08: [CH 08] [A4:2A:71:6D:F1:40] -77dBm * V ChinaNet-rbX7
09: [CH 08] [DC:71:37:4F:EF:84] -74dBm * V CMCC-hUby
10: [CH 01] [04:4A:6C:70:EB:65] -91dBm * H
11: [CH 09] [C8:3A:35:3A:27:28] -87dBm * V 1203
12: [CH 11] [58:41:20:4F:F4:5A] -79dBm * V TP-LINK_F45A
13: [CH 11] [5A:41:20:2F:F4:5A] -79dBm * H
14: [CH 13] [62:BB:34:24:F9:1E] -42dBm * V redmi
15: [CH 13] [54:DF:24:B3:73:2D] -73dBm * V ChinaNet-wcdk
-LINK_F45A
13: [CH 11] [5A:41:20:2F:F4:5A] -79dBm * H
14: [CH 13] [62:BB:34:24:F9:1E] -42dBm * V redmi
15: [CH 13] [54:DF:24:B3:73:2D] -73dBm * V ChinaNet-wcdk
16: [CH 01] [4C:D1:A1:14:A1:E8] -72dBm * V HW-901
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
