ESP32-C3 wakeup from deepsleep not happening through GPIO1
GPIO1 of ESP32-C3 is a RTC GPIO and should be able to wakeup the device from deepsleep mode.
But it seems, in micropython, the GPIO1 is not defined as wakeup.
I want to wake my device using GPIO1. Please help with this.
Support wakeup gpio source of ESP32C3 and I was tuned wakeup source one by one each soc.
<!-- Thanks for submitting a Pull Request! We appreciate you spending the
time to improve MicroPython. Please provide enough information so that
others can review your Pull Request.
Before submitting, please read:
https://github.com/micropython/micropython/blob/master/CODEOFCONDUCT.md
https://github.com/micropython/micropython/wiki/ContributorGuidelines
Please check any CI failures that appear after your Pull Request is opened.
-->
Summary
I was add deepsleep wakeup by gpio on ESP32C3.
new function and const in esp32 module:
- wake_on_gpio([machine.Pin],level])
level
- WAKEUP_GPIO_HIGH
- WAKEUP_GPIO_LOW
almost same esp32.wake_on_ext1 and esp32.wake_on_ext0
And I was tuned struct machine_rtc_config_t in machine_rtc.h file by soc selector in ports/esp32:
- SOC_GPIO_SUPPORT_DEEPSLEEP_WAKEUP
- SOC_PM_SUPPORT_EXT0_WAKEUP
- SOC_PM_SUPPORT_EXT1_WAKEUP
- SOC_ULP_SUPPORTED
- SOC_TOUCH_SENSOR_SUPPORTED
And I also changed some files that came with it.
Testing
- build test:
build-ESP32_GENERIC
build-ESP32_GENERIC_C3
build-ESP32_GENERIC_C6
build-ESP32_GENERIC_S2
build-ESP32_GENERIC_S3
ESP_IDF_VERSION=5.2
on MAC-OS
- deepsleep wakeup test:
ESP32_GENERIC_C3 on seeed xiao-esp32c3
test micropython code
import time
import time
import esp32
from machine import Pin,deepsleep,PWM
pwm = PWM(5,freq=50)
hz0=400
pwm.duty_u16(0x800)
pwm.freq(hz0)
time.sleep(10) # you can connect while 10sec.
a=Pin(2,Pin.IN,pull=Pin.PULL_UP,hold=True)
b=Pin(3,Pin.IN,pull=Pin.PULL_UP,hold=True)
c=Pin(4,Pin.IN,pull=Pin.PULL_UP,hold=True)
esp32.wake_on_gpio([b,c],esp32.WAKEUP_GPIO_HIGH)
esp32.wake_on_gpio([a],esp32.WAKEUP_GPIO_LOW)
deepsleep(60_000) # 60sec
# deepsleep() # forever
Trade-offs and Alternatives
Depending on the soc feature, the functions and constants available to the micropython esp32 module change.
Therefore, the python code becomes more device-dependent.
<!-- If the Pull Request has some negative impact (i.e. increased code size)
then please explain why you think the trade-off improvement is worth it.
If you can think of alternative ways to do this, please explain that here too.
Delete this heading if not relevant (i.e. small fixes) -->