ESP32는 자체적으로 터치를 감지할 수 있는 센서를 가지고 있다. 총 10개의 GPIO에서 터치를 감지할 수 있다. 이번에는 손가락 터치를 감지해서 ESP32 개발보드에 내장된 LED를 켜거나 끄는 것을 해 보려고 한다.
■ ESP32 Touch GPIO Pin
위의 배치도를 보면 분홍색으로 표시된 핀들이 터치를 지원하는 핀 들이다. 아래 핀번호를 보면 GPIO0 도 있는데 내가 가지고 있는 개발보드엔 이 핀이 없다. 고로 9개의 핀이 터치를 지원한다. 개발 시 자신이 가지고 있는 보드의 규격에 따라 고려하여 코딩하면 되겠다.
T0 = GPIO4
T1 = GPIO0
T2 = GPIO2
T3 = GPIO15
T4 = GPIO13
T5 = GPIO12
T6 = GPIO14
T7 = GPIO27
T8 = GPIO33
T9 = GPIO32
ESP32에 대한 일반적인 사항과 아두이노 개발환경을 설치하는 방법은 아래의 과거 포스팅을 참고한다.
■ 스케치
먼저 시리얼 모니터로 터치입력값을 받아서 시리얼 모니터에 표시해 본다. 이 예제는 ESP32 개발환경이 제대로 설치되었다면 아두이노 IDE의 파일->예제->ESP32->Touch->TouchRead 에서도 볼 수 있다.
터치감지를 위해서 암-수 점퍼 케이블을 GPIO4 (T0)에 꼽아 주었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // ESP32 Touch Test // Just test touch pin - Touch0 is T0 which is on GPIO 4. void setup() { Serial.begin(115200); delay(1000); // give me time to bring up serial monitor Serial.println("ESP32 Touch Test"); } void loop() { Serial.println(touchRead(T0)); // get value using T0 delay(1000); } | cs |
시리얼 모니터 값을 보면 터치 하지 않았을 경우 91~92의 값을 보인다. 손가락을 터치했을 경우 90 이하의 값으로 내려간다. 고로 90 이하의 값이 감지되면 LED를 켜고 아니면 꺼주면 되겠다. (케이블 단자를 손가락으로 꽉 잡을 경우 값은 더욱 낮아진다. 각자의 목적에 맞게 터치값의 기준을 조정해야 한다)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | int LED_BUILTIN=2; void setup() { pinMode(LED_BUILTIN, OUTPUT); Serial.begin(115200); delay(1000); // give me time to bring up serial monitor } void loop() { int tRead = 0; tRead = touchRead(T0); Serial.println(tRead); if (tRead <= 90) { digitalWrite(LED_BUILTIN, HIGH); } else { digitalWrite(LED_BUILTIN, LOW); } delay(100); } | cs |
의도대로 수정한 소스이다.
손가락을 케이블에 대면 빌트인 LED가 켜지고 떼면 꺼진다. 이를 응용하면 누군가 집의 문고리를 잡을 경우 ESP32의 와이파이 연결 기능을 통해 스마트폰 등으로 알려주는 나름의 방범기능(?)도 만들 수 있을 것이다.
'ESP32' 카테고리의 다른 글
[ESP32] 내장된 온도센서의 사용 (2) | 2018.10.17 |
---|---|
[ESP32] NTP 서버를 통한 현재시간 구하기 (0) | 2018.10.12 |
[ESP32] 내장된 홀센서를 이용한 자기장 감지 (1) | 2018.10.11 |
[ESP32] 아두이노 IDE 에서 개발환경 만들기 (0) | 2018.09.05 |
[ESP32] ESPRESSIF ESP32 오버뷰 (ESP32 Overview) (0) | 2017.09.25 |