ESP32: RTC no function 'wake_on_ext0'
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!
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) -->