1
0
mirror of https://github.com/s00500/ESPUI.git synced 2025-06-19 16:40:39 +00:00

Merge pull request from ncmreynolds/main

Add captive portal functionality, update examples and documentation, resolves 
This commit is contained in:
2022-09-21 10:06:57 +02:00
committed by GitHub
5 changed files with 34 additions and 3 deletions

@ -43,6 +43,7 @@ The Library runs on any kind of **ESP8266** and **ESP32** (NodeMCU, AI Thinker,
* [Grouped controls](#grouped-controls) * [Grouped controls](#grouped-controls)
* [Wide controls](#wide-controls) * [Wide controls](#wide-controls)
* [Graph (Experimental)](#graph--experimental-) * [Graph (Experimental)](#graph--experimental-)
* [Captive Portal](#captive-portal)
- [Notes for Development](#notes-for-development) - [Notes for Development](#notes-for-development)
- [Contribute](#contribute) - [Contribute](#contribute)
@ -643,6 +644,17 @@ Graph points are saved in the browser in **localstorage** to be persistant, clea
_There are many issues with the graph component currently and work is ongoing. Consider helping us out with development!_ _There are many issues with the graph component currently and work is ongoing. Consider helping us out with development!_
### Captive Portal
ESPUI will redirect all unknown URLs it is asked for to the 'root' of the local HTTP server instead of responding with an HTTP code 404. This makes it act as a simple 'captive portal'. Note you must also set up the ESP to be a DNS server that responds to all DNS requests with the IP address of the ESP. This only effective when the ESP is acting as a WiFi hotspot in AP mode and assigning itself as the DNS server to connected clients.
All the example sketches include the DNS related code and will work as captive portals when used as a hotspot. In the event you wish to disable this feature you can do so by removing the DNS server code and adding the code below.
```
ESPUI.captivePortal = false;
```
# Notes for Development # Notes for Development
If you want to work on the HTML/CSS/JS files, do make changes in the _data_ If you want to work on the HTML/CSS/JS files, do make changes in the _data_

@ -256,7 +256,6 @@ void setup(void)
* since it is transmitted in cleartext. Just add a string as username and * since it is transmitted in cleartext. Just add a string as username and
* password, for example begin("ESPUI Control", "username", "password") * password, for example begin("ESPUI Control", "username", "password")
*/ */
ESPUI.begin("ESPUI Control"); ESPUI.begin("ESPUI Control");
} }

@ -25,6 +25,7 @@ beginLITTLEFS KEYWORD2
print KEYWORD2 print KEYWORD2
updateSwitcher KEYWORD2 updateSwitcher KEYWORD2
updateSlider KEYWORD2 updateSlider KEYWORD2
captivePortal LITERAL1
####################################### #######################################
# Instances (KEYWORD2) # Instances (KEYWORD2)

@ -1351,7 +1351,16 @@ void ESPUIClass::beginLITTLEFS(const char* _title, const char* username, const c
request->send(200, "text/plain", String(ESP.getFreeHeap()) + " In LITTLEFS mode"); request->send(200, "text/plain", String(ESP.getFreeHeap()) + " In LITTLEFS mode");
}); });
server->onNotFound([](AsyncWebServerRequest* request) { request->send(404); }); server->onNotFound([this](AsyncWebServerRequest* request) {
if(captivePortal)
{
request->redirect("/");
}
else
{
request->send(404);
}
});
server->begin(); server->begin();
@ -1496,7 +1505,16 @@ void ESPUIClass::begin(const char* _title, const char* username, const char* pas
request->send(200, "text/plain", String(ESP.getFreeHeap()) + " In Memorymode"); request->send(200, "text/plain", String(ESP.getFreeHeap()) + " In Memorymode");
}); });
server->onNotFound([](AsyncWebServerRequest* request) { request->send(404); }); server->onNotFound([this](AsyncWebServerRequest* request) {
if(captivePortal)
{
request->redirect("/");
}
else
{
request->send(404);
}
});
server->begin(); server->begin();

@ -236,6 +236,7 @@ public:
unsigned int jsonUpdateDocumentSize; unsigned int jsonUpdateDocumentSize;
unsigned int jsonInitialDocumentSize; unsigned int jsonInitialDocumentSize;
bool sliderContinuous; bool sliderContinuous;
bool captivePortal = true;
void setVerbosity(Verbosity verbosity); void setVerbosity(Verbosity verbosity);
void begin(const char* _title, const char* username = nullptr, const char* password = nullptr, void begin(const char* _title, const char* username = nullptr, const char* password = nullptr,