授人以魚不如授人以漁,目的不是爲了教會你具體項目開發,而是學會學習的能力。但願你們分享給你周邊須要的朋友或者同窗,說不定大神成長之路有博哥的奠定石。。。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"); }
注意點:
測試結果:
本篇很是簡單,三個方法,簡單步驟,一鍵配置網絡,值得擁有。