-
Notifications
You must be signed in to change notification settings - Fork 7.6k
Add touch sleep wakeup API #7439
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 5 commits
d8a1e3e
2f33ba8
d0a7b26
7317a04
ff856e1
ecefe75
555c2c4
5f90810
3903189
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,7 +11,13 @@ Author: | |
Pranav Cherukupalli <[email protected]> | ||
*/ | ||
|
||
#define Threshold 40 /* Greater the value, more the sensitivity */ | ||
#if CONFIG_IDF_TARGET_ESP32 | ||
#define THRESHOLD 40 /* Greater the value, more the sensitivity */ | ||
#elif CONFIG_IDF_TARGET_ESP32S2 | ||
#define THRESHOLD 30000 /* Lower the value, more the sensitivity */ | ||
#else //CONFIG_IDF_TARGET_ESP32S3 + default for other chips (to be adjusted) */ | ||
#define THRESHOLD 80000 /* Lower the value, more the sensitivity */ | ||
#endif | ||
|
||
RTC_DATA_ATTR int bootCount = 0; | ||
touch_pad_t touchPin; | ||
|
@@ -42,24 +48,31 @@ has been awaken from sleep | |
void print_wakeup_touchpad(){ | ||
touchPin = esp_sleep_get_touchpad_wakeup_status(); | ||
|
||
switch(touchPin) | ||
{ | ||
case 0 : Serial.println("Touch detected on GPIO 4"); break; | ||
case 1 : Serial.println("Touch detected on GPIO 0"); break; | ||
case 2 : Serial.println("Touch detected on GPIO 2"); break; | ||
case 3 : Serial.println("Touch detected on GPIO 15"); break; | ||
case 4 : Serial.println("Touch detected on GPIO 13"); break; | ||
case 5 : Serial.println("Touch detected on GPIO 12"); break; | ||
case 6 : Serial.println("Touch detected on GPIO 14"); break; | ||
case 7 : Serial.println("Touch detected on GPIO 27"); break; | ||
case 8 : Serial.println("Touch detected on GPIO 33"); break; | ||
case 9 : Serial.println("Touch detected on GPIO 32"); break; | ||
default : Serial.println("Wakeup not by touchpad"); break; | ||
} | ||
} | ||
|
||
void callback(){ | ||
//placeholder callback function | ||
#if CONFIG_IDF_TARGET_ESP32 | ||
switch(touchPin) | ||
{ | ||
case 0 : Serial.println("Touch detected on GPIO 4"); break; | ||
case 1 : Serial.println("Touch detected on GPIO 0"); break; | ||
case 2 : Serial.println("Touch detected on GPIO 2"); break; | ||
case 3 : Serial.println("Touch detected on GPIO 15"); break; | ||
case 4 : Serial.println("Touch detected on GPIO 13"); break; | ||
case 5 : Serial.println("Touch detected on GPIO 12"); break; | ||
case 6 : Serial.println("Touch detected on GPIO 14"); break; | ||
case 7 : Serial.println("Touch detected on GPIO 27"); break; | ||
case 8 : Serial.println("Touch detected on GPIO 33"); break; | ||
case 9 : Serial.println("Touch detected on GPIO 32"); break; | ||
default : Serial.println("Wakeup not by touchpad"); break; | ||
} | ||
#else | ||
if(touchPin < TOUCH_PAD_MAX) | ||
{ | ||
Serial.printf("Touch detected on GPIO %d\n", touchPin); | ||
} | ||
else | ||
{ | ||
Serial.println("Wakeup not by touchpad"); | ||
} | ||
#endif | ||
} | ||
|
||
void setup(){ | ||
|
@@ -74,11 +87,8 @@ void setup(){ | |
print_wakeup_reason(); | ||
print_wakeup_touchpad(); | ||
|
||
//Setup interrupt on Touch Pad 3 (GPIO15) | ||
touchAttachInterrupt(T3, callback, Threshold); | ||
|
||
//Configure Touchpad as wakeup source | ||
esp_sleep_enable_touchpad_wakeup(); | ||
//Setup sleep wakeup on Touch Pad 3 (GPIO15 for ESP32) / (GPIO3 for ESP32-S2 and S3) | ||
touchSleepWakeUpEnable(T3,THRESHOLD); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have tested it adding 2 touch pin to the sketch: touchSleepWakeUpEnable(T2,THRESHOLD);
touchSleepWakeUpEnable(T7,THRESHOLD); ESP32 wakes up with both and reports the right pin. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Do we need to add more pins for wakeup to the example? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Maybe... when it is an ESP32 only. Just to demonstrate it?! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Added both :)
|
||
|
||
//Go to sleep now | ||
Serial.println("Going to sleep now"); | ||
|
@@ -88,4 +98,4 @@ void setup(){ | |
|
||
void loop(){ | ||
//This will never be reached | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have tested it and it works better with this setup:
ESP32 -> Threshold = 40
S2/S3 -> Threshold = 1000
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For ESP32 we do have threshold 40.
But for S2/S3 it cannot be that small. Normal reading is higher that this value.
For S2 if the pad is touched, reading from touchRead is above 45k. For S3 its above 95k
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think that this is actually the delta, not the reading value itself.
It worked better (faster when touching the S2/S3 pad) when I changed it to 1,000
You can try it to check it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have tested that a bit now, and managed to change it to 5000. That worked the best for me.
The 1000 was too much sensitive. I have attached the Dupont cable to the pin and it triggered even if I touched the rubber part of the cable, not the wire.
The 5000 triggers immediately I touch the wire :)