← index #4142PR #16883
Related · high · value 0.433
QUERY · ISSUE

ESP32: RTC no function 'wake_on_ext0'

openby linuskohleropened 2018-09-15updated 2019-05-21
port-esp32

Hello,
this question may already be answered, but I can't find any working version for me.

I'm trying to use an interrupt-Pin on my newly flashed ESP32.
I tried with multiple snippets I found online (e.g. this or this), but it always breaks down to the point that RTC doesn't have the attribute now() or wake_on_ext0.

AttributeError: 'RTC' object has no attribute 'wake_on_ext0'

Is there anything I'm doing wrong? I'm using a flashed ESP32 wroom and the latest binaries from here (esp32-20180915-v1.9.4-528-gabb536da4.bin).

Thanks for your help!

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