NodeMcu的Wifi管理库:WiFiManager

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模式并重新配置。


NodeMcu的Wifi管理库:WiFiManager


NodeMcu的Wifi管理库:WiFiManager


快速开始

安装

我们这里建议大家通过Arduino库管理器进行安装,这样可以安装到最新的版本。

在Arduino IDE中点击项目/加载库/管理库


NodeMcu的Wifi管理库:WiFiManager


搜索WiFiManager


NodeMcu的Wifi管理库: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);。参数是尝试连接的超时时间(秒)。


分享到:


相關文章: