Skip to content

Commit 2ea621b

Browse files
committed
upd
1 parent d0c227b commit 2ea621b

File tree

7 files changed

+61
-44
lines changed

7 files changed

+61
-44
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ board_build.filesystem = littlefs
7878
### Как это работает
7979
В библиотеке настроен вебсервер, который отправляет файлы вебморды при заходе на ip платы. Файлы вебморды вшиты в PROGMEM (в код программы) в бинарном виде - загружать файлы в fs не нужно, всё работает из коробки. Лёгкий html файл каждый раз подгружается, а скрипты и стили - кешируются браузером для ускорения загрузки. По сути они загружаются один раз после обновления библиотеки. Вебморда является веб-приложением, которое общается с платой по http. При загрузке она запрашивает у платы пакет с виджетами и прочей информацией, пакет имеет формат бинарного json.
8080

81+
### Captive portal
82+
Во всех трёх реализациях сервера из коробки настроен DNS для работы как Captive portal - если ESP работает в режиме точки доступа (AP или AP_STA), то при подключении к точке автоматически откроется окно браузера со страницей настроек.
83+
8184
### База данных
8285
Библиотека интегрирована с [GyverDB](https://github.com/GyverLibs/GyverDB) - относительно быстрой базой данных для хранения данных любого типа. Settings автоматически читает и обновляет данные в БД, поэтому рекомендуется изучить как работать с БД на странице описания GyverDB. При использовании GyverDBFile база данных будет автоматически писаться в файл при изменениях, а файловая система позаботится об оптимальном износе flash памяти. При запуске рекомендуется инициализировать БД, указав ключи и соответствующие им начальные значения и типы. Эти значения будут записаны только в том случае, если запись в БД ещё не существует. В то же время автоматическое обновление БД работает только для существующих записей, т.е. Settings будет работать только с сущестующими ячейками и не создаст новых. Минимальный пример:
8386
```cpp
@@ -258,7 +261,7 @@ void setup() {
258261
## Описание классов
259262
- `SettingsBase` (*SettingsBase.h*) - базовый класс без вебсервера
260263
- `SettingsGyver` (*SettingsGyver.h*) - на вебсервере GyverHTTP
261-
- `SettingsESP` (*SettingsESP.h*) - на стандартном вебсервере ESP (тут корректно работает DNS)
264+
- `SettingsESP` (*SettingsESP.h*) - на стандартном вебсервере ESP
262265
- `SettingsAsync` (*SettingsAsync.h*) - на асинхронном ESPAsyncWebserver
263266
264267
### SettingsBase/SettingsGyver/SettingsESP/SettingsAsync

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Settings
2-
version=1.0.2
2+
version=1.0.3
33
author=AlexGyver <[email protected]>
44
maintainer=AlexGyver <[email protected]>
55
sentence=Simple UI webface builder for esp8266/esp32

src/SettingsAsync.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,25 @@
33
#pragma once
44
#include <Arduino.h>
55

6-
#ifdef ESP32
7-
#include <AsyncTCP.h>
8-
#include <WiFi.h>
9-
#elif defined(ESP8266)
6+
#ifdef ESP8266
107
#include <ESP8266WiFi.h>
118
#include <ESPAsyncTCP.h>
9+
#else
10+
#include <AsyncTCP.h>
11+
#include <WiFi.h>
1212
#endif
1313
#include <ESPAsyncWebServer.h>
1414

1515
#include "SettingsBase.h"
16+
#include "core/ESP_DNS.h"
1617
#include "web/settings.h"
1718

1819
class SettingsAsync : public SettingsBase {
1920
public:
2021
SettingsAsync(const String &title = "", GyverDB *db = nullptr) : SettingsBase(title, db), server(80) {}
2122

2223
void begin() {
24+
_dns.begin();
2325
server.begin();
2426

2527
server.on("/settings", HTTP_GET, [this](AsyncWebServerRequest *request) {
@@ -56,12 +58,14 @@ class SettingsAsync : public SettingsBase {
5658
}
5759

5860
void tick() {
61+
_dns.tick();
5962
SettingsBase::tick();
6063
}
6164

6265
private:
6366
AsyncWebServer server;
6467
AsyncResponseStream *_response = nullptr;
68+
sets::ESP_DNS _dns;
6569

6670
void send(uint8_t *data, size_t len) {
6771
if (_response) _response->write(data, len);

src/SettingsESP.h

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,16 @@
1111
#include <WiFi.h>
1212
#endif
1313

14-
#ifndef SETT_NO_DNS
15-
#include <DNSServer.h>
16-
#endif
17-
1814
#include "SettingsBase.h"
15+
#include "core/ESP_DNS.h"
1916
#include "web/settings.h"
2017

2118
class SettingsESP : public SettingsBase {
2219
public:
2320
SettingsESP(const String& title = "", GyverDB* db = nullptr) : SettingsBase(title, db), server(80) {}
2421

2522
void begin() {
23+
_dns.begin();
2624
server.begin();
2725

2826
server.on("/settings", HTTP_GET, [this]() {
@@ -49,19 +47,10 @@ class SettingsESP : public SettingsBase {
4947
cache_h();
5048
server.send_P(200, "text/css", (PGM_P)settings_style_gz, settings_style_gz_len);
5149
});
52-
53-
#ifndef SETT_NO_DNS
54-
if (WiFi.getMode() == WIFI_AP || WiFi.getMode() == WIFI_AP_STA) {
55-
dns_f = 1;
56-
dns.start(53, "*", WiFi.softAPIP());
57-
}
58-
#endif
5950
}
6051

6152
void tick() {
62-
#ifndef SETT_NO_DNS
63-
if (dns_f) dns.processNextRequest();
64-
#endif
53+
_dns.tick();
6554
server.handleClient();
6655
SettingsBase::tick();
6756
}
@@ -73,11 +62,7 @@ class SettingsESP : public SettingsBase {
7362
#endif
7463

7564
private:
76-
#ifndef SETT_NO_DNS
77-
DNSServer dns;
78-
bool dns_f = false;
79-
#endif
80-
65+
sets::ESP_DNS _dns;
8166
void send(uint8_t* data, size_t len) {
8267
server.setContentLength(len);
8368
server.send(200, "text/plain");

src/SettingsGyver.h

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,16 @@
1010
#include <WiFi.h>
1111
#endif
1212

13-
#ifndef SETT_NO_DNS
14-
#include <DNSServer.h>
15-
#endif
16-
1713
#include "SettingsBase.h"
14+
#include "core/ESP_DNS.h"
1815
#include "web/settings.h"
1916

2017
class SettingsGyver : public SettingsBase {
2118
public:
2219
SettingsGyver(const String& title = "", GyverDB* db = nullptr) : SettingsBase(title, db), server(80) {}
2320

2421
void begin() {
22+
_dns.begin();
2523
server.begin();
2624

2725
server.onRequest([this](ghttp::ServerBase::Request req) {
@@ -43,31 +41,18 @@ class SettingsGyver : public SettingsBase {
4341
break;
4442
}
4543
});
46-
47-
#ifndef SETT_NO_DNS
48-
if (WiFi.getMode() == WIFI_AP || WiFi.getMode() == WIFI_AP_STA) {
49-
dns_f = 1;
50-
dns.start(53, "*", WiFi.softAPIP());
51-
}
52-
#endif
5344
}
5445

5546
void tick() {
56-
#ifndef SETT_NO_DNS
57-
if (dns_f) dns.processNextRequest();
58-
#endif
47+
_dns.tick();
5948
server.tick();
6049
SettingsBase::tick();
6150
}
6251

6352
ghttp::Server<WiFiServer, WiFiClient> server;
6453

6554
private:
66-
#ifndef SETT_NO_DNS
67-
DNSServer dns;
68-
bool dns_f = false;
69-
#endif
70-
55+
sets::ESP_DNS _dns;
7156
void send(uint8_t* data, size_t len) {
7257
server.sendFile(data, len);
7358
}

src/core/ESP_DNS.h

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#pragma once
2+
#include <Arduino.h>
3+
#include <DNSServer.h>
4+
5+
#ifdef ESP8266
6+
#include <ESP8266WiFi.h>
7+
#else
8+
#include <WiFi.h>
9+
#endif
10+
11+
namespace sets {
12+
13+
class ESP_DNS {
14+
public:
15+
void begin() {
16+
#ifndef SETT_NO_DNS
17+
if (WiFi.getMode() == WIFI_AP || WiFi.getMode() == WIFI_AP_STA) {
18+
dns_f = true;
19+
dns.start(53, "*", WiFi.softAPIP());
20+
}
21+
#endif
22+
}
23+
24+
void tick() {
25+
#ifndef SETT_NO_DNS
26+
if (dns_f) dns.processNextRequest();
27+
#endif
28+
}
29+
30+
private:
31+
#ifndef SETT_NO_DNS
32+
DNSServer dns;
33+
bool dns_f = false;
34+
#endif
35+
};
36+
37+
} // namespace sets

src/core/updater.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,22 @@ class Updater {
99
public:
1010
Updater(Packet& p) : p(p) {}
1111

12+
// пустой апдейт (например для вызова Confirm)
1213
void update(size_t id) {
1314
p.beginObj();
1415
p.addUint(sets::Code::id, id);
1516
p.endObj();
1617
}
1718

19+
// апдейт с текстом
1820
void update(size_t id, Text value) {
1921
p.beginObj();
2022
p.addUint(sets::Code::id, id);
2123
p.addText(sets::Code::value, value);
2224
p.endObj();
2325
}
2426

27+
// апдейт с float
2528
void update(size_t id, float value, uint8_t dec = 2) {
2629
p.beginObj();
2730
p.addUint(sets::Code::id, id);

0 commit comments

Comments
 (0)