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