Hi there,
So , AFAIK the GPIO2 is RTC capable and should support deep sleep wake-up. You’re using wake_on_ext1()
on on the XIAO ESP32C6 it’s relatively new to python, but it’s not waking from deep sleep via external pin, Hmmm even though your logic seem correct.
it’s likely the MicroPython BSP doesn’t fully support GPIO wake from deep sleep yet on the ESP32-C6.
If using wake_on_ext1()
or wake_on_ext0()
does not work despite correct wiring and logic, and only timeout wake works, it confirms the issue is firmware-level.
can you test if ?
If EXT1 doesn’t behave, try wake_on_ext0()
instead, which supports a single pin but might be better supported:
from esp32 import wake_on_ext0
wake_on_ext0(pin=door_sw, level=esp32.WAKEUP_ANY_HIGH) # or WAKEUP_ALL_LOW
you’ll get Warning: If esp32.WAKEUP_ANY_HIGH
or constants aren’t defined on the C6 port, that confirms the MicroPython port is incomplete.
try using an external pull-down or pull-up** if needed. Don’t rely solely on internal Pin.PULL_UP
during deep sleep — some pins lose their pull config during deepsleep.
Try external 10k pull-up resistor on GPIO2.
Does the Basic Sleep work ?
Test basic deep sleep without any wake source
Just test whether the system goes to deep sleep and reboots normally after timeout:
import machine
machine.deepsleep(5000)
If this works, but GPIO wake doesn’t — then it’s 100% a MicroPython firmware issue, not hardware.
Alternative: Use Arduino firmware instead
The Arduino BSP 3.2.0 for Xiao ESP32C6 has full deep sleep + GPIO wakeup working. I’ve personally tested it (PJ can confirm too ).
If your project isn’t tied to Python, use Arduino for stable GPIO wake from sleep.
HTH
GL PJ
Our AI , said this… too
- The Seeed-provided MicroPython firmware may not fully support all light/deep sleep wake sources yet on the ESP32-C6 — this is likely tied to IDF support for deep sleep IO muxing not being complete in MicroPython for the C6 chip.
- The C6 port is still in preview/unstable phase, even in
v1.24.x-preview
.