You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.4 KiB
47 lines
1.4 KiB
#include <DNSServer.h> |
|
#ifdef ESP32 |
|
#include <WiFi.h> |
|
#include <AsyncTCP.h> |
|
#elif defined(ESP8266) |
|
#include <ESP8266WiFi.h> |
|
#include <ESPAsyncTCP.h> |
|
#endif |
|
#include "ESPAsyncWebServer.h" |
|
|
|
DNSServer dnsServer; |
|
AsyncWebServer server(80); |
|
|
|
class CaptiveRequestHandler : public AsyncWebHandler { |
|
public: |
|
CaptiveRequestHandler() {} |
|
virtual ~CaptiveRequestHandler() {} |
|
|
|
bool canHandle(AsyncWebServerRequest *request){ |
|
//request->addInterestingHeader("ANY"); |
|
return true; |
|
} |
|
|
|
void handleRequest(AsyncWebServerRequest *request) { |
|
AsyncResponseStream *response = request->beginResponseStream("text/html"); |
|
response->print("<!DOCTYPE html><html><head><title>Captive Portal</title></head><body>"); |
|
response->print("<p>This is out captive portal front page.</p>"); |
|
response->printf("<p>You were trying to reach: http://%s%s</p>", request->host().c_str(), request->url().c_str()); |
|
response->printf("<p>Try opening <a href='http://%s'>this link</a> instead</p>", WiFi.softAPIP().toString().c_str()); |
|
response->print("</body></html>"); |
|
request->send(response); |
|
} |
|
}; |
|
|
|
|
|
void setup(){ |
|
//your other setup stuff... |
|
WiFi.softAP("esp-captive"); |
|
dnsServer.start(53, "*", WiFi.softAPIP()); |
|
server.addHandler(new CaptiveRequestHandler()).setFilter(ON_AP_FILTER);//only when requested from AP |
|
//more handlers... |
|
server.begin(); |
|
} |
|
|
|
void loop(){ |
|
dnsServer.processNextRequest(); |
|
}
|
|
|