Перейти к содержанию

Ёмкостный сенсор касания ESP32 (touch sensor)

Кнопку можно сделать без кнопки — медной площадкой на плате под пластиком корпуса. Касание пальца немного увеличивает ёмкость площадки, и у ESP32 есть встроенный блок, который это измеряет и даже будит чип из глубокого сна.

Обновлено Редакция GAW

Сенсор касания (capacitive touch sensor) — встроенный блок ESP32, ESP32-S2 и ESP32-S3, который измеряет ёмкость площадки, подключённой к выводу, и определяет касание. Палец рядом с площадкой увеличивает её ёмкость; блок периодически заряжает и разряжает площадку и считает, сколько циклов поместилось в заданный интервал (ESP32 TRM, разд. 31.2.4). По изменению счёта программа или аппаратный порог решают, было ли касание.

Входы ESP32

КаналВыводКаналВывод
T0GPIO4T5MTDI (GPIO12)
T1GPIO0T6MTMS (GPIO14)
T2GPIO2T7GPIO27
T3MTDO (GPIO15)T832K_XN (GPIO33)
T4MTCK (GPIO13)T932K_XP (GPIO32)

Данные — ESP32 TRM, табл. 31.2-1; номера GPIO для выводов MTDO, MTCK, MTDI, MTMS и 32K — по даташиту ESP32 (версия 5.3); распиновка — на странице ESP32. Входы T1, T2, T3 и T5 совпадают с выводами обвязки загрузки, и площадка на них не должна мешать уровням при старте. У ESP32-S2 и S3 каналов больше — до номера 14, а у ESP32-C3, C6 и H2 сенсора нет (soc_caps.h ESP-IDF v6.1).

Поколения сенсора

ВерсияЧипыПри касанииОсобенности
V1ESP32значение уменьшается—
V2ESP32-S2, S3значение растётфильтр, базовая линия, защита от воды, приближение
V3ESP32-P4 и новые—скачки частоты

По ESP-IDF (Capacitive Touch Sensor). Срабатывание в драйвере — выход данных канала за базовую линию плюс порог.

Сон и ограничения

Касание может будить чип из глубокого сна, а проверку порога может вести ULP-сопроцессор. Измерения во сне добавляют потребление; ESP-IDF советует реже измерять, сокращать измерение и уменьшать размах и ток заряда. Espressif отдельно предупреждает, что сенсор ESP32 не прошёл испытание на устойчивость к кондуктивным помехам (CS), и поэтому область применения ограничена.

Частые вопросы

Почему при касании значение touchRead уменьшается, а на ESP32-S3 — растёт?

Разные поколения сенсора. У ESP32 (версия 1) блок считает циклы заряда-разряда за фиксированное время, и касание, увеличивая ёмкость, уменьшает их число. У ESP32-S2 и S3 (версия 2) значение при касании, наоборот, растёт (ESP-IDF, Capacitive Touch Sensor). Поэтому порог срабатывания у этих чипов задают с разным знаком.

Какие выводы ESP32 работают как сенсорные?

Десять: T0 — GPIO4, T1 — GPIO0, T2 — GPIO2, T3 — MTDO (GPIO15), T4 — MTCK (GPIO13), T5 — MTDI (GPIO12), T6 — MTMS (GPIO14), T7 — GPIO27, T8 и T9 — выводы 32K_XN и 32K_XP (GPIO33 и GPIO32) (ESP32 TRM, табл. 31.2-1). Часть из них — выводы обвязки загрузки, например GPIO0, GPIO2, GPIO12 и GPIO15, это учитывают при разводке.

Можно ли будить ESP32 касанием из глубокого сна?

Да, это одна из функций сенсора: в глубоком сне продолжается измерение, и касание будит процессор; проверкой порога может заниматься и ULP-сопроцессор (ESP32 TRM, разд. 31.2.2). ESP-IDF предупреждает, что измерения во сне добавляют потребление, и его уменьшают реже проводимыми и более короткими измерениями.

Источники

  1. Espressif. ESP32 Technical Reference Manual, Version 5.8 — разд. 31.2 — касание поверхности меняет ёмкость электрода; до 10 ёмкостных входов, их можно объединять; измерением управляет аппаратный автомат по команде программы или таймера; результат — регистры, прерывание, пробуждение из глубокого сна, работа с ULP; примечание: сенсор не прошёл испытание на кондуктивные помехи (CS); табл. 31.2-1 — T0 GPIO4, T1 GPIO0, T2 GPIO2, T3 MTDO, T4 MTCK, T5 MTDI, T6 MTMS, T7 GPIO27, T8 32K_XN, T9 32K_XP; 31.2.4 — площадка циклически заряжается и разряжается между DREFH и DREFL, число импульсов за интервал зависит от ёмкости
  2. Espressif. ESP-IDF Programming Guide v6.1: Capacitive Touch Sensor (ESP32) — версии сенсора: V1 (ESP32) — значение канала при касании уменьшается; V2 (ESP32-S2, S3) — увеличивается, аппаратный фильтр, базовая линия, защита от воды, приближение, пробуждение; V3 (ESP32-P4 и др.) — скачки частоты; принцип: касание увеличивает ёмкость, заряд и разряд идут медленнее, за фиксированное время считается число циклов; срабатывание — когда данные выходят за базовую линию плюс порог; меньше потребление во сне — реже измерять, короче измерение, меньше размах и ток заряда
  3. Espressif. ESP-IDF v6.1 soc_caps.h (esp32, esp32s2, esp32s3, esp32c3, esp32c6, esp32h2) — SOC_TOUCH_SENSOR_SUPPORTED у ESP32, S2, S3; SOC_TOUCH_MAX_CHAN_ID 9 у ESP32, 14 у S2 и S3; у C3, C6, H2 сенсора касания нет
  4. Espressif. ESP32 Series Datasheet, Version 5.3 — табл. выводов: TOUCH3…TOUCH6 на MTDO (GPIO15), MTCK (GPIO13), MTDI (GPIO12), MTMS (GPIO14), TOUCH8 и TOUCH9 на 32K_XN (GPIO33) и 32K_XP (GPIO32); разд. 3 — выводы обвязки GPIO0, GPIO2, MTDI, MTDO и GPIO5

Нашли ошибку?