JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

ESP32 タッチセンサー テスト

2020-02-04 18:19:38 | ESP32

ESP32は、静電容量式のタッチセンサーを10個内蔵しています。(入力ピンT0~T9)

各ピンとGPIO番号の対応は次のようになっています。

T0    GPIO4

T1    GPIO0

T2    GPIO2

T3    GPIO15

T4    GPIO13

T5    GPIO12

T6    GPIO14

T7    GPIO27

T8    GPIO33

T9    GPIO32

主に使う関数だけテストしました。

タッチパッドの値を読み取る関数は

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を使います。

-------------------------------

/*
 * ESP32 Touch LED
 * 2020.2.4
 * JH7UBC Keiji Hata
 */

 #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が点灯しました。

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

------------------------------------

/*
 * ESP32 Touch interrupt test
 * 2020.2.4
 * JH7UBC Keiji Hata
 */

 #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が点灯、消灯を繰り返すのですが、触り続けると点灯しっぱなしになります。

安定して動作させるには、スケッチに工夫が必要なようです。

タッチセンサーは、いまのところあまり利用する予定がないので、動作を確認して終わりにしました。

 



最新の画像もっと見る

コメントを投稿