ESP32 module wake on touch, wake on ext1
Hi there,
I'm running MicroPython v1.9.4-409-g434975def and have successfully used a Pin irq to wake from deep sleep and can confirm the wake reason:
import machine
from machine import Pin, TouchPad, deepsleep
import time
wake = Pin(14, mode = Pin.IN, pull = Pin.PULL_DOWN)
wake.irq(trigger=Pin.WAKE_HIGH, wake = machine.DEEPSLEEP)
time.sleep(5)
deepsleep(5*1000)
after bringing Pin 14 line up to 3V3
Reset cause: DEEPSLEEP_RESET
Wake reason: PIN_WAKE/EXT0_WAKE
Now I'm trying to do the same but with a TouchPad input:
from machine import Pin, TouchPad, deepsleep
import time
import esp32
wake = Pin(14, mode = Pin.IN)
touch = TouchPad(wake)
touch.config(500)
esp32.wake_on_touch(True)
time.sleep(5)
deepsleep(5*1000)
(after 5 seconds and touching/untouching wire to Pin 14)
Reset cause: DEEPSLEEP_RESET
Wake reason: TIMER_WAKE
The range of my touch.read() values are around 700 when untouched, and down to around 100 when touched. I've tried adjusting the touch.config to various settings but I cannot get my ESP32 to wake from touch.. only from timer in this mode.
Lastly,
I've tried using wake_on_ext1
import machine
from machine import Pin, TouchPad
import time
import esp32
wake = Pin(14, mode = Pin.IN, pull = Pin.PULL_DOWN)
esp32.wake_on_ext1(pins = [wake], level = Pin.WAKE_HIGH)
time.sleep(5)
deepsleep(5*1000)
But this resets immediately regardless of whether I bring Pin 14 high or not (not in touch mode, mind you).
Reset cause: DEEPSLEEP_RESET
Wake reason: EXT1_WAKE
I've browsed through the esp32 module code, but I'm not sure if any of the wake modes work?
Any ideas?
modmachine: Add `machine.wake_pins`.
Summary
When waking from deep sleep, it could be helpful to know what pins triggered the wake up since the wake pins could be configured to multiple pins.
Based on work that @m-cas did in this PR - https://github.com/micropython/micropython/pull/15498.
Testing
Tested ESP32_GENERIC_C3 with:
import machine
import esp32
esp32.wake_on_gpio((machine.Pin(5),machine.Pin(2)), esp32.WAKEUP_ANY_HIGH)
machine.deepsleep()
After wakeup checked that machine.wake_pins() returned the correct pin that trigerred the wake.
Trade-offs and Alternatives
I decided to place the method in machine together with wake_reason, since it is feasible that other ports
will want the exact same interface.