you can call esp_task_wdt_reconfigure - see Espressif WDT reference
have a look at
// ESP32 WDT test - tested on ESP32, ESP32S3, ESP32C3
// for ESP32 core V3.x see https://iotassistant.io/esp32/fixing-error-hardware-wdt-arduino-esp32/
// and https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/wdts.html
// on powerup set WDT timeout to 10 seconds
// print count every second - enter new WDT timeout on keyboard
#include <esp_task_wdt.h>
#define WDT_TIMEOUT 10000 // WDT timeout
//if 1 core doesn't work, try with 2
#define CONFIG_FREERTOS_NUMBER_OF_CORES 1
esp_task_wdt_config_t twdt_config = {
.timeout_ms = WDT_TIMEOUT,
.idle_core_mask = (1 << CONFIG_FREERTOS_NUMBER_OF_CORES) - 1, // Bitmask of all cores
.trigger_panic = true,
};
void setup() {
Serial.begin(115200);
delay(1000);
int watchDogTimerReset = 0, brownOutReset = 0;
Serial.println("\n\nTesting WDT with ESP32 Arduino Core 3.x");
Serial.println("Configuring WDTtimeout 10seconds");
esp_task_wdt_deinit(); //wdt is enabled by default, so we need to deinit it first
esp_task_wdt_init(&twdt_config); //enable panic so ESP32 restarts
esp_task_wdt_add(NULL); //add current thread to WDT watch
// get reason for powerup reset and save to NVM
int reason = print_reset_reason();
switch (reason) {
case ESP_RST_POWERON:
Serial.printf("POR reset\n");
break;
case ESP_RST_BROWNOUT:
brownOutReset = 1;
Serial.printf("Brown out reset\n");
break;
case ESP_RST_DEEPSLEEP:
Serial.printf("Exit from Sleep detected\r\n");
break;
case ESP_RST_WDT:
case ESP_RST_TASK_WDT:
Serial.printf("Watchdog timer reset\n");
watchDogTimerReset = 1;
break;
}
}
void loop() {
static char ch = '0';
if (Serial.available()) { // read new WDT timeout
int i;
if ((i = Serial.parseInt()) > 0) set_WDT(i);
}
delay(1000); // wait for a second
Serial.print(ch); // print second counter
if (ch == '9') ch = '0';
else ch++;
}
// setup WDT timeout
void set_WDT(int timeout) {
twdt_config.timeout_ms = timeout;
esp_task_wdt_reconfigure(&twdt_config);
Serial.printf("\n new WDT timeout %d\n", timeout);
}
// print and return reason for system reset
// see https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/misc_system_api.html#_CPPv418esp_reset_reason_t
int print_reset_reason(void) {
int reason = esp_reset_reason();
Serial.printf("CPU reset reason: %d ", reason);
switch (reason) {
case ESP_RST_UNKNOWN: Serial.println("unknown_RESET"); break;
case ESP_RST_POWERON: Serial.println("POWERON_RESET"); break;
case ESP_RST_SW: Serial.println("SW_RESET"); break;
case ESP_RST_PANIC: Serial.println("PANIC_RESET"); break;
//case ESP_RST_INT_WD: Serial.println("INTERRUPT_WDT_RESET"); break;
case ESP_RST_TASK_WDT: Serial.println("TASK_WDT_RESET"); break;
case ESP_RST_WDT: Serial.println("OTHER_WDT_RESET"); break;
case ESP_RST_DEEPSLEEP: Serial.println("EXIT_DEEP_SLEEP_RESET"); break;
case ESP_RST_BROWNOUT: Serial.println("BROWNOUT_RESET"); break;
case ESP_RST_SDIO:
Serial.println("SDIO_RESET");
break;
//case ESP_RST_USB: Serial.println("USB_RESET"); break;
}
return reason;
}
test on ESP32 WDT timeout 10, 20 then 30seconds
Testing WDT with ESP32 Arduino Core 3.x
Configuring WDTtimeout 10seconds
CPU reset reason: 1 POWERON_RESET
POR reset
0123456789E (11006) task_wdt: Task watchdog got triggered. The following tasks/users did not reset the watchdog in time:
E (11006) task_wdt: - loopTask (CPU 1)
E (11007) task_wdt: Tasks currently running:
E (11007) task_wdt: CPU 0: IDLE0
E (11007) task_wdt: CPU 1: IDLE1
E (11010) task_wdt: Aborting.
E (11021) task_wdt: Print CPU 1 (current core) backtrace
Backtrace: 0x400866bb:0x3ffbcb90 0x400d91e6:0x3ffbcbb0 0x40088da4:0x3ffbcbd0 0x4008a23d:0x3ffbcbf0
ELF file SHA256: 31cec5d1d2fd79da
Rebooting...
ets Jul 29 2019 12:21:46
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
Testing WDT with ESP32 Arduino Core 3.x
Configuring WDTtimeout 10seconds
CPU reset reason: 6 TASK_WDT_RESET
Watchdog timer reset
01
new WDT timeout 20000
2345678901234567890E (24557) task_wdt: Task watchdog got triggered. The following tasks/users did not reset the watchdog in time:
E (24557) task_wdt: - loopTask (CPU 1)
E (24558) task_wdt: Tasks currently running:
E (24558) task_wdt: CPU 0: IDLE0
E (24558) task_wdt: CPU 1: IDLE1
E (24561) task_wdt: Aborting.
E (24571) task_wdt: Print CPU 1 (current core) backtrace
Backtrace: 0x400866bb:0x3ffbcb90 0x400d91e6:0x3ffbcbb0 0x40088da4:0x3ffbcbd0 0x4008a23d:0x3ffbcbf0
ELF file SHA256: 31cec5d1d2fd79da
Rebooting...
ets Jul 29 2019 12:21:46
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:4832
load:0x40078000,len:16460
load:0x40080400,len:4
load:0x40080404,len:3504
entry 0x400805cc
Testing WDT with ESP32 Arduino Core 3.x
Configuring WDTtimeout 10seconds
CPU reset reason: 6 TASK_WDT_RESET
Watchdog timer reset
01
new WDT timeout 30000
23456789012345678901234567890E (34629) task_wdt: Task watchdog got triggered. The following tasks/users did not reset the watchdog in time:
E (34629) task_wdt: - loopTask (CPU 1)
E (34630) task_wdt: Tasks currently running:
E (34630) task_wdt: CPU 0: IDLE0
E (34630) task_wdt: CPU 1: IDLE1
E (34633) task_wdt: Aborting.
E (34643) task_wdt: Print CPU 1 (current core) backtrace
also tested on ESP32-S3-DevKitC-1 and ESP32-C3-MINI-1 - similar results