From 3fb5b289309a662db2c2ac26852ca01317480df9 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 5 Jan 2026 07:40:04 -1000 Subject: [PATCH] [captive_portal] Avoid defer overhead on ESP8266 when saving WiFi credentials (#12981) --- esphome/components/captive_portal/captive_portal.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/esphome/components/captive_portal/captive_portal.cpp b/esphome/components/captive_portal/captive_portal.cpp index d0515166b6..5ba70bcc50 100644 --- a/esphome/components/captive_portal/captive_portal.cpp +++ b/esphome/components/captive_portal/captive_portal.cpp @@ -54,8 +54,13 @@ void CaptivePortal::handle_wifisave(AsyncWebServerRequest *request) { " SSID='%s'\n" " Password=" LOG_SECRET("'%s'"), ssid.c_str(), psk.c_str()); +#ifdef USE_ESP8266 + // ESP8266 is single-threaded, call directly + wifi::global_wifi_component->save_wifi_sta(ssid, psk); +#else // Defer save to main loop thread to avoid NVS operations from HTTP thread this->defer([ssid, psk]() { wifi::global_wifi_component->save_wifi_sta(ssid, psk); }); +#endif request->redirect(ESPHOME_F("/?save")); }