← index #11787PR #16883
Likely Duplicate · high · value 4.898
QUERY · ISSUE

ESP32-C3 wakeup from deepsleep not happening through GPIO1

openby pbdaranopened 2023-06-15updated 2024-09-02
bugport-esp32

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.

CANDIDATE · PULL REQUEST

Support wakeup gpio source of ESP32C3 and I was tuned wakeup source one by one each soc.

closedby pop-aruaruopened 2025-03-09updated 2025-03-09

<!-- 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) -->

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied