반응형



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의 와이파이 연결 기능을 통해 스마트폰 등으로 알려주는 나름의 방범기능(?)도 만들 수 있을 것이다.

반응형

+ Recent posts