NodeMcu的Wifi管理庫:WiFiManager
官方網址:
https://github.com/tzapu/WiFiManager
WiFiManager是一個帶web配置接口回調的ESP8266 Wifi連接管理器。
因為配置接口的多樣性,因此需要在很多設備上提供配置對話框來允許你建立熱點的方式來建立連接。
這個庫工作在Arduino平臺上的ESP8266上面。
工作原理
當你啟動ESP後,它首先工作在STA模式下,然後試圖去連接一個預先保存的熱點
如果預存的熱點連接不成功的話,ESP就將啟動AP模式,然後開啟DNS和WebServer(初始的IP為192.168.4.1)
用任何很啟動瀏覽器的設備(電腦,手機等等)連接最新的可以連接的熱點
選擇一個Wifi熱點,然後輸入密碼,點擊保存
如果配置成功的話, ESP將試圖連接這個熱點。如果不成功的話,就將重新開啟AP模式並重新配置。
快速開始
安裝
我們這裡建議大家通過Arduino庫管理器進行安裝,這樣可以安裝到最新的版本。
在Arduino IDE中點擊項目/加載庫/管理庫
搜索WiFiManager
點擊安裝,然後我們就可以開始使用它了。
使用說明
首先包含頭文件
#include <esp8266wifi.h> //ESP8266 Core WiFi Library (you most likely already have this in your sketch)/<esp8266wifi.h>
#include <dnsserver.h> //Local DNS Server used for redirecting all requests to the configuration portal/<dnsserver.h>
#include <esp8266webserver.h> //Local WebServer used to serve the configuration portal/<esp8266webserver.h>
#include <wifimanager.h> //https://github.com/tzapu/WiFiManager WiFi Configuration Magic/<wifimanager.h>
在setup函數中初始這個庫
WiFiManager wifiManager;
然後再在setup函數中添加
//first parameter is name of access point, second is the password
wifiManager.autoConnect("AP-NAME", "AP-PASSWORD");
如果你想連接一個不用設置密碼的熱點,就像下面這樣寫
wifiManager.autoConnect("AP-NAME");
如果你想連接“ESP”加這個開發板的ID做名稱的熱點,可以想下面這樣寫
wifiManager.autoConnect();
好,現在把這些代碼燒錄到ESP中,它將開始連接wifi,如果失敗的話,就將啟動AP模式,在AP模式下,你打開瀏覽器,然後輸入默認的IP:192.168.4.1,配置wifi,保存後,ESP就將重啟並且連接這個wifi熱點。
配置wifi熱點的密碼說明
你可以在配置wifi熱點時配置密碼,通過autoConnect函數,但這個密碼不能太短,比如在8位或者以上才行。
wifiManager.autoConnect("AutoConnectAP", "password")
回調
如果你想在開發板連接wifi失敗後,進入AP模式之前做一些什麼,你需要在autoConnect()函數之前這麼做。
wifiManager.setAPCallback(configModeCallback);
configModeCallback 的例子
void configModeCallback (WiFiManager *myWiFiManager) {
Serial.println("Entered config mode");
Serial.println(WiFi.softAPIP());
Serial.println(myWiFiManager->getConfigPortalSSID());
}
保存設置
這個庫只保存一些關鍵的配置,如果你想在連接建立後保存一些你自己的配置,可以這樣寫
wifiManager.setSaveConfigCallback(saveConfigCallback);
saveConfigCallback 的例子
//flag for saving data
bool shouldSaveConfig = false;
//callback notifying us of the need to save config
void saveConfigCallback () {
Serial.println("Should save config");
shouldSaveConfig = true;
}
配置超時接口
如果需要設置超時,以使ESP不會在等待配置時掛起,例如在電源故障後,可以添加
wifiManager.setConfigPortalTimeout(180);
等待3分鐘(180秒)。隨著時間的推移,無論結果如何,autoConnect函數都將返回。檢查連接,如果仍然沒有建立連接,則執行所需的操作(在某些模塊上,我重新啟動它們以重試,在其他模塊上,我進入深度睡眠)
按需配置接口
如果您希望按需啟動配置接口,而不是在連接嘗試失敗時自動啟動配置接口,則這是為您準備的。
您需要使用startConfigPortal(),而不是調用autoConnect()來完成所有連接和故障轉移配置接口接口的設置。不要兩者都用。
用法舉例
void loop() {
// is configuration portal requested?
if ( digitalRead(TRIGGER_PIN) == LOW ) {
WiFiManager wifiManager;
wifiManager.startConfigPortal("OnDemandAP");
Serial.println("connected...yeey :)");
}
}
其它參數
您可以使用WiFiManager收集更多的參數,而不僅僅是SSID和密碼。這可能有助於配置MQTT主機和端口、blynk或emoncms令牌等,僅舉幾個例子。您負責保存和加載這些自定義值。圖書館只是為了方便你收集和顯示數據。使用場景將是:
從某處加載值(EEPROM/FS)或生成一些默認值
使用添加自定義參數到WiFiManager
// id/name, placeholder/prompt, default, length
WiFiManagerParameter custom_mqtt_server("server", "mqtt server", mqtt_server, 40);
wifiManager.addParameter(&custom_mqtt_server);
如果連接到AP失敗,配置門戶將啟動,您可以設置/更改值(或使用按需配置接口)
配置完成並建立連接後,調用save config回調
一旦WiFiManager將控制權返回給應用程序,就可以使用WiFiManagerParameter對象讀取並保存新值。
mqtt_server = custom_mqtt_server.getValue();
這個特性比所有其他特性都要複雜得多,所以這裡有一些例子來充分說明它是如何實現的。您還應該考慮向表單中添加自定義HTML。
以json格式AutoConnectWithFSParameters將自定義參數保存並加載到文件系統
將自定義參數保存並加載到EEPROM(尚未完成)
Custom IP Configuration
You can set a custom IP for both AP (access point, config mode) and STA (station mode, client mode, normal project state)
Custom Access Point IP Configuration
This will set your captive portal to a specific IP should you need/want such a feature. Add the following snippet before autoConnect()
自定義IP配置
您可以為AP(接入點,配置模式)和STA(站點模式,客戶端模式,正常項目狀態)設置自定義IP
自定義訪問點IP配置
如果您需要/想要這樣的功能,這將把捕獲門戶設置為特定的IP。在autoConnect()之前添加以下代碼段
//set custom ip for portal
wifiManager.setAPStaticIPConfig(IPAddress(10,0,1,1), IPAddress(10,0,1,1), IPAddress(255,255,255,0));
自定義站(客戶端)靜態IP配置
這將使用指定的IP配置,而不是在站模式下使用DHCP。
wifiManager.setSTAStaticIPConfig(IPAddress(192,168,0,99), IPAddress(192,168,0,1), IPAddress(255,255,255,0));
自定義HTML、CSS、Javascript
有多種方法可以將自定義HTML、CSS或Javascript注入配置門戶。選項包括:
注入自定義head元素您可以使用它將任何html位插入到配置門戶的head。如果添加");
在配置表單中插入自定義的html位
WiFiManagerParameter custom_text("
This is just a text paragraph
");wifiManager.addParameter(&custom_text);
在配置表單元素中插入一個自定義的html位,只需將要添加的位作為最後一個參數添加到自定義參數構造函數中。
WiFiManagerParameter custom_mqtt_server("server", "mqtt server", "iot.eclipse", 40, " readonly");
過濾網絡
可以基於信號質量過濾網絡,並顯示/隱藏重複網絡。
如果你想過濾低信號質量的網絡,你可以告訴WiFiManager不要顯示低於任意質量的網絡;
wifiManager.setMinimumSignalQuality(10);
不會顯示低於10%信號質量的網絡。如果省略該參數,則默認為8%;
也可以刪除或顯示重複的網絡(默認為刪除)。使用此功能可顯示(或隱藏)所有網絡。
wifiManager.setRemoveDuplicateAPs(false);
調試
默認情況下,在串行上啟用調試。禁用自動連接前添加
wifiManager.setDebugOutput(false);
故障排除
如果您經常遇到編譯錯誤,您可能需要為Arduino安裝更新版本的ESP8266 core。
在0.8上添加的更改應使最新的主幹正常工作,而不會出現編譯錯誤。測試到ESP8266 core 2.0.0。請更新到0.8版
我正試圖讓發行版與核心的發行版一起工作,這樣它們就可以通過boards manager安裝,但是如果您直接從github簽出最新版本,有時,只有在您將ESP8266核心更新到最新版本時,庫才會工作,因為我正在使用一些新添加的功能。
如果連接到已創建的配置訪問點,但配置門戶未顯示,則只需打開瀏覽器並鍵入web門戶的IP,默認情況下為192.168.4.1。
如果嘗試連接的結果是無休止的循環,請嘗試在autoConnect()之前添加setConnectTimeout(60);。參數是嘗試連接的超時時間(秒)。
閱讀更多 碼農大叔老歐 的文章