Skip to content

Commit

Permalink
cleaned up and commented
Browse files Browse the repository at this point in the history
  • Loading branch information
r-downing committed Nov 2, 2017
1 parent 79ecbd5 commit fe5b5ac
Showing 1 changed file with 21 additions and 9 deletions.
30 changes: 21 additions & 9 deletions PersWiFiManager.cpp
@@ -1,5 +1,8 @@
#include "PersWiFiManager.h"

//uncomment next line to serve wifi settings page from progmem instead of SPIFFS (uses ~2kb)
//#define WIFI_HTM_PROGMEM

#ifdef WIFI_HTM_PROGMEM
const char wifi_htm[] PROGMEM = R"=====(<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/><title>ESP WiFi</title><script>function g(i){return document.getElementById(i);};function p(t,l){if(confirm(t)) window.location=l;};function E(s){return document.createElement(s)};var S="setAttribute",A="appendChild",H="innerHTML",X,wl;function scan(){if(X) return;X=new XMLHttpRequest(),wl=document.getElementById('wl');wl[H]="Scanning...";X.onreadystatechange=function(){if (this.readyState==4&&this.status==200){X=0;wl[H]="";this.responseText.split("\n").forEach(function (e){let t=e.split(","), s=t.slice(2).join(',');var d=E('div'),i=E('a'),c=E('a');i[S]('class','s'); c[S]('class','q');i.onclick=function(){g('s').value=s;g('p').focus();};i[A](document.createTextNode(s));c[H]=t[0]+"%"+(parseInt(t[1])?"\uD83D\uDD12":"\u26A0");wl[A](i); wl[A](c);wl[A](document.createElement('br'));});}};X.open("GET","wifi/list",true);X.send();};</script><style>input{padding:5px;font-size:1em;width:95%;}body{text-align:center;font-family:verdana;background-color:black;color:white;}a{color:#1fa3ec;}button{border:0;border-radius:0.3em;background-color:#1fa3ec;color:#fff;line-height:2.4em;font-size:1.2em;width:100%;display:block;}.q{float:right;}.s{display:inline-block;width:14em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}#wl{line-height:1.5em;}</style></head><body><div style='text-align:left;display:inline-block;width:320px;padding:5px'><button onclick="scan()">&#x21bb; Scan</button><p id='wl'></p><form method='post' action='/wifi/connect'><input id='s' name='n' length=32 placeholder='SSID'><br><input id='p' name='p' length=64 type='password' placeholder='password'><br><br><button type='submit'>Connect</button></form><br><br><button onclick="p('Start WPS?','/wifi/wps')">WPS Setup</button><br><button onclick="p('Reboot device?','/wifi/rst')">Reboot</button><br><a href="javascript:history.back()">Back</a> |<a href="/">Home</a></div></body></html>)=====";
#endif
Expand All @@ -8,36 +11,41 @@ PersWiFiManager::PersWiFiManager(ESP8266WebServer& s, DNSServer& d, const String
_server = &s;
_dnsServer = &d;
_apSSID = apSSID;
}
}//PersWiFiManager

void PersWiFiManager::attemptConnection(const String& ssid, const String& pass) {
IPAddress apIP(192, 168, 1, 1);
//attempt to connect to wifi
WiFi.mode(WIFI_STA);
if (ssid.length()) {
if (pass.length()) WiFi.begin(ssid.c_str(), pass.c_str());
else WiFi.begin(ssid.c_str());
} else {
if (pass.length()) { //encrypted wifi
WiFi.begin(ssid.c_str(), pass.c_str());
} else { //unencrypted
WiFi.begin(ssid.c_str());
}
} else { //blank ssid, attempt autoconnect to last network
WiFi.begin();
}

//attempt to connect for up to 30 seconds
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)
delay(10);
while (WiFi.status() != WL_CONNECT_FAILED && WiFi.status() != WL_CONNECTED && (millis() - connectTime) < 1000 * WIFI_CONNECT_TIMEOUT){}
if (WiFi.status() != WL_CONNECTED) { //if timed out, switch to AP mode
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
WiFi.softAP(_apSSID.length() ? _apSSID.c_str() : "ESP8266");
} //if
_dnsServer->setErrorReplyCode(DNSReplyCode::NoError);
_dnsServer->start((byte)53, "*", apIP); //used for captive portal in AP mode
}
}//attemptConnection

void PersWiFiManager::attemptConnection() {
PersWiFiManager::attemptConnection("", "");
}
}//attemptConnection

void PersWiFiManager::setupWiFiHandlers() {

//sends csv style list of wifi networks
_server->on("/wifi/list", [&] () {
//scan for wifi networks
int n = WiFi.scanNetworks();
Expand Down Expand Up @@ -66,6 +74,7 @@ void PersWiFiManager::setupWiFiHandlers() {
_server->send(200, "text/plain", s);
}); //_server->on /wifi/list

//activates wps setup
_server->on("/wifi/wps", [&]() {
_server->send(200, "text/html", "attempting WPS");
WiFi.mode(WIFI_STA);
Expand All @@ -76,17 +85,20 @@ void PersWiFiManager::setupWiFiHandlers() {
}
}); //_server->on /wifi/wps

//connects to specified ssid (and password)
_server->on("/wifi/connect", [&]() {
_server->send(200, "text/html", "connecting...");
attemptConnection(_server->arg("n"), _server->arg("p"));
}); //_server->on /wifi/connect

//reboots device
_server->on("/wifi/rst", [&]() {
_server->send(200, "text/html", "Rebooting...");
delay(100);
ESP.restart();
});

//optional progmem-served page, if not using SPIFFS
#ifdef WIFI_HTM_PROGMEM
_server->on("/wifi.htm", [&]() {
_server->send(200, "text/html", wifi_htm);
Expand Down

0 comments on commit fe5b5ac

Please sign in to comment.