#49 captive portal added

pull/1/head
Thomas Ballmann 3 years ago
parent af4fda37e4
commit 1264ab9387

@ -97,7 +97,13 @@ void setupApp()
setupOTA(); setupOTA();
server.onNotFound([](AsyncWebServerRequest *request) { server.onNotFound([](AsyncWebServerRequest *request) {
request->send(404); Serial.printf("not found: http://%s%s\n", request->host().c_str(), request->url().c_str());
if (ON_STA_FILTER(request)) {
request->send(404);
} else {
request->send(SPIFFS, "/dist/index.html");
}
}); });
server.on("/stats", HTTP_GET, [](AsyncWebServerRequest *request) { server.on("/stats", HTTP_GET, [](AsyncWebServerRequest *request) {

@ -1,10 +1,20 @@
#include "wlan.h" #include "wlan.h"
#include "settings.h" #include "settings.h"
#include <DNSServer.h>
const char *deviceName = "paperdash-epd"; const char *deviceName = "paperdash-epd";
RTC_DATA_ATTR int wifiFailedCount = 0; RTC_DATA_ATTR int wifiFailedCount = 0;
void initClientMode(const char *ssid, const char *password); // DNS server
const byte DNS_PORT = 53;
DNSServer dnsServer;
/* Soft AP network parameters */
IPAddress apIP(192,178,4,1);
#include <DNSServer.h>
bool initClientMode(const char *ssid, const char *password);
void initAPMode(); void initAPMode();
void setupWlan() void setupWlan()
@ -15,12 +25,14 @@ void setupWlan()
String ssid = NVS.getString("wifi.ssid"); String ssid = NVS.getString("wifi.ssid");
String password = NVS.getString("wifi.password"); String password = NVS.getString("wifi.password");
bool clientMode = false;
if (!ssid.isEmpty() && !password.isEmpty() && wifiFailedCount <=3) if (!ssid.isEmpty() && !password.isEmpty() && wifiFailedCount <=3)
{ {
// client mode // try client mode
initClientMode(ssid.c_str(), password.c_str()); clientMode = initClientMode(ssid.c_str(), password.c_str());
} }
else
if (!clientMode)
{ {
// ap mode // ap mode
initAPMode(); initAPMode();
@ -31,7 +43,14 @@ void setupWlan()
Serial.println("setup Wlan - done"); Serial.println("setup Wlan - done");
} }
void initClientMode(const char *ssid, const char *password)
void loopWlan()
{
// DNS
dnsServer.processNextRequest();
}
bool initClientMode(const char *ssid, const char *password)
{ {
uint8_t tryCount = 5; uint8_t tryCount = 5;
long startMills = millis(); long startMills = millis();
@ -52,15 +71,13 @@ void initClientMode(const char *ssid, const char *password)
if (!tryCount--) if (!tryCount--)
{ {
// TODO is this correct? // TODO is this correct?
WiFi.disconnect();
wifiFailedCount++; wifiFailedCount++;
if (wifiFailedCount > 3) { if (wifiFailedCount > 3) {
Serial.println(" wifi is not reachable..."); Serial.println(" wifi is not reachable...");
WiFi.disconnect(); return false;
initAPMode();
return;
} else { } else {
tryCount = 5; tryCount = 5;
WiFi.disconnect();
Serial.println(" wifi reset..."); Serial.println(" wifi reset...");
delay(500); delay(500);
WiFi.begin(ssid, password); WiFi.begin(ssid, password);
@ -82,14 +99,25 @@ void initClientMode(const char *ssid, const char *password)
Serial.print(" connected in: "); Serial.print(" connected in: ");
Serial.println(millis() - startMills); Serial.println(millis() - startMills);
return true;
} }
void initAPMode() void initAPMode()
{ {
Serial.println(" init AP (Access Point)"); Serial.println(" init AP (Access Point)");
WiFi.mode(WIFI_AP);
WiFi.softAP("paperdash"); WiFi.softAP("paperdash");
// prevent esp from crashing
delay(2000);
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));
// redirect all to local ap
dnsServer.start(DNS_PORT, "*", apIP);
IPAddress IP = WiFi.softAPIP(); IPAddress IP = WiFi.softAPIP();
Serial.print(" AP IP address: "); Serial.print(" AP IP address: ");
Serial.println(IP); Serial.println(IP);

@ -5,5 +5,6 @@
#include <ESPmDNS.h> #include <ESPmDNS.h>
void setupWlan(); void setupWlan();
void loopWlan();
#endif #endif

@ -55,6 +55,8 @@ void setup()
void loop() void loop()
{ {
loopWlan();
if (WiFi.isConnected()) if (WiFi.isConnected())
{ {
loopDateTime(); loopDateTime();

Loading…
Cancel
Save