Skip to content

Commit 772af90

Browse files
committed
feat(touch_button_sensor): add enhanced touch button driver
1 parent 252d34d commit 772af90

32 files changed

+1647
-3
lines changed

.github/workflows/upload_component.yml

+1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ jobs:
8383
components/sensors/sensor_hub;
8484
components/spi_bus;
8585
components/storage/eeprom/at24c02;
86+
components/touch/touch_button_sensor;
8687
components/touch/touch_proximity_sensor;
8788
components/usb/esp_msc_ota;
8889
components/usb/esp_tinyuf2;

.gitlab/ci/build.yml

+20
Original file line numberDiff line numberDiff line change
@@ -677,6 +677,16 @@ build_example_sensors_sensor_hub_monitor:
677677
EXAMPLE_DIR: examples/sensors/sensor_hub_monitor
678678
IMAGE: espressif/idf:release-v4.4
679679

680+
build_example_touch_button:
681+
extends:
682+
- .build_examples_template
683+
- .rules:build:example_touch_touch_button
684+
parallel:
685+
matrix:
686+
- IMAGE: espressif/idf:release-v5.3
687+
variables:
688+
EXAMPLE_DIR: examples/touch/touch_button
689+
680690
build_example_touch_touch_proximity:
681691
extends:
682692
- .build_examples_template
@@ -1450,6 +1460,16 @@ build_components_touch_touch_proximity_sensor_test_apps:
14501460
variables:
14511461
EXAMPLE_DIR: components/touch/touch_proximity_sensor/test_apps
14521462

1463+
build_components_touch_touch_button_sensor_test_apps:
1464+
extends:
1465+
- .build_examples_template
1466+
- .rules:build:components_touch_touch_button_sensor_test_apps
1467+
parallel:
1468+
matrix:
1469+
- IMAGE: espressif/idf:release-v5.3
1470+
variables:
1471+
EXAMPLE_DIR: components/touch/touch_button_sensor/test_apps
1472+
14531473
build_components_usb_esp_msc_ota_test_apps:
14541474
extends:
14551475
- .build_examples_template

.gitlab/ci/rules.yml

+31
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,10 @@
284284
- "components/touch/touch_proximity_sensor/**/*"
285285
- "tools/cmake_utilities/package_manager.cmake"
286286

287+
.patterns-components_touch_touch_button_sensor: &patterns-components_touch_touch_button_sensor
288+
- "components/touch/touch_button_sensor/**/*"
289+
- "tools/cmake_utilities/package_manager.cmake"
290+
287291
.patterns-components_usb_esp_msc_ota: &patterns-components_usb_esp_msc_ota
288292
- "components/usb/esp_msc_ota/**/*"
289293
- "tools/cmake_utilities/package_manager.cmake"
@@ -529,6 +533,9 @@
529533
.patterns-example_usb_device_usb_dongle: &patterns-example_usb_device_usb_dongle
530534
- "examples/usb/device/usb_dongle/**/*"
531535

536+
.patterns-example_touch_touch_button: &patterns-example_touch_touch_button
537+
- "examples/touch/touch_button/**/*"
538+
532539
.patterns-example_touch_touch_proximity: &patterns-example_touch_touch_proximity
533540
- "examples/touch/touch_proximity/**/*"
534541

@@ -1236,6 +1243,17 @@
12361243
- <<: *if-dev-push
12371244
changes: *patterns-example_sensors_sensor_hub_monitor
12381245

1246+
.rules:build:example_touch_touch_button:
1247+
rules:
1248+
- <<: *if-protected
1249+
- <<: *if-label-build
1250+
- <<: *if-dev-push
1251+
changes: *patterns-build_system
1252+
- <<: *if-dev-push
1253+
changes: *patterns-example_touch_touch_button
1254+
- <<: *if-dev-push
1255+
changes: *patterns-components_touch_touch_button_sensor
1256+
12391257
.rules:build:example_touch_touch_proximity:
12401258
rules:
12411259
- <<: *if-protected
@@ -1244,6 +1262,8 @@
12441262
changes: *patterns-build_system
12451263
- <<: *if-dev-push
12461264
changes: *patterns-example_touch_touch_proximity
1265+
- <<: *if-dev-push
1266+
changes: *patterns-components_touch_touch_proximity_sensor
12471267

