mirror of
https://github.com/esphome/esphome.git
synced 2025-07-29 06:36:45 +00:00
[web_server] Upgrade ESPAsync libraries (#8867)
This commit is contained in:
parent
c612985930
commit
669ef7a0b1
@ -21,8 +21,8 @@ CONFIG_SCHEMA = cv.All(
|
|||||||
@coroutine_with_priority(200.0)
|
@coroutine_with_priority(200.0)
|
||||||
async def to_code(config):
|
async def to_code(config):
|
||||||
if CORE.is_esp32 or CORE.is_libretiny:
|
if CORE.is_esp32 or CORE.is_libretiny:
|
||||||
# https://github.com/esphome/AsyncTCP/blob/master/library.json
|
# https://github.com/ESP32Async/AsyncTCP
|
||||||
cg.add_library("esphome/AsyncTCP-esphome", "2.1.4")
|
cg.add_library("ESP32Async/AsyncTCP", "3.4.4")
|
||||||
elif CORE.is_esp8266:
|
elif CORE.is_esp8266:
|
||||||
# https://github.com/esphome/ESPAsyncTCP
|
# https://github.com/ESP32Async/ESPAsyncTCP
|
||||||
cg.add_library("esphome/ESPAsyncTCP-esphome", "2.0.0")
|
cg.add_library("ESP32Async/ESPAsyncTCP", "2.0.0")
|
||||||
|
@ -75,7 +75,11 @@ void CaptivePortal::start() {
|
|||||||
|
|
||||||
void CaptivePortal::handleRequest(AsyncWebServerRequest *req) {
|
void CaptivePortal::handleRequest(AsyncWebServerRequest *req) {
|
||||||
if (req->url() == "/") {
|
if (req->url() == "/") {
|
||||||
|
#ifndef USE_ESP8266
|
||||||
|
auto *response = req->beginResponse(200, "text/html", INDEX_GZ, sizeof(INDEX_GZ));
|
||||||
|
#else
|
||||||
auto *response = req->beginResponse_P(200, "text/html", INDEX_GZ, sizeof(INDEX_GZ));
|
auto *response = req->beginResponse_P(200, "text/html", INDEX_GZ, sizeof(INDEX_GZ));
|
||||||
|
#endif
|
||||||
response->addHeader("Content-Encoding", "gzip");
|
response->addHeader("Content-Encoding", "gzip");
|
||||||
req->send(response);
|
req->send(response);
|
||||||
return;
|
return;
|
||||||
|
@ -40,7 +40,7 @@ class CaptivePortal : public AsyncWebHandler, public Component {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool canHandle(AsyncWebServerRequest *request) override {
|
bool canHandle(AsyncWebServerRequest *request) const override {
|
||||||
if (!this->active_)
|
if (!this->active_)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ class PrometheusHandler : public AsyncWebHandler, public Component {
|
|||||||
*/
|
*/
|
||||||
void add_label_name(EntityBase *obj, const std::string &value) { relabel_map_name_.insert({obj, value}); }
|
void add_label_name(EntityBase *obj, const std::string &value) { relabel_map_name_.insert({obj, value}); }
|
||||||
|
|
||||||
bool canHandle(AsyncWebServerRequest *request) override {
|
bool canHandle(AsyncWebServerRequest *request) const override {
|
||||||
if (request->method() == HTTP_GET) {
|
if (request->method() == HTTP_GET) {
|
||||||
if (request->url() == "/metrics")
|
if (request->url() == "/metrics")
|
||||||
return true;
|
return true;
|
||||||
|
@ -91,7 +91,7 @@ void DeferredUpdateEventSource::process_deferred_queue_() {
|
|||||||
while (!deferred_queue_.empty()) {
|
while (!deferred_queue_.empty()) {
|
||||||
DeferredEvent &de = deferred_queue_.front();
|
DeferredEvent &de = deferred_queue_.front();
|
||||||
std::string message = de.message_generator_(web_server_, de.source_);
|
std::string message = de.message_generator_(web_server_, de.source_);
|
||||||
if (this->try_send(message.c_str(), "state")) {
|
if (this->send(message.c_str(), "state") != DISCARDED) {
|
||||||
// O(n) but memory efficiency is more important than speed here which is why std::vector was chosen
|
// O(n) but memory efficiency is more important than speed here which is why std::vector was chosen
|
||||||
deferred_queue_.erase(deferred_queue_.begin());
|
deferred_queue_.erase(deferred_queue_.begin());
|
||||||
} else {
|
} else {
|
||||||
@ -131,7 +131,7 @@ void DeferredUpdateEventSource::deferrable_send_state(void *source, const char *
|
|||||||
deq_push_back_with_dedup_(source, message_generator);
|
deq_push_back_with_dedup_(source, message_generator);
|
||||||
} else {
|
} else {
|
||||||
std::string message = message_generator(web_server_, source);
|
std::string message = message_generator(web_server_, source);
|
||||||
if (!this->try_send(message.c_str(), "state")) {
|
if (this->send(message.c_str(), "state") == DISCARDED) {
|
||||||
deq_push_back_with_dedup_(source, message_generator);
|
deq_push_back_with_dedup_(source, message_generator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -171,8 +171,8 @@ void DeferredUpdateEventSourceList::add_new_client(WebServer *ws, AsyncWebServer
|
|||||||
ws->defer([this, ws, es]() { this->on_client_connect_(ws, es); });
|
ws->defer([this, ws, es]() { this->on_client_connect_(ws, es); });
|
||||||
});
|
});
|
||||||
|
|
||||||
es->onDisconnect([this, ws](AsyncEventSource *source, AsyncEventSourceClient *client) {
|
es->onDisconnect([this, ws, es](AsyncEventSourceClient *client) {
|
||||||
ws->defer([this, source]() { this->on_client_disconnect_((DeferredUpdateEventSource *) source); });
|
ws->defer([this, es]() { this->on_client_disconnect_((DeferredUpdateEventSource *) es); });
|
||||||
});
|
});
|
||||||
|
|
||||||
es->handleRequest(request);
|
es->handleRequest(request);
|
||||||
@ -291,14 +291,23 @@ float WebServer::get_setup_priority() const { return setup_priority::WIFI - 1.0f
|
|||||||
|
|
||||||
#ifdef USE_WEBSERVER_LOCAL
|
#ifdef USE_WEBSERVER_LOCAL
|
||||||
void WebServer::handle_index_request(AsyncWebServerRequest *request) {
|
void WebServer::handle_index_request(AsyncWebServerRequest *request) {
|
||||||
|
#ifndef USE_ESP8266
|
||||||
|
AsyncWebServerResponse *response = request->beginResponse(200, "text/html", INDEX_GZ, sizeof(INDEX_GZ));
|
||||||
|
#else
|
||||||
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", INDEX_GZ, sizeof(INDEX_GZ));
|
AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", INDEX_GZ, sizeof(INDEX_GZ));
|
||||||
|
#endif
|
||||||
response->addHeader("Content-Encoding", "gzip");
|
response->addHeader("Content-Encoding", "gzip");
|
||||||
request->send(response);
|
request->send(response);
|
||||||
}
|
}
|
||||||
#elif USE_WEBSERVER_VERSION >= 2
|
#elif USE_WEBSERVER_VERSION >= 2
|
||||||
void WebServer::handle_index_request(AsyncWebServerRequest *request) {
|
void WebServer::handle_index_request(AsyncWebServerRequest *request) {
|
||||||
|
#ifndef USE_ESP8266
|
||||||
|
AsyncWebServerResponse *response =
|
||||||
|
request->beginResponse(200, "text/html", ESPHOME_WEBSERVER_INDEX_HTML, ESPHOME_WEBSERVER_INDEX_HTML_SIZE);
|
||||||
|
#else
|
||||||
AsyncWebServerResponse *response =
|
AsyncWebServerResponse *response =
|
||||||
request->beginResponse_P(200, "text/html", ESPHOME_WEBSERVER_INDEX_HTML, ESPHOME_WEBSERVER_INDEX_HTML_SIZE);
|
request->beginResponse_P(200, "text/html", ESPHOME_WEBSERVER_INDEX_HTML, ESPHOME_WEBSERVER_INDEX_HTML_SIZE);
|
||||||
|
#endif
|
||||||
// No gzip header here because the HTML file is so small
|
// No gzip header here because the HTML file is so small
|
||||||
request->send(response);
|
request->send(response);
|
||||||
}
|
}
|
||||||
@ -317,8 +326,13 @@ void WebServer::handle_pna_cors_request(AsyncWebServerRequest *request) {
|
|||||||
|
|
||||||
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
#ifdef USE_WEBSERVER_CSS_INCLUDE
|
||||||
void WebServer::handle_css_request(AsyncWebServerRequest *request) {
|
void WebServer::handle_css_request(AsyncWebServerRequest *request) {
|
||||||
|
#ifndef USE_ESP8266
|
||||||
|
AsyncWebServerResponse *response =
|
||||||
|
request->beginResponse(200, "text/css", ESPHOME_WEBSERVER_CSS_INCLUDE, ESPHOME_WEBSERVER_CSS_INCLUDE_SIZE);
|
||||||
|
#else
|
||||||
AsyncWebServerResponse *response =
|
AsyncWebServerResponse *response =
|
||||||
request->beginResponse_P(200, "text/css", ESPHOME_WEBSERVER_CSS_INCLUDE, ESPHOME_WEBSERVER_CSS_INCLUDE_SIZE);
|
request->beginResponse_P(200, "text/css", ESPHOME_WEBSERVER_CSS_INCLUDE, ESPHOME_WEBSERVER_CSS_INCLUDE_SIZE);
|
||||||
|
#endif
|
||||||
response->addHeader("Content-Encoding", "gzip");
|
response->addHeader("Content-Encoding", "gzip");
|
||||||
request->send(response);
|
request->send(response);
|
||||||
}
|
}
|
||||||
@ -326,8 +340,13 @@ void WebServer::handle_css_request(AsyncWebServerRequest *request) {
|
|||||||
|
|
||||||
#ifdef USE_WEBSERVER_JS_INCLUDE
|
#ifdef USE_WEBSERVER_JS_INCLUDE
|
||||||
void WebServer::handle_js_request(AsyncWebServerRequest *request) {
|
void WebServer::handle_js_request(AsyncWebServerRequest *request) {
|
||||||
|
#ifndef USE_ESP8266
|
||||||
|
AsyncWebServerResponse *response =
|
||||||
|
request->beginResponse(200, "text/javascript", ESPHOME_WEBSERVER_JS_INCLUDE, ESPHOME_WEBSERVER_JS_INCLUDE_SIZE);
|
||||||
|
#else
|
||||||
AsyncWebServerResponse *response =
|
AsyncWebServerResponse *response =
|
||||||
request->beginResponse_P(200, "text/javascript", ESPHOME_WEBSERVER_JS_INCLUDE, ESPHOME_WEBSERVER_JS_INCLUDE_SIZE);
|
request->beginResponse_P(200, "text/javascript", ESPHOME_WEBSERVER_JS_INCLUDE, ESPHOME_WEBSERVER_JS_INCLUDE_SIZE);
|
||||||
|
#endif
|
||||||
response->addHeader("Content-Encoding", "gzip");
|
response->addHeader("Content-Encoding", "gzip");
|
||||||
request->send(response);
|
request->send(response);
|
||||||
}
|
}
|
||||||
@ -1837,7 +1856,7 @@ std::string WebServer::update_json(update::UpdateEntity *obj, JsonDetail start_c
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool WebServer::canHandle(AsyncWebServerRequest *request) {
|
bool WebServer::canHandle(AsyncWebServerRequest *request) const {
|
||||||
if (request->url() == "/")
|
if (request->url() == "/")
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@ -1859,12 +1878,6 @@ bool WebServer::canHandle(AsyncWebServerRequest *request) {
|
|||||||
|
|
||||||
#ifdef USE_WEBSERVER_PRIVATE_NETWORK_ACCESS
|
#ifdef USE_WEBSERVER_PRIVATE_NETWORK_ACCESS
|
||||||
if (request->method() == HTTP_OPTIONS && request->hasHeader(HEADER_CORS_REQ_PNA)) {
|
if (request->method() == HTTP_OPTIONS && request->hasHeader(HEADER_CORS_REQ_PNA)) {
|
||||||
#ifdef USE_ARDUINO
|
|
||||||
// Header needs to be added to interesting header list for it to not be
|
|
||||||
// nuked by the time we handle the request later.
|
|
||||||
// Only required in Arduino framework.
|
|
||||||
request->addInterestingHeader(HEADER_CORS_REQ_PNA);
|
|
||||||
#endif
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2145,7 +2158,7 @@ void WebServer::handleRequest(AsyncWebServerRequest *request) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool WebServer::isRequestHandlerTrivial() { return false; }
|
bool WebServer::isRequestHandlerTrivial() const { return false; }
|
||||||
|
|
||||||
void WebServer::add_entity_config(EntityBase *entity, float weight, uint64_t group) {
|
void WebServer::add_entity_config(EntityBase *entity, float weight, uint64_t group) {
|
||||||
this->sorting_entitys_[entity] = SortingComponents{weight, group};
|
this->sorting_entitys_[entity] = SortingComponents{weight, group};
|
||||||
|
@ -99,7 +99,7 @@ class DeferredUpdateEventSource : public AsyncEventSource {
|
|||||||
protected:
|
protected:
|
||||||
// surface a couple methods from the base class
|
// surface a couple methods from the base class
|
||||||
using AsyncEventSource::handleRequest;
|
using AsyncEventSource::handleRequest;
|
||||||
using AsyncEventSource::try_send;
|
using AsyncEventSource::send;
|
||||||
|
|
||||||
ListEntitiesIterator entities_iterator_;
|
ListEntitiesIterator entities_iterator_;
|
||||||
// vector is used very specifically for its zero memory overhead even though items are popped from the front (memory
|
// vector is used very specifically for its zero memory overhead even though items are popped from the front (memory
|
||||||
@ -468,11 +468,11 @@ class WebServer : public Controller, public Component, public AsyncWebHandler {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// Override the web handler's canHandle method.
|
/// Override the web handler's canHandle method.
|
||||||
bool canHandle(AsyncWebServerRequest *request) override;
|
bool canHandle(AsyncWebServerRequest *request) const override;
|
||||||
/// Override the web handler's handleRequest method.
|
/// Override the web handler's handleRequest method.
|
||||||
void handleRequest(AsyncWebServerRequest *request) override;
|
void handleRequest(AsyncWebServerRequest *request) override;
|
||||||
/// This web handle is not trivial.
|
/// This web handle is not trivial.
|
||||||
bool isRequestHandlerTrivial() override; // NOLINT(readability-identifier-naming)
|
bool isRequestHandlerTrivial() const override; // NOLINT(readability-identifier-naming)
|
||||||
|
|
||||||
void add_entity_config(EntityBase *entity, float weight, uint64_t group);
|
void add_entity_config(EntityBase *entity, float weight, uint64_t group);
|
||||||
void add_sorting_group(uint64_t group_id, const std::string &group_name, float weight);
|
void add_sorting_group(uint64_t group_id, const std::string &group_name, float weight);
|
||||||
|
@ -36,5 +36,7 @@ async def to_code(config):
|
|||||||
cg.add_library("WiFi", None)
|
cg.add_library("WiFi", None)
|
||||||
cg.add_library("FS", None)
|
cg.add_library("FS", None)
|
||||||
cg.add_library("Update", None)
|
cg.add_library("Update", None)
|
||||||
# https://github.com/esphome/ESPAsyncWebServer/blob/master/library.json
|
if CORE.is_esp8266:
|
||||||
cg.add_library("esphome/ESPAsyncWebServer-esphome", "3.3.0")
|
cg.add_library("ESP8266WiFi", None)
|
||||||
|
# https://github.com/ESP32Async/ESPAsyncWebServer/blob/main/library.json
|
||||||
|
cg.add_library("ESP32Async/ESPAsyncWebServer", "3.7.8")
|
||||||
|
@ -23,7 +23,7 @@ class MiddlewareHandler : public AsyncWebHandler {
|
|||||||
public:
|
public:
|
||||||
MiddlewareHandler(AsyncWebHandler *next) : next_(next) {}
|
MiddlewareHandler(AsyncWebHandler *next) : next_(next) {}
|
||||||
|
|
||||||
bool canHandle(AsyncWebServerRequest *request) override { return next_->canHandle(request); }
|
bool canHandle(AsyncWebServerRequest *request) const override { return next_->canHandle(request); }
|
||||||
void handleRequest(AsyncWebServerRequest *request) override { next_->handleRequest(request); }
|
void handleRequest(AsyncWebServerRequest *request) override { next_->handleRequest(request); }
|
||||||
void handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len,
|
void handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len,
|
||||||
bool final) override {
|
bool final) override {
|
||||||
@ -32,7 +32,7 @@ class MiddlewareHandler : public AsyncWebHandler {
|
|||||||
void handleBody(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) override {
|
void handleBody(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) override {
|
||||||
next_->handleBody(request, data, len, index, total);
|
next_->handleBody(request, data, len, index, total);
|
||||||
}
|
}
|
||||||
bool isRequestHandlerTrivial() override { return next_->isRequestHandlerTrivial(); }
|
bool isRequestHandlerTrivial() const override { return next_->isRequestHandlerTrivial(); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
AsyncWebHandler *next_;
|
AsyncWebHandler *next_;
|
||||||
@ -131,12 +131,12 @@ class OTARequestHandler : public AsyncWebHandler {
|
|||||||
void handleRequest(AsyncWebServerRequest *request) override;
|
void handleRequest(AsyncWebServerRequest *request) override;
|
||||||
void handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len,
|
void handleUpload(AsyncWebServerRequest *request, const String &filename, size_t index, uint8_t *data, size_t len,
|
||||||
bool final) override;
|
bool final) override;
|
||||||
bool canHandle(AsyncWebServerRequest *request) override {
|
bool canHandle(AsyncWebServerRequest *request) const override {
|
||||||
return request->url() == "/update" && request->method() == HTTP_POST;
|
return request->url() == "/update" && request->method() == HTTP_POST;
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOLINTNEXTLINE(readability-identifier-naming)
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
||||||
bool isRequestHandlerTrivial() override { return false; }
|
bool isRequestHandlerTrivial() const override { return false; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
uint32_t last_ota_progress_{0};
|
uint32_t last_ota_progress_{0};
|
||||||
|
@ -135,8 +135,8 @@ class AsyncWebServerRequest {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
// NOLINTNEXTLINE(readability-identifier-naming)
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
||||||
AsyncWebServerResponse *beginResponse_P(int code, const char *content_type, const uint8_t *data,
|
AsyncWebServerResponse *beginResponse(int code, const char *content_type, const uint8_t *data,
|
||||||
const size_t data_size) {
|
const size_t data_size) {
|
||||||
auto *res = new AsyncWebServerResponseProgmem(this, data, data_size); // NOLINT(cppcoreguidelines-owning-memory)
|
auto *res = new AsyncWebServerResponseProgmem(this, data, data_size); // NOLINT(cppcoreguidelines-owning-memory)
|
||||||
this->init_response_(res, code, content_type);
|
this->init_response_(res, code, content_type);
|
||||||
return res;
|
return res;
|
||||||
@ -211,7 +211,7 @@ class AsyncWebHandler {
|
|||||||
public:
|
public:
|
||||||
virtual ~AsyncWebHandler() {}
|
virtual ~AsyncWebHandler() {}
|
||||||
// NOLINTNEXTLINE(readability-identifier-naming)
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
||||||
virtual bool canHandle(AsyncWebServerRequest *request) { return false; }
|
virtual bool canHandle(AsyncWebServerRequest *request) const { return false; }
|
||||||
// NOLINTNEXTLINE(readability-identifier-naming)
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
||||||
virtual void handleRequest(AsyncWebServerRequest *request) {}
|
virtual void handleRequest(AsyncWebServerRequest *request) {}
|
||||||
// NOLINTNEXTLINE(readability-identifier-naming)
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
||||||
@ -220,7 +220,7 @@ class AsyncWebHandler {
|
|||||||
// NOLINTNEXTLINE(readability-identifier-naming)
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
||||||
virtual void handleBody(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) {}
|
virtual void handleBody(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) {}
|
||||||
// NOLINTNEXTLINE(readability-identifier-naming)
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
||||||
virtual bool isRequestHandlerTrivial() { return true; }
|
virtual bool isRequestHandlerTrivial() const { return true; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef USE_WEBSERVER
|
#ifdef USE_WEBSERVER
|
||||||
@ -290,7 +290,7 @@ class AsyncEventSource : public AsyncWebHandler {
|
|||||||
~AsyncEventSource() override;
|
~AsyncEventSource() override;
|
||||||
|
|
||||||
// NOLINTNEXTLINE(readability-identifier-naming)
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
||||||
bool canHandle(AsyncWebServerRequest *request) override {
|
bool canHandle(AsyncWebServerRequest *request) const override {
|
||||||
return request->method() == HTTP_GET && request->url() == this->url_;
|
return request->method() == HTTP_GET && request->url() == this->url_;
|
||||||
}
|
}
|
||||||
// NOLINTNEXTLINE(readability-identifier-naming)
|
// NOLINTNEXTLINE(readability-identifier-naming)
|
||||||
|
@ -65,7 +65,7 @@ lib_deps =
|
|||||||
SPI ; spi (Arduino built-in)
|
SPI ; spi (Arduino built-in)
|
||||||
Wire ; i2c (Arduino built-int)
|
Wire ; i2c (Arduino built-int)
|
||||||
heman/AsyncMqttClient-esphome@1.0.0 ; mqtt
|
heman/AsyncMqttClient-esphome@1.0.0 ; mqtt
|
||||||
esphome/ESPAsyncWebServer-esphome@3.3.0 ; web_server_base
|
ESP32Async/ESPAsyncWebServer@3.7.8 ; web_server_base
|
||||||
fastled/FastLED@3.9.16 ; fastled_base
|
fastled/FastLED@3.9.16 ; fastled_base
|
||||||
mikalhart/TinyGPSPlus@1.1.0 ; gps
|
mikalhart/TinyGPSPlus@1.1.0 ; gps
|
||||||
freekode/TM1651@1.0.1 ; tm1651
|
freekode/TM1651@1.0.1 ; tm1651
|
||||||
@ -100,7 +100,7 @@ lib_deps =
|
|||||||
${common:arduino.lib_deps}
|
${common:arduino.lib_deps}
|
||||||
ESP8266WiFi ; wifi (Arduino built-in)
|
ESP8266WiFi ; wifi (Arduino built-in)
|
||||||
Update ; ota (Arduino built-in)
|
Update ; ota (Arduino built-in)
|
||||||
esphome/ESPAsyncTCP-esphome@2.0.0 ; async_tcp
|
ESP32Async/ESPAsyncTCP@2.0.0 ; async_tcp
|
||||||
ESP8266HTTPClient ; http_request (Arduino built-in)
|
ESP8266HTTPClient ; http_request (Arduino built-in)
|
||||||
ESP8266mDNS ; mdns (Arduino built-in)
|
ESP8266mDNS ; mdns (Arduino built-in)
|
||||||
DNSServer ; captive_portal (Arduino built-in)
|
DNSServer ; captive_portal (Arduino built-in)
|
||||||
@ -130,7 +130,7 @@ lib_deps =
|
|||||||
WiFi ; wifi,web_server_base,ethernet (Arduino built-in)
|
WiFi ; wifi,web_server_base,ethernet (Arduino built-in)
|
||||||
Update ; ota,web_server_base (Arduino built-in)
|
Update ; ota,web_server_base (Arduino built-in)
|
||||||
${common:arduino.lib_deps}
|
${common:arduino.lib_deps}
|
||||||
esphome/AsyncTCP-esphome@2.1.4 ; async_tcp
|
ESP32Async/AsyncTCP@3.4.4 ; async_tcp
|
||||||
WiFiClientSecure ; http_request,nextion (Arduino built-in)
|
WiFiClientSecure ; http_request,nextion (Arduino built-in)
|
||||||
HTTPClient ; http_request,nextion (Arduino built-in)
|
HTTPClient ; http_request,nextion (Arduino built-in)
|
||||||
ESPmDNS ; mdns (Arduino built-in)
|
ESPmDNS ; mdns (Arduino built-in)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user