使用ESP8266扫描WiFi列表
一、简介
准备用基于esp8266的nodemcu开发板做一个天气时钟。目前只实现了第一阶段任务的第一点要求。使用arduino编程,在基于esp8266的nodemcu开发板上实现开机自动连接wifi。
这里记录一下使用ESP8266扫描WiFi列表的方法。还需要研究怎么把列表显示在网页上,并且可以通过点击某个WiFi信号后输入密码来进行连接,最好还能给网页返回一个连接是否成功的提示消息。
二、我目前在使用的云服务器推荐
学Linux不搞个云服务器始终感觉不爽!
要稳定性、安全性、不差钱的可以使用阿里、腾讯等大厂的云服务器。
本人穷屌丝一枚,所以我用的是免费的“三丰云”,同时提供"免费虚拟主机"和“免费云服务器”产品,有兴趣的可以试一下。
“三丰云”我已经用了一段时间,感觉还是很不错的,速度快也很稳定。
三丰云 https://www.sanfengyun.com 链接。
大家可以点击前往查看是否需要。
三、程序代码如下
使用ESP8266扫描WiFi列表的程序如下:
#include <ESP8266WiFi.h>
void wsf() {
String ssid;
int32_t rssi;
uint8_t encryptionType;
uint8_t *bssid;
int32_t channel;
bool hidden;
int scanResult;
Serial.println(F("开始WiFi扫描..."));
scanResult = WiFi.scanNetworks(/*async=*/false, /*hidden=*/true);
if (scanResult == 0) {
Serial.println(F("找不到WiFi网络"));
} else if (scanResult > 0) {
Serial.printf(PSTR("%d 扫描出的网络数量:\n"), scanResult);
// 打印扫描出的WiFi列表
for (int8_t i = 0; i < scanResult; i++) {
WiFi.getNetworkInfo(i, ssid, encryptionType, rssi, bssid, channel, hidden);
// 获取扩展信息
const bss_info *bssInfo = WiFi.getScanInfoByIndex(i);
String phyMode;
const char *wps = "";
if (bssInfo) {
phyMode.reserve(12);
phyMode = F("802.11");
String slash;
if (bssInfo->phy_11b) {
phyMode += 'b';
slash = '/';
}
if (bssInfo->phy_11g) {
phyMode += slash + 'g';
slash = '/';
}
if (bssInfo->phy_11n) {
phyMode += slash + 'n';
}
if (bssInfo->wps) {
wps = PSTR("WPS");
}
}
Serial.printf(PSTR(" %02d: [CH %02d] [%02X:%02X:%02X:%02X:%02X:%02X] %ddBm %c %c %-11s %3S %s\n"), i, channel, bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5], rssi, (encryptionType == ENC_TYPE_NONE) ? ' ' : '*', hidden ? 'H' : 'V', phyMode.c_str(), wps, ssid.c_str());
yield();
}
} else {
Serial.printf(PSTR("WiFi扫描出现错误 %d"), scanResult);
}
}
void setup() {
Serial.begin(115200);
Serial.println(F("\nWiFi扫描"));
// 设置WiFi为客户端模式
WiFi.mode(WIFI_STA);
// 断开WiFi连接
WiFi.disconnect();
delay(100);
wsf();
}
void loop() {
}