12481268
.rules:build:example_ulp_lp_cpu_lp_environment_sensor:
12491269
rules:
@@ -2248,6 +2268,17 @@
22482268
- <<: *if-dev-push
22492269
changes: *patterns-components_touch_touch_proximity_sensor
22502270

2271+
.rules:build:components_touch_touch_button_sensor_test_apps:
2272+
rules:
2273+
- <<: *if-protected
2274+
- <<: *if-label-build
2275+
- <<: *if-label-target_test
2276+
- <<: *if-trigger-job
2277+
- <<: *if-dev-push
2278+
changes: *patterns-build_system
2279+
- <<: *if-dev-push
2280+
changes: *patterns-components_touch_touch_button_sensor
2281+
22512282
.rules:build:components_usb_esp_msc_ota_test_apps:
22522283
rules:
22532284
- <<: *if-protected

.gitlab/ci/target_test.yml

+19
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,25 @@ components_test_esp_msc_ota:
108108
TEST_FOLDER: components/usb/esp_msc_ota
109109
TEST_ENV: ${ENV_TAG}
110110

111+
components_test_touch_button_sensor:
112+
extends:
113+
- .pytest_template
114+
- .rules:build:components_touch_touch_button_sensor_test_apps
115+
needs:
116+
- job: "build_components_touch_touch_button_sensor_test_apps"
117+
artifacts: true
118+
optional: false
119+
parallel:
120+
matrix:
121+
- IDF_VERSION: ["5.3"]
122+
IDF_TARGET: ["esp32s3", "esp32s2", "esp32p4"]
123+
tags:
124+
- ${IDF_TARGET}
125+
image: $DOCKER_TARGET_TEST_v5_4_ENV_IMAGE
126+
variables:
127+
TEST_TARGET: ${IDF_TARGET}
128+
TEST_FOLDER: components/touch/touch_button_sensor
129+
111130
components_test_touch_proximity_sensor:
112131
extends:
113132
- .pytest_template

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ The registered components in ESP-IoT-Solution are listed below:
127127
| [servo](https://components.espressif.com/components/espressif/servo) | [![Component Registry](https://components.espressif.com/components/espressif/servo/badge.svg)](https://components.espressif.com/components/espressif/servo) |
128128
| [sht3x](https://components.espressif.com/components/espressif/sht3x) | [![Component Registry](https://components.espressif.com/components/espressif/sht3x/badge.svg)](https://components.espressif.com/components/espressif/sht3x) |
129129
| [spi_bus](https://components.espressif.com/components/espressif/spi_bus) | [![Component Registry](https://components.espressif.com/components/espressif/spi_bus/badge.svg)](https://components.espressif.com/components/espressif/spi_bus) |
130+
| [touch_button_sensor](https://components.espressif.com/components/espressif/touch_button_sensor) | [![Component Registry](https://components.espressif.com/components/espressif/touch_button_sensor/badge.svg)](https://components.espressif.com/components/espressif/touch_button_sensor) |
130131
| [touch_proximity_sensor](https://components.espressif.com/components/espressif/touch_proximity_sensor) | [![Component Registry](https://components.espressif.com/components/espressif/touch_proximity_sensor/badge.svg)](https://components.espressif.com/components/espressif/touch_proximity_sensor) |
131132
| [usb_device_uac](https://components.espressif.com/components/espressif/usb_device_uac) | [![Component Registry](https://components.espressif.com/components/espressif/usb_device_uac/badge.svg)](https://components.espressif.com/components/espressif/usb_device_uac) |
132133
| [usb_device_uvc](https://components.espressif.com/components/espressif/usb_device_uvc) | [![Component Registry](https://components.espressif.com/components/espressif/usb_device_uvc/badge.svg)](https://components.espressif.com/components/espressif/usb_device_uvc) |

README_CN.md

+1
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ ESP-IoT-Solution 中注册的组件如下:
127127
| [servo](https://components.espressif.com/components/espressif/servo) | [![Component Registry](https://components.espressif.com/components/espressif/servo/badge.svg)](https://components.espressif.com/components/espressif/servo) |
128128
| [sht3x](https://components.espressif.com/components/espressif/sht3x) | [![Component Registry](https://components.espressif.com/components/espressif/sht3x/badge.svg)](https://components.espressif.com/components/espressif/sht3x) |
129129
| [spi_bus](https://components.espressif.com/components/espressif/spi_bus) | [![Component Registry](https://components.espressif.com/components/espressif/spi_bus/badge.svg)](https://components.espressif.com/components/espressif/spi_bus) |
130+
| [touch_button_sensor](https://components.espressif.com/components/espressif/touch_button_sensor) | [![Component Registry](https://components.espressif.com/components/espressif/touch_button_sensor/badge.svg)](https://components.espressif.com/components/espressif/touch_button_sensor) |
130131
| [touch_proximity_sensor](https://components.espressif.com/components/espressif/touch_proximity_sensor) | [![Component Registry](https://components.espressif.com/components/espressif/touch_proximity_sensor/badge.svg)](https://components.espressif.com/components/espressif/touch_proximity_sensor) |
131132
| [usb_device_uac](https://components.espressif.com/components/espressif/usb_device_uac) | [![Component Registry](https://components.espressif.com/components/espressif/usb_device_uac/badge.svg)](https://components.espressif.com/components/espressif/usb_device_uac) |
132133
| [usb_device_uvc](https://components.espressif.com/components/espressif/usb_device_uvc) | [![Component Registry](https://components.espressif.com/components/espressif/usb_device_uvc/badge.svg)](https://components.espressif.com/components/espressif/usb_device_uvc) |

components/.build-rules.yml

+4
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ components/avi_player/test_apps:
66
enable:
77
- if: IDF_TARGET in ["esp32s3", "esp32p4"]
88

9+
components/touch/touch_button_sensor/test_apps:
10+
enable:
11+
- if: IDF_TARGET in ["esp32s2", "esp32s3", "esp32p4"]
12+
913
components/touch/touch_proximity_sensor/test_apps:
1014
enable:
1115
- if: IDF_TARGET in ["esp32s3"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# ChangeLog
2+
3+
## v0.1.0 - 2025-03-12
4+
5+
* Add Initial version
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
idf_component_register(SRC_DIRS "."
2+
INCLUDE_DIRS "include")
3+
4+
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/touch_button_sensor.c")
5+
add_prebuilt_library(touch_button_sensor_lib "${CMAKE_CURRENT_SOURCE_DIR}/${CONFIG_IDF_TARGET}/libtouch_button_sensor.a")
6+
target_include_directories(${COMPONENT_LIB} INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/include")
7+
target_link_libraries(${COMPONENT_LIB} INTERFACE touch_button_sensor_lib)
8+
else()
9+
include(package_manager)
10+
cu_pkg_define_version(${CMAKE_CURRENT_LIST_DIR})
11+
target_compile_options(${COMPONENT_LIB} PRIVATE -Wno-type-limits)
12+
endif()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
menu "Touch Button Sensor Configuration"
2+
3+
config TOUCH_BUTTON_SENSOR_DEBUG
4+
bool "Enable touch button sensor debug mode"
5+
default n
6+
help
7+
Enable touch button sensor debug mode.
8+
9+
config TOUCH_BUTTON_SENSOR_SMOOTH_COEF_X1000
10+
int "Smooth coefficient (/1000)"
11+
default 200
12+
range 0 1000
13+
help
14+
Coefficient for smooth filter, multiplied by 1000.
15+
For example, 200 means 0.2
16+
17+
config TOUCH_BUTTON_SENSOR_BASELINE_COEF_X1000
18+
int "Baseline coefficient (/1000)"
19+
default 5
20+
range 0 1000
21+
help
22+
Coefficient for baseline filter, multiplied by 1000.
23+
For example, 5 means 0.005
24+
25+
config TOUCH_BUTTON_SENSOR_MAX_P_X1000
26+
int "Maximum positive change ratio (/1000)"
27+
default 200
28+
range 0 1000
29+
help
30+
Maximum positive change ratio from baseline, multiplied by 1000.
31+
For example, 200 means 0.2. 0 means no limit.
32+
33+
config TOUCH_BUTTON_SENSOR_MIN_N_X1000
34+
int "Minimum negative change ratio (/1000)"
35+
default 200
36+
range 0 1000
37+
help
38+
Minimum negative change ratio from baseline, multiplied by 1000.
39+
For example, 200 means 0.2. 0 means no limit.
40+
41+
config TOUCH_BUTTON_SENSOR_NEGATIVE_LOGIC
42+
bool "Using negative logic to detect touch"
43+
default n
44+
help
45+
Using both positive and negative threshold to detect touch.
46+
47+
config TOUCH_BUTTON_SENSOR_NOISE_P_SNR
48+
int "Positive noise SNR"
49+
default 10
50+
range 2 100
51+
help
52+
Signal-to-noise for positive Noise
53+
54+
config TOUCH_BUTTON_SENSOR_NOISE_N_SNR
55+
int "Negative noise SNR"
56+
default 5
57+
range 2 100
58+
help
59+
Signal-to-noise for negative Noise
60+
61+
config TOUCH_BUTTON_SENSOR_RESET_P
62+
int "Reset positive count"
63+
default 1000
64+
range 0 5000
65+
help
66+
Reset count for positive threshold. 0 means no reset.
67+
68+
config TOUCH_BUTTON_SENSOR_RESET_N
69+
int "Reset negative count"
70+
default 30
71+
range 0 5000
72+
help
73+
Reset count for negative threshold. 0 means no reset.
74+
75+
config TOUCH_BUTTON_SENSOR_RAW_BUF_SIZE
76+
int "Raw buffer size"
77+
default 20
78+
range 10 100
79+
help
80+
Size of raw data buffer.
81+
82+
config TOUCH_BUTTON_SENSOR_SCALE_FACTOR
83+
int "Scale factor"
84+
default 100
85+
range 10 1000
86+
help
87+
Scale factor for threshold calculation.
88+
89+
endmenu
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Touch Button Sensor
2+
3+
**Note:** This component is for developers testing only. It is not intended for production use.
4+
5+
A component providing enhanced touch button detection functionality for ESP32 series chips. It uses multiple frequency sampling (for ESP32-P4) and FSM-based processing to provide reliable touch detection even in noisy environments.
6+
7+
## Features
8+
9+
- Multi-frequency touch sampling for improved noise immunity
10+
- FSM-based touch detection with configurable thresholds
11+
- Debounce support for reliable state changes
12+
- Support for multiple touch channels
13+
- Callback-based event notification
14+
15+
## Dependencies
16+
17+
- [touch_sensor_fsm](https://components.espressif.com/components/espressif/touch_sensor_fsm)
18+
- [touch_sensor_lowlevel](https://components.espressif.com/components/espressif/touch_sensor_lowlevel)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
version: "0.1.0"
2+
targets:
3+
- esp32s2
4+
- esp32s3
5+
- esp32p4
6+
- linux
7+
description: Touch button sensor with enhanced FSM for better anti-interference performance (Experimental)
8+
url: https://github.com/espressif/esp-iot-solution/tree/master/components/touch/
9+
repository: https://github.com/espressif/esp-iot-solution.git
10+
issues: https://github.com/espressif/esp-iot-solution/issues
11+
dependencies:
12+
idf: ">=5.3" #only 5.3 version library is provided
13+
cmake_utilities: "0.*"
14+
touch_sensor_fsm:
15+
version: "0.5.*"
16+
touch_sensor_lowlevel:
17+
version: ">=0.6.0"
18+
public: true
19+
files:
20+
exclude:
21+
- "**/build*/**/*"
22+
sbom:
23+
supplier: 'Organization: Espressif Systems (Shanghai) CO LTD'
24+
originator: 'Organization: Espressif Systems (Shanghai) CO LTD'

0 commit comments

Comments
 (0)