Wprawdzie w mojej „stajni” urządzeń z rodziny ESP cały czas dominują różne modele ESP8266 (ze sporą przewagą NodeMCU v3 nad innymi, ze względu na świetną płytkę deweloperską, jaką można kupić do tych modułów), to coraz śmielej rozpychają się urządzenia z serii ESP32. Nie tylko dlatego, że ich cena często jest bardzo podobna, przy mocniejszych parametrach i większej liczbie GPIO. Czasem dlatego, że tylko z ESP32 pewne rozwiązania działają. Będą to m.in. takie rozwiązania jak I2S Audio, Bluetooth (BLE), czy bohater tego wpisu, czyli ESP32 Touch Pad.
Spis treści w artykule
ESP32 Touch Pad (w ESPHome)
I choć z I2S Audio (Inter-IC Sound) korzystam (do komunikacji głosowej z Home Assistant), tak samo, jak z Bluetooth (do detekcji obecności na podstawie telefonu i opaski, ale na razie wymaga to jeszcze dopracowania), to zdecydowanie najczęściej wykorzystuję właśnie opcję ESP32 Touch Pad, czyli „dotykowe” piny GPIO dostępne w ESP32.
Bo o ile Home Assistant i powiązanymi z nim urządzeniami często steruję z poziomu strony internetowej lub aplikacji mobilnej, to jednak sterowanie za pomocą przycisków w wielu przypadkach jest najszybsze i najwygodniejsze. I tak jak kiedyś przycisk musiał być faktycznie przyciskiem (lub układem dotykowym podłączonym np. do ESP), to dzięki dotykowym pinom GPIO w ESP32 przyciskiem może być wiele przedmiotów codziennego użytku. Wystarczy podłączyć je do odpowiedniego GPIO w ESP32 i odpowiednio ustawić.
Nie dość, że dzięki temu pozbywamy się mechanicznych elementów związanych z przyciskami, to jeszcze zdecydowanie łatwiej ukryć fakt, że coś jest faktycznie przyciskiem (np. klamka, rama obrazu z odpowiedniego tworzywa). A do tego w przeciwieństwie do przycisków i dotykowych układów do podłączenia, tu wystarczy dosłownie jeden przewód (kabelek), podłączony do GPIO w ESP32. Nie potrzeba nawet masy.
Konfiguracja ESP32 Touch Pad w ESPHome
Z racji tego, że obecnie najczęściej w przypadku układów ESP (ESP8266 i ESP32) korzystam z oprogramowania ESPHome, które dodatkowo sprawia, że taki układ świetnie integruje się z Home Assistant po API, to właśnie na przykładzie ESPHome pokaże, jak prosta jest konfiguracja ESP32 Touch Pad.
By aktywować funkcje dotykowe dla GPIO, wystarczy w kodzie YAML urządzenia dodać:
esp32_touch:
Choć na początek zdecydowanie sensowniej będzie dodać wraz z aktywnym trybem konfiguracyjnym:
esp32_touch:
setup_mode: true
Dzięki temu w logach urządzenia móc przeanalizować wartości, jakie pojawiają się na danym porcie GPIO bez dotyku i w sytuacji, gdy element jest dotykany. A różnica w tych odczytach (liczbach/wartościach) jest właśnie tym, co będzie potrzebne w kolejnym kroku.
I od razu trzeba zdefiniować odpowiedni „binary sensor”, którego stan będzie monitorowany:
binary_sensor:
- platform: esp32_touch
name: "ESP32 Touch01"
id: esp32_touch01
pin: GPIO1
threshold: 1000
W miejsce GPIO1 oczywiście trzeba wybrać pin GPIO, do którego podłączony jest „element dotykowy” (choćby zwykły drucik). I choć nie wszystkie GPIO mogą pełnić funkcje dotykowe, to w większość płytek ESP32 jest zazwyczaj przynajmniej kilka takich GPIO.
Tu odsyłam do dokumentacji danego układu (diagram z GPIO i ich funkcjami), ale za dokumentacją ESPHome można przyjąć, że:
- ESP32: GPIO0, GPIO2, GPIO4, GPIO12, GPIO13, GPIO14, GPIO15, GPIO27, GPIO32, GPIO33
- ESP32-S2 i S3: GPIO1 – GPIO14
Czy całkiem sporo. Zwłaszcza że można tu korzystać nie tylko z takich opcji dostępnych w sensorach binarnych jak on_press, on_release, on_state, on_click, ale z takich jak on_double_click, on_multi_click, dzięki czemu bez problemu z jednego dotykowego elementu (i jednego GPIO) można zrobić nawet kilka wirtualnych sensorów.
Na grafice powyżej, przykład z Home Assistant, gdzie każdy sensor binarny za pomocą opcji „on_multi_click” powiązany jest z 3 wirtualnymi sensorami binarnymi: jedno zwykłe naciśnięcie, dwa zwykłe naciśnięcia i jedno długie naciśnięcie. Więc zamiast 3 sensorów mam 9, a właściwie to 12. A to nie koniec możliwości, bo w razie potrzeby można dodać kolejne opcje…
Threshold, czyli wartość progowa
Gdy już GPIO zdefiniowany, oprogramowanie wgrane, to w logach w ESPHome trzeba teraz określić wartość progową, która rozdziela stan sensora binarnego jako nieaktywny, od aktywny.
I co ważne, najlepiej zrobić to w docelowej konfiguracji sprzętowej, z podłączonym już docelowym elementem dotykowym, najlepiej w docelowym miejscu, bo wiele czynników ma wpływ na to, jakie będą tutaj pojawiać się wartości.
A że najlepiej pokazać to na przykładzie, to fragment z odczytu na szybko przygotowanej platformy na potrzeby artykułu (bo w urządzeniach już pełniących konkretne role, opcję „setup_mode” mam nieaktywną podczas normalnej pracy):
[11:53:34][D][esp32_touch:298]: Touch Pad 'ESPH13 ESP32 Touch01' (T1): 17253
[11:53:34][D][esp32_touch:298]: Touch Pad 'ESPH13 ESP32 Touch01' (T1): 17257
[11:53:34][D][esp32_touch:298]: Touch Pad 'ESPH13 ESP32 Touch01' (T1): 17238
[11:53:35][D][esp32_touch:298]: Touch Pad 'ESPH13 ESP32 Touch01' (T1): 24433
[11:53:35][D][esp32_touch:298]: Touch Pad 'ESPH13 ESP32 Touch01' (T1): 24746
[11:53:35][D][esp32_touch:298]: Touch Pad 'ESPH13 ESP32 Touch01' (T1): 24829
[11:53:36][D][esp32_touch:298]: Touch Pad 'ESPH13 ESP32 Touch01' (T1): 17243
[11:53:37][D][esp32_touch:298]: Touch Pad 'ESPH13 ESP32 Touch01' (T1): 17096
[11:53:37][D][esp32_touch:298]: Touch Pad 'ESPH13 ESP32 Touch01' (T1): 17076
Wartości w okolicach 17 000 są w sytuacji, gdy dotyk nie jest wykrywany. W przypadku wykrywania dotyku wartości są w okolicach 24 000, więc w tym przypadku wartość progową ustawiłbym gdzieś między 18 000 a 23 000, może w okolicach 22 tysięcy. Ale to już należy dobrać eksperymentalnie.
Zaawansowane parametry
W niektórych sytuacjach, np. przy większych elementach dotykowych, czy dłuższych kabelkach, różnice między odczytami mogą być na tyle małe, że potrzebne będzie wzmocnienie sygnału:
esp32_touch:
low_voltage_reference: 0.5V
high_voltage_reference: 2.7V
voltage_attenuation: 0.5V
W przypadku użytego na potrzeby testów dla tego poradnika ESP32 S2 mini np. muszę, np. ustawić dodatkowy parametr, by dotyk był prawidłowo wykrywany:
esp32_touch:
measurement_duration: 100us
Ogólnie czasem trzeba będzie trochę poeksperymentować. Dlatego odsyłam do dokumentacji…
Nie tylko dotykowe przyciski
Ale zastąpienie przycisków za pomocą ESP32 Touch Pad to tak naprawdę tylko mała część możliwości. Bo skoro mamy tu pojemnościowe wykrywanie zmian, to można to wykorzystać, by zrobić np. prosty czujnik zalania, czy wykrywania poziomu cieczy. Można też na bazie ESP32 Touch Pad zrobić prosty czujnik wilgotności gleby, bo jej wilgotność, też będzie wpływać na odczyty.
U mnie, to nawet widzę, gdy ktoś bierze prysznic, bo mam wrażenie, że szybciej i dokładniej reagują na zmiany wilgotności powietrza takie dotykowe „przyciski”, niż prawdziwe czujniki wilgotności (np. BME280, BME680 czy SHT41).
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01