External wakeup from deep sleep on XIAO ESP32C

In deep sleep mode on XIAO ESP32C3 I can use a timer to wake up the XIAO from deep sleep every x seconds, check this example. The power consumption during deep sleep is an astonishing ~41uA (great success in Borats voice).
But in my case I need to wake up the XIAO from DEEP sleep using external sources. I came across this official documentation by espressif. The line that says ESP32C3 can’t be woken up from deep sleep using EXT0 and EXT1 as the case with the standard ESP32 killed my project in its crib :cry:
Is there any other ways to wake up the board from deep sleep using external triggers? Should I give up and choose some other processor, like the standard ESP32?

Did you ever find a solution for this? I’m reading the same thing you are and coming to the same conclusion. The only idea I have is to use an external trigger to power on the entire chip (FET + dry contact?) but that won’t work for all use cases.

Same question here. Is it possible to use the JTAG pad “EN” for this purpose. According to the Eagle schematic the Reset button is coupled by a 10K resistor to VCC 3.3v and attached to the CHIP_EN pin of the espressif chip, and the other side attached to ground. VCC and Ground are coupled with a 100nF capacitor.

Can you solder/connect the same setup on the “EN” JTAG pad ? Anyone tried that ?

I haven’t been working on the project since christmas :frowning: I really don’t remember if I solved the isse with external interrupts, All I remember that it is possible to wakeup from deepsleep using external source, but can’t provide further info. All what I could find in my Code folder was this below, which I copied from somewhere (Don’t even remember from which website) you may try it, if it works. I will come back here to leave a reply if I resumed working on the project and got new expreince

#include "hal/gpio_types.h"
#include "esp_err.h"
#include "esp_sleep.h"
#define uS_TO_S_FACTOR 1000000ULL  //Conversion factor for micro seconds to seconds
#define TIME_TO_SLEEP 20           //Time ESP32 will go to sleep (in seconds)
#define rLed D0                    //red
#define yLed D1                    //yellow
#define gLed D2                    //greed (this should not blink as the board should be in sleep mode)

struct Button {
  const uint8_t PIN;
  uint32_t numberKeyPresses;
  bool pressed;

Button button1 = { D6, 0, false };

//variables to keep track of the timing of recent interrupts
unsigned long button_time = 0;
unsigned long last_button_time = 0;

void IRAM_ATTR isr() {
  button_time = millis();
  if (button_time - last_button_time > 250) {
    button1.pressed = true;
    last_button_time = button_time;

void setup() {
  pinMode(button1.PIN, INPUT_PULLUP);
  attachInterrupt(button1.PIN, isr, FALLING);
  esp_sleep_enable_ext0_wakeup(GPIO_NUM_21, 1);

void loop() {
  if (button1.pressed) {
    Serial.printf("Button has been pressed %u times\n", button1.numberKeyPresses);
    button1.pressed = false;

void led_Flash(uint16_t flashes, uint16_t delaymS) {
  uint16_t index;
  for (index = 1; index <= flashes; index++) {
    digitalWrite(LED1, HIGH);
    digitalWrite(LED1, LOW);