授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。但愿你们分享给你周边须要的朋友或者同窗,说不定大神成长之路有博哥的奠定石。。。git
QQ技术互动交流群:ESP8266&32 物联网开发 群号622368884,不喜勿喷github
1、基础篇web
2、网络篇微信
- ESP8266开发之旅 网络篇① 认识一下Arduino Core For ESP8266
- ESP8266开发之旅 网络篇② ESP8266 工做模式与ESP8266WiFi库
- ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用
- ESP8266开发之旅 网络篇④ Station——ESP8266WiFiSTA库的使用
- ESP8266开发之旅 网络篇⑤ Scan WiFi——ESP8266WiFiScan库的使用
- ESP8266开发之旅 网络篇⑥ ESP8266WiFiGeneric——基础库
- ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client
- ESP8266开发之旅 网络篇⑧ SmartConfig——一键配网
- ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用
- ESP8266开发之旅 网络篇⑩ UDP服务
- ESP8266开发之旅 网络篇⑪ WebServer——ESP8266WebServer库的使用
- ESP8266开发之旅 网络篇⑫ 域名服务——ESP8266mDNS库
- ESP8266开发之旅 网络篇⑬ SPIFFS——ESP8266 Flash文件系统
- ESP8266开发之旅 网络篇⑭ web配网
- ESP8266开发之旅 网络篇⑮ 真正的域名服务——DNSServer
- ESP8266开发之旅 网络篇⑯ 无线更新——OTA固件更新
3、应用篇网络
4、高级篇app
前面的博文中,博主提供的实例源代码一般都是固定了WiFi热点的帐号密码。可是,在实际产品开发中,这样的限制是行不通的。
当你拿到一块WiFi模块,若是须要连上网络,则须要将SSID名称、密码设置到模块当中。通常有几种方式:ide
8266核心库提供了SmartConfig技术,那么smartconfig究竟是什么呢?函数
所谓SmartConfig就是手机App端发送包含WIFI用户名以及密码的UDP广播包,智能终端(开启了sniffer混杂模式)的WIFI芯片能够接收到该UDP包,只要知道UDP包的组织形式,就能够经过接收到的UDP包解密出WIFI用户名密码,而后智能硬件配置收到的用户名密码到指定的WIFI AP上。
直接看一个概念图:
oop
简单操做步骤以下:学习
还记得,博主其实在 ESP8266开发之旅 网络篇④ Station——ESP8266WiFiSTA库的使用 有稍微涉及到smartconfig。并且,请读者放心,smartconfig配置很是简单,方法就三个:
函数说明:
/** * 启动配网模式 * @return bool 是否启动配网模式成功 */ bool beginSmartConfig();
看看 beginSmartConfig 源码:
/** * 启动 SmartConfig */ bool ESP8266WiFiSTAClass::beginSmartConfig() { //SmartConfig已经开启了 if(_smartConfigStarted) { return false; } //开启STA模式 if(!WiFi.enableSTA(true)) { // enable STA failed return false; } //调用真正的smartconfig_start,并设置了_smartConfigCallback 回调函数 if(smartconfig_start(reinterpret_cast<sc_callback_t>(&ESP8266WiFiSTAClass::_smartConfigCallback), 1)) { _smartConfigStarted = true; _smartConfigDone = false; return true; } return false; }
注意点:
咱们看看 _smartConfigCallback 会作什么?源码:
/** * _smartConfigCallback * @param st * @param result */ void ESP8266WiFiSTAClass::_smartConfigCallback(uint32_t st, void* result) { sc_status status = (sc_status) st; if(status == SC_STATUS_LINK) { //获取到配网信息(帐号密码) station_config* sta_conf = reinterpret_cast<station_config*>(result); //把配置写到flash wifi_station_set_config(sta_conf); //断开链接 wifi_station_disconnect(); //从新链接 wifi_station_connect(); //标记配网完成 _smartConfigDone = true; } else if(status == SC_STATUS_LINK_OVER) { //中止配网 WiFi.stopSmartConfig(); } }
函数说明:
/** * 中止Smartconfig * @return bool 是否中止配网模式成功 */ bool stopSmartConfig();
源码:
/** * Stop SmartConfig */ bool ESP8266WiFiSTAClass::stopSmartConfig() { if(!_smartConfigStarted) { return true; } //调用中止函数 if(smartconfig_stop()) { _smartConfigStarted = false; return true; } return false; }
函数说明:
/** * 查找状态看是否配网完成 * @return bool 是否启动配网模式成功 */ bool smartConfigDone();
源码:
/** * Query SmartConfig status, to decide when stop config * @return smartConfig Done */ bool ESP8266WiFiSTAClass::smartConfigDone() { if(!_smartConfigStarted) { return false; } //返回状态 _smartConfigCallback 会改变状态 return _smartConfigDone; }
#include <ESP8266WiFi.h> void smartConfig() { WiFi.mode(WIFI_STA); Serial.println("\r\nWait for Smartconfig"); delay(2000); // 等待配网 WiFi.beginSmartConfig(); while (1) { Serial.print("."); delay(500); if (WiFi.smartConfigDone()) { Serial.println("SmartConfig Success"); Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str()); Serial.printf("PSW:%s\r\n", WiFi.psk().c_str()); WiFi.setAutoConnect(true); // 设置自动链接 break; } } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } void setup() { Serial.begin(115200); smartConfig(); } void loop() { delay(100); Serial.println("loop"); }
注意点:
测试结果:
本篇很是简单,三个方法,简单步骤,一键配置网络,值得拥有。