diff --git a/.gitignore b/.gitignore
index d155341..1065d7c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
-PersWiFiManager.ino
\ No newline at end of file
+PersWiFiManager.ino
+data/*
+!data/wifi*
\ No newline at end of file
diff --git a/PersWiFiManager.cpp b/PersWiFiManager.cpp
index 0ab4ce8..d4898b6 100644
--- a/PersWiFiManager.cpp
+++ b/PersWiFiManager.cpp
@@ -1,7 +1,7 @@
/* PersWiFiManager
- * version 2.0.2
- * https://r-downing.github.io/PersWiFiManager/
- */
+ version 3.0.0
+ https://r-downing.github.io/PersWiFiManager/
+*/
#include "PersWiFiManager.h"
@@ -16,11 +16,6 @@ PersWiFiManager::PersWiFiManager(ESP8266WebServer& s, DNSServer& d) {
} //PersWiFiManager
bool PersWiFiManager::attemptConnection(const String& ssid, const String& pass) {
- IPAddress apIP(192, 168, 1, 1);
- //moved dns start to here
- _dnsServer->setErrorReplyCode(DNSReplyCode::NoError);
- _dnsServer->start((byte)53, "*", apIP); //used for captive portal in AP mode
-
//attempt to connect to wifi
WiFi.mode(WIFI_STA);
if (ssid.length()) {
@@ -29,19 +24,53 @@ bool PersWiFiManager::attemptConnection(const String& ssid, const String& pass)
} else {
WiFi.begin();
}
- unsigned long connectTime = millis();
- //while ((millis() - connectTime) < 1000 * WIFI_CONNECT_TIMEOUT && WiFi.status() != WL_CONNECTED)
- while (WiFi.status() != WL_CONNECT_FAILED && WiFi.status() != WL_CONNECTED && (millis() - connectTime) < 1000 * WIFI_CONNECT_TIMEOUT)
+
+ //if in nonblock mode, skip this loop
+ _connectStartTime = millis();// + 1;
+ while (!_connectNonBlock && _connectStartTime) {
+ handleWiFi();
delay(10);
- if (WiFi.status() == WL_CONNECTED) return true;// { //if timed out, switch to AP mode
+ }
+
+ return (WiFi.status() == WL_CONNECTED);
+
+} //attemptConnection
+
+void PersWiFiManager::handleWiFi() {
+ if (!_connectStartTime) return;
+
+ if (WiFi.status() == WL_CONNECTED) {
+ _connectStartTime = 0;
+ if (_connectHandler) _connectHandler();
+ return;
+ }
+
+ //if failed or not connected and time is up
+ if ((WiFi.status() == WL_CONNECT_FAILED) || ((WiFi.status() != WL_CONNECTED) && ((millis() - _connectStartTime) > (1000 * WIFI_CONNECT_TIMEOUT)))) {
+ startApMode();
+ _connectStartTime = 0; //reset connect start time
+ }
+
+} //handleWiFi
+
+void PersWiFiManager::startApMode(){
+ //start AP mode
+ IPAddress apIP(192, 168, 1, 1);
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
_apPass.length() ? WiFi.softAP(getApSsid().c_str(), _apPass.c_str()) : WiFi.softAP(getApSsid().c_str());
- return false;//} //if
- //moved dns start from here
-} //attemptConnection
+ if (_apHandler) _apHandler();
+}//startApMode
+
+void PersWiFiManager::setConnectNonBlock(bool b) {
+ _connectNonBlock = b;
+} //setConnectNonBlock
void PersWiFiManager::setupWiFiHandlers() {
+ IPAddress apIP(192, 168, 1, 1);
+ _dnsServer->setErrorReplyCode(DNSReplyCode::NoError);
+ _dnsServer->start((byte)53, "*", apIP); //used for captive portal in AP mode
+
_server->on("/wifi/list", [&] () {
//scan for wifi networks
int n = WiFi.scanNetworks();
@@ -85,6 +114,11 @@ void PersWiFiManager::setupWiFiHandlers() {
attemptConnection(_server->arg("n"), _server->arg("p"));
}); //_server->on /wifi/connect
+ _server->on("/wifi/ap", [&](){
+ _server->send(200, "text/html", "access point: "+getApSsid());
+ startApMode();
+ }); //_server->on /wifi/ap
+
_server->on("/wifi/rst", [&]() {
_server->send(200, "text/html", "Rebooting...");
delay(100);
@@ -113,3 +147,12 @@ void PersWiFiManager::setApCredentials(const String& apSsid, const String& apPas
if (apPass.length() >= 8) _apPass = apPass;
} //setApCredentials
+void PersWiFiManager::onConnect(WiFiChangeHandlerFunction fn) {
+ _connectHandler = fn;
+}
+
+void PersWiFiManager::onAp(WiFiChangeHandlerFunction fn) {
+ _apHandler = fn;
+}
+
+
diff --git a/PersWiFiManager.h b/PersWiFiManager.h
index 42c3a93..80fcf03 100644
--- a/PersWiFiManager.h
+++ b/PersWiFiManager.h
@@ -10,7 +10,9 @@
class PersWiFiManager {
public:
- //constructor - takes inputs for ESP8266WebServer and DNSServer, optional ap ssid
+
+ typedef std::function
+
+
- Back |
+ Back |
Home
diff --git a/data/wifi.min.htm b/data/wifi.min.htm index c3d39c3..49a4a55 100644 --- a/data/wifi.min.htm +++ b/data/wifi.min.htm @@ -1 +1 @@ -