ESP32 タッチセンサーのテスト

JH7UBC 2020.2.5


ESP32は、静電容量式のタッチセンサーを10個内蔵しています。(入力ピンT0〜T9)
各ピンとGPIO番号の対応は次のようになっています。

 シンボル  GPIO
 T0  4
 T1  0
 T2  2
 T3  15
 T4  13
 T5  12
 T6  14
 T7  27
 T8  33
 T9  32

主に使う関数だけテストしました。
タッチパッドの値を読み取る関数は
touchRead(uint8_t pin); //uint8_t pinは、GPIOの番号またはシンボル(T0〜T9)
タッチセンサー割込み タッチパッドの値がしきい値(threshold)未満になったときに割込みをかける関数
touchAttacjInterrupt(uint8_t pin, ISR, uint_16 threshold); //pinはGPIO番号かシンボル、ISRは割込みがかかった時に実行する関数、割込みをかけるthresholdの値

まず、touchRead()で実際のタッチパッドの値を測定してみました。
T0のタッチパッドの値を1秒ごとにシリアルモニタに表示するスケッチです。

void setup(){
  Serial.begin(115200);
}
 
void loop(){
  Serial.println(touchRead(T0)); 
  delay(1000);
}

タッチパッドの値は、
T0(GPIO4)にリード線も何もつけない状態のとき、88程度
T0にリード線をつけた状態で、79
リード線の先端の金属部分に触ったとき20以下でした。
タッチパッドをスイッチとして使う場合、しきい値(threshold)を50程度にすればよいようです。
そこで、リード線に触ったときにLEDが点灯するスケッチを描いてテストしました。
LEDは、GPIO27に接続します。タッチセンサーは、T0を使います。

#define LED_Pin 27
 
void setup() {
  pinMode(LED_Pin, OUTPUT);
}

void loop() {
  if(touchRead(T0) < 50){
    digitalWrite(LED_Pin, HIGH);
  }else{
    digitalWrite(LED_Pin, LOW);
  }
}

リード線に触るとLEDが点灯しました。

割込みについても次のようなスケッチでテストしました。

#define LED_Pin 27
 
//Interrupt Service Routine
void LED_Blink(){
  digitalWrite(LED_Pin, !digitalRead(LED_Pin));
  delay(500);
}

void setup() {
  pinMode(LED_Pin, OUTPUT);
  touchAttachInterrupt(T0, LED_Blink,50);
}

void loop() {
}

リード線をチョン、チョンと触るとLEDが点灯、消灯を繰り返すのですが、触り続けると点灯しっぱなしになります。
安定して動作させるには、もう少しスケッチに工夫が必要なようです。
タッチセンサーは、いまのところあまり利用する予定がないので、動作を確認して終わりにしました。

inserted by FC2 system