ESP32 Touch Sensor – zastosowanie, kod Arduino, schemat podłączenia
Pytanie
ESP32 touch do czego służy przykład kodu schemat
Odpowiedź Sztucznej Inteligencji
Bezpośrednia odpowiedź na pytanie
- ESP32 ma wbudowane pojemnościowe czujniki dotykowe (Touch Sensor), które pozwalają wykrywać dotknięcie lub zbliżenie palca do elektrody bez użycia mechanicznych przycisków.
- Stosuje się je m.in. do przycisków dotykowych, sliderów, wybudzania z Deep-Sleep i detekcji poziomu cieczy.
- Przykładowy kod (Arduino i ESP-IDF) oraz uproszczony schemat znajdują się poniżej.
Szczegółowa analiza problemu
1. Budowa i zasada działania
- Każdy pin „Tn” (T0…T9 w klasycznym ESP32-D0WD) tworzy z podłączoną elektrodą kondensator \(C_\text{pad}\).
- Moduł Touch-Sensor mierzy czas ładowania/rozładowania tego kondensatora do ustalonego progu napięcia (metoda CTMU).
- Dotknięcie palcem dodaje równoległą pojemność \(C_\text{finger}\approx 30!÷!200\;\text{pF}\), wydłużając czas i obniżając wartość zwracaną przez
touchRead()
.
- Porównując tę wartość z kalibrowanym progiem otrzymujemy informację o dotyku lub zbliżeniu.
2. Dostępne linie dotykowe
ESP32 wariant |
Liczba czujników |
GPIO (T0…Tn) |
Uwagi |
ESP32 (D0/D2) |
10 |
4 0 2 15 13 12 14 27 33 32 |
Najpopularniejsza wersja |
ESP32-S2/S3 |
14 |
1…14 |
Dodatkowe piny, identyczna logika |
ESP32-C3 |
— |
– |
Brak czujników dotykowych |
3. Typowe zastosowania
- Zamiennik przycisków i paneli HMI (szkło, pleksi).
- Slider/pokrętło kapacytancyjne (regulacja jasności, głośności).
- Wybudzanie z Deep-Sleep:
touchSleepWakeUpEnable(pin, threshold)
.
- Czujniki poziomu cieczy, wilgotności powierzchni.
- Detekcja zbliżenia dłoni (bezdotykowe uruchamianie).
Aktualne informacje i trendy
- Nowe rodziny ESP32-S2/S3 udostępniają do 14 czujników, a ESP-IDF 5.x oferuje zaawansowany sterownik TouchSensor v3 z lepszym filtrowaniem IIR i kompensacją temperaturową.
- Coraz częściej łączy się czujniki dotykowe z BLE-Mesh i Matter do sterowania urządzeniami IoT bez ruchomych części.
- W branży smart-home rośnie popularność szklanych paneli opartych na ESP32, które spełniają wymagania norm IEC 61000-4-6 (EMC) dzięki poprawnemu ekranowaniu padów.
Wspierające wyjaśnienia i detale
- Wartość zwracana przez
touchRead(pin)
to liczba cykli ładowania; typowo:
• bez dotyku: 60 ÷ 150, • dotyk: 5 ÷ 40 (zależnie od PCB i środowiska).
- Próg (
threshold
) powinien być o ok. 10–20 jedn. mniejszy od uśrednionego odczytu „bez dotyku”.
- Filtracja programowa: średnia ruchoma 4-8 próbek, histereza 5 jedn.
- Elektroda: miedź na PCB, folia Al, taśma Cu; rekomendowana powierzchnia 2–5 cm², przerwa do pola GND ≥ 0,3 mm, od spodu „guard-ring” GND.
Aspekty etyczne i prawne
- Urządzenia użytkowe muszą spełniać normy bezpieczeństwa dotykowego (IEC 62368-1) i EMC.
- Projektując panele wodoodporne należy zadbać o separację galwaniczną jeśli pada dotykowego można dotknąć z wilgotnymi dłońmi.
- W aplikacjach medycznych obowiązują dodatkowe normy (ISO 80601-2-61 i pokrewne).
Praktyczne wskazówki
- Projekt PCB: unikać długich (>30 cm) nieekranowanych przewodów; jeśli konieczne – użyć kabla koncentrycznego, żyłę sygnałową zakończyć rezystorem 1 MΩ do GND (minimalizuje antenowanie).
- Kalibracja w polu: uruchomić urządzenie, zebrać 100 próbek w idle, ustawić próg = min(wartości) – 10 %.
- Deep-Sleep: przed przejściem w sen włączyć
touch_pad_filter_start()
z odświeżaniem 500 ms; pobór ≤ 25 µA.
- Diagnostyka:
esp_touch_pad_status_read()
(ESP-IDF) zwraca błędy kalibracji.
- Odporność na ESD: dioda TVS 5 V pomiędzy pad a GND przy długich złączach metalowych.
Ewentualne zastrzeżenia lub uwagi dodatkowe
- Silne pole E-M, zwłaszcza zasilacze impulsowe ~200 kHz, może powodować fałszywe detekcje – pomóc może „shield pad” sterowany z GPIO wyjściowym o tym samym przebiegu jak pad czujnika (boot-strapped shield).
- Piny T1 (GPIO0) i T2 (GPIO2) to piny „strapping” – na niektórych płytkach mają rezystory 10 kΩ do GND/VCC; może to wymagać zmian hardware.
- ESP32-C3 nie posiada linii Touch – należy użyć zewnętrznych układów (np. AT42QT1010, AZ-Touch).
Sugestie dalszych badań
- Analiza bibliotek
esp32-touch
(PlatformIO) – implementacja filtrów IIR i detekcji gestów.
- Integracja czujników dotykowych z FreeRTOS-LVGL do tworzenia kompletnych GUI.
- Badania wpływu temperatury na czułość pojemnościowych czujników (kompensacja za pomocą NTC).
- Porównanie z samodzielnymi kontrolerami (Microchip CAP12xx, Cypress CapSense) pod względem stabilności i poboru mocy.
Przykłady kodu
A. Arduino IDE – proste odczyty
#include <Arduino.h>
constexpr uint8_t TOUCH_PIN = T0; // GPIO 4
constexpr uint8_t LED_PIN = 2; // wbudowana dioda
uint16_t threshold;
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
// Kalibracja – 50 pomiarów bez dotyku
uint32_t sum = 0;
for (int i=0;i<50;i++) { sum += touchRead(TOUCH_PIN); delay(20); }
threshold = (sum/50) - 5; // 5 jednostek zapasu
Serial.printf("Ustawiony próg: %u\n", threshold);
}
void loop() {
uint16_t val = touchRead(TOUCH_PIN);
Serial.println(val);
digitalWrite(LED_PIN, val < threshold);
delay(100);
}
B. ESP-IDF (v5.x) – wybudzanie z Deep-Sleep
#include "esp_sleep.h"
#include "driver/touch_pad.h"
void app_main(void)
{
touch_pad_init();
touch_pad_config(TOUCH_PAD_NUM4, 0); // T4 = GPIO13
touch_pad_filter_start(10);
uint16_t touch_value;
touch_pad_read_filtered(TOUCH_PAD_NUM4, &touch_value);
uint16_t threshold = touch_value * 0.8; // 20 % poniżej tła
esp_sleep_enable_touchpad_wakeup();
touch_pad_set_thresh(TOUCH_PAD_NUM4, threshold);
printf("Przechodzę w Deep-Sleep, próg=%d\n", threshold);
esp_deep_sleep_start();
}
Schemat połączeń (jedno pole dotykowe + LED)
┌──────────────────── ESP32 DevKit ────────────────────┐
│ │
Płytka dotykowa─●│ GPIO4 / T0 │
│ │
LED │ Anoda ──┬─220 Ω──● GPIO2 │
│ │ │ │
│ Katoda ───┴── GND │
│ │
GND ─────────────┴─────────────────────────────── GND │
└───────────────────────────────────────────────────────┘
Krótkie podsumowanie
ESP32 oferuje sprzętowy, pojemnościowy system detekcji dotyku na dedykowanych pinach T0–T9. Umożliwia to tworzenie trwałych, estetycznych interfejsów bez ruchomych części oraz wybudzanie mikrokontrolera z głębokiego uśpienia. Implementacja jest prosta – wystarczy elektroda podłączona do odpowiedniego GPIO oraz kilka linii kodu (touchRead()
lub API ESP-IDF). Kluczowe jest poprawne ekranowanie i kalibracja progu, co zapewnia stabilną pracę nawet w trudnych warunkach EMC.
Zadaj dodatkowe pytanie Sztucznej Inteligencji
Zastrzeżenie: Odpowiedzi udzielone przez sztuczną inteligencję (model językowy) mogą być niedokładne i wprowadzające w błąd. Elektroda nie ponosi odpowiedzialności za dokładność, rzetelność ani kompletność prezentowanych informacji. Wszystkie odpowiedzi powinny być zweryfikowane przez użytkownika.