深入学习esp8266wifimanager源码解析(打造专属自己的web配网)(最全的w...
深⼊学习esp8266wifimanager源码解析(打造专属⾃⼰的web
配⽹)(最全的w。。。
1.前⾔
废话少说,本篇博⽂的⽬的就是深⼊学习 这个github上⾮常⽕爆的ESP8266 web配⽹库,让初学者不再对web配⽹感到迷茫,并且通过学习第三⽅库来⾃定义⾃⼰的web配⽹功能。等你学习整篇博⽂,你会发现 So easy!!
2.WiFiManager
2.1 WiFiManager源码地址
直接点击 下载代码
2.2 WiFiManager是什么
⼀句话概括:
ESP8266 WiFi连接管理器,主要是提供Web页⾯配置功能,包括Web配⽹、⾃定义参数配置;
2.3 安装WiFiManager 库
第⼀步:
这个库是跟ESP8266 Arduino核⼼库⼀起使⽤,所以⽤户需要配置好Arduino For ESP8266平台,具体请参考
第⼆步:
可以通过Arduino IDE库管理器安装WiFiManager,搜索“WiFiManager”,然后点击下载(适合新⼿⼩⽩,直接上⼿使⽤)
也可以直接通过github下载源码,放到你的Arduino libraries⽂件夹(深⼊学习者,可以查看源码然后改造源码,达到⾃定义配⽹功能)
2.4 WiFiManager⼯作原理
1、当你的ESP8266上电启动时,它⾸先进⼊STA模式,然后尝试去连接之前已经保存过的AP热点(如果你不了解STA和AP的区别,⿇烦参考 和 );
2、如果连接失败(可能是因为没有保存上⼀次的热点信息),那么该库就会让ESP进⼊AP模式并且提供AP热点,启动并监听DNS服务以及Web服务(默认ip地址是192.168.4.1)(如果你不了解 DNS服务 和 Web服务的概念,⿇烦参考 ESP8266开发之旅 和 )
3、使⽤任何可以连接WiFi并且可以使⽤浏览器的设备(包括电脑、⼿机、平板)去连接ESP⽣成的AP热点
4、由于 DNS服务 Captive Portal功能的存在,会导致任何的⽹络请求都重定向到 认证配置页⾯(也就是我们的Web配置页⾯)
5、选择任意⼀个扫描到的AP热点,输⼊热点密码,点击保存
6、ESP会尝试去连接新AP热点,如果连接成功,就返回到我们的正常业务,连接失败,就会再次重复上⾯的操作
2.5 如何引⼊WiFiManager库
⾮常简单,直接引⼊:
#include <WiFiManager.h>
怎么查自己的ip
⾄于怎么样去彻底了解这个库的使⽤⽅法,请看博主下⾯的源码分析。
3.WifiManager源码解析
通过查阅WifiManager的源码,整体代码⾮常简单,提供出来的⽅法调⽤也不多。这⾥博主就⼀个个⽅法详细讲解,并且深⼊去分析代码,以便后⾯⾃定义⾃⼰的WifiManager。主要分为⼏类⽅法:
配置类⽅法
连接类⽅法
博主建议:先了解有什么⽅法,然后在后⾯例⼦讲解中去感受⽅法的使⽤。
3.1 配置类⽅法
主要包括:
setConfigPortalTimeout
setTimeout
setConnectTimeout
setDebugOutput
setMinimumSignalQuality
setAPStaticIPConfig
setSTAStaticIPConfig
setAPCallback
setSaveConfigCallback
addParameter
setBreakAfterConfig
setCustomHeadElement
setRemoveDuplicateAPs
resetSettings
getConfigPortalSSID
3.1.1 setConfigPortalTimeout/setTimeout —— 配置认证超时
函数说明:
/**
* 功能描述:配置认证超时
* @param seconds 秒数为单位
*/
void WiFiManager::setTimeout(unsigned long seconds) {
setConfigPortalTimeout(seconds);
}
/**
* 功能描述:配置认证超时
* @param seconds 秒数为单位
*/
void WiFiManager::setConfigPortalTimeout(unsigned long seconds) {
_configPortalTimeout = seconds * 1000;
}
注意点:
配置界⾯超时,指的是⽤户进⼊配置界⾯后多少秒之内如果没有处理完毕就退出整个配置过程;
默认情况下,_configPortalTimeout 等于0,也就是不限制时间;
3.1.2 setConnectTimeout —— 设置sta连接超时时间
函数说明:
/**
* 功能描述:设置sta连接超时,超过时间就返回连接状态
* @param seconds 秒数为单位
*/
void WiFiManager::setConnectTimeout(unsigned long seconds) {
_connectTimeout = seconds * 1000;
}
注意点:
正常情况下,_connectTimeout等于0,也就是直接等待连接状态。
3.1.3 setDebugOutput —— 设置是否打开debug模式
函数说明:
/**
* 功能描述:设置是否打开debug
* @param debug true or false
*/
void WiFiManager::setDebugOutput(boolean debug) {
_debug = debug;
}
注意点:
建议调试阶段把该功能打开,可以清晰知道整个运⾏流程。等待调试完毕,关闭调试功能;
3.1.4 setAPStaticIPConfig —— 设置固定AP,包括ip、⽹关、⼦⽹掩码
函数说明:
/**
* 功能描述:设置固定AP,包括ip、⽹关、⼦⽹掩码
* @param ip  ip地址
* @param gw  ⽹关地址
* @param sn  ⼦⽹掩码
*/
void WiFiManager::setAPStaticIPConfig(IPAddress ip, IPAddress gw, IPAddress sn) {
_ap_static_ip = ip;
_ap_static_gw = gw;
_ap_static_sn = sn;
}
注意点:
此⽅法⽤于设置ESP在AP模式下固定的AP信息,不设置默认为192.168.4.1
3.1.5 setSTAStaticIPConfig —— 设置固定STA,包括ip、⽹关、⼦⽹掩码
函数说明:
/**
* 功能描述:设置固定STA,包括ip、⽹关、⼦⽹掩码
* @param ip  ip地址
* @param gw  ⽹关地址
* @param sn  ⼦⽹掩码
*/
void WiFiManager::setSTAStaticIPConfig(IPAddress ip, IPAddress gw, IPAddress sn) {
_sta_static_ip = ip;
_sta_static_gw = gw;
_sta_static_sn = sn;
}
注意点:
此⽅法⽤于设置ESP在STA模式下固定的STA信息,不设置默认由DHCP分配;
3.1.6 setMinimumSignalQuality —— 设置最⼩的信号质量
函数说明:
/**
* 功能描述:设置能够接受的最低信号强度
* @param quality  信号强度,默认为8
*/
void WiFiManager::setMinimumSignalQuality(int quality) {
_minimumQuality = quality;
}
注意点:
此⽅法⽤来过滤信号强度低于quality的AP热点,⽤于scan扫描时过滤;
3.1.7 setBreakAfterConfig —— 设置WEB配置失败后是否退出配置
函数说明:
/**
* 功能描述:设置WEB配置失败后是否退出配置
* @param shouldBreak 是否退出配置,默认是false
*/
void WiFiManager::setBreakAfterConfig(boolean shouldBreak) {
_shouldBreakAfterConfig = shouldBreak;
}
3.1.8 setAPCallback —— 设置开启AP模式配置时的通知回调
函数说明:
/**
* 功能描述:设置开启AP模式配置时的通知回调
* @param func 回调函数
*/
void WiFiManager::setAPCallback( void (*func)(WiFiManager* myWiFiManager) ) {  _apcallback = func;
}
注意点:
此⽅法主要是告知我们已经进⼊了配置模式了;
3.1.9 setSaveConfigCallback —— 设置保存Web配置后的回调
函数说明:
//start up save config callback
/**
* 功能描述:设置保存Web配置后的回调
* @param func 回调函数
*/
void WiFiManager::setSaveConfigCallback( void (*func)(void) ) {
_savecallback = func;
}
注意点:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。