diff --git a/esphome/components/http_request/__init__.py b/esphome/components/http_request/__init__.py index 9aa0c42fa2..878f362f28 100644 --- a/esphome/components/http_request/__init__.py +++ b/esphome/components/http_request/__init__.py @@ -10,6 +10,7 @@ from esphome.const import ( CONF_TIMEOUT, CONF_TRIGGER_ID, CONF_URL, + CONF_WATCHDOG_TIMEOUT, PLATFORM_HOST, __version__, ) @@ -43,7 +44,6 @@ CONF_USERAGENT = "useragent" CONF_VERIFY_SSL = "verify_ssl" CONF_FOLLOW_REDIRECTS = "follow_redirects" CONF_REDIRECT_LIMIT = "redirect_limit" -CONF_WATCHDOG_TIMEOUT = "watchdog_timeout" CONF_BUFFER_SIZE_RX = "buffer_size_rx" CONF_BUFFER_SIZE_TX = "buffer_size_tx" CONF_CA_CERTIFICATE_PATH = "ca_certificate_path" diff --git a/esphome/components/rp2040/__init__.py b/esphome/components/rp2040/__init__.py index 3d73cad195..c3e11336a9 100644 --- a/esphome/components/rp2040/__init__.py +++ b/esphome/components/rp2040/__init__.py @@ -10,6 +10,7 @@ from esphome.const import ( CONF_PLATFORM_VERSION, CONF_SOURCE, CONF_VERSION, + CONF_WATCHDOG_TIMEOUT, KEY_CORE, KEY_FRAMEWORK_VERSION, KEY_TARGET_FRAMEWORK, @@ -147,6 +148,10 @@ CONFIG_SCHEMA = cv.All( { cv.Required(CONF_BOARD): cv.string_strict, cv.Optional(CONF_FRAMEWORK, default={}): ARDUINO_FRAMEWORK_SCHEMA, + cv.Optional(CONF_WATCHDOG_TIMEOUT, default="8388ms"): cv.All( + cv.positive_time_period_milliseconds, + cv.Range(max=cv.TimePeriod(milliseconds=8388)), + ), } ), set_core_data, @@ -189,6 +194,8 @@ async def to_code(config): cg.RawExpression(f"VERSION_CODE({ver.major}, {ver.minor}, {ver.patch})"), ) + cg.add_define("USE_RP2040_WATCHDOG_TIMEOUT", config[CONF_WATCHDOG_TIMEOUT]) + def add_pio_file(component: str, key: str, data: str): try: diff --git a/esphome/components/rp2040/core.cpp b/esphome/components/rp2040/core.cpp index c20401c791..d88e9f54b7 100644 --- a/esphome/components/rp2040/core.cpp +++ b/esphome/components/rp2040/core.cpp @@ -1,6 +1,7 @@ #ifdef USE_RP2040 #include "core.h" +#include "esphome/core/defines.h" #include "esphome/core/hal.h" #include "esphome/core/helpers.h" @@ -19,7 +20,13 @@ void arch_restart() { continue; } } -void arch_init() { watchdog_enable(0x7fffff, false); } + +void arch_init() { +#if USE_RP2040_WATCHDOG_TIMEOUT > 0 + watchdog_enable(USE_RP2040_WATCHDOG_TIMEOUT, false); +#endif +} + void IRAM_ATTR HOT arch_feed_wdt() { watchdog_update(); } uint8_t progmem_read_byte(const uint8_t *addr) { diff --git a/esphome/const.py b/esphome/const.py index 199064dc3a..2ca79e70c2 100644 --- a/esphome/const.py +++ b/esphome/const.py @@ -963,6 +963,7 @@ CONF_WAND_ID = "wand_id" CONF_WARM_WHITE = "warm_white" CONF_WARM_WHITE_COLOR_TEMPERATURE = "warm_white_color_temperature" CONF_WATCHDOG_THRESHOLD = "watchdog_threshold" +CONF_WATCHDOG_TIMEOUT = "watchdog_timeout" CONF_WEB_SERVER = "web_server" CONF_WEB_SERVER_ID = "web_server_id" CONF_WEIGHT = "weight"