JH7UBCブログ

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

ESP32 GPIO割込みテスト

2020-01-28 19:23:50 | ESP32

 ESP32の割込みには、ハードウェア割込み(GPIO割込みとタッチ割込み)とソフトウェア割込み(タイマー割込みとウォッチドックタイマ割込み)があります。

 今回は、GPIO割込みのテストをします。

 GPIO割込みでは、GPIOピンの信号値が変化したときに割込みが発生し、割込みサービスルーチン(ISR)が実行されます。この割込みはすべてのGPIOピンで利用できます。

 書式は、attachInterrupt(GPIOPin, ISR, Mode); です。

 Modeは、LOW,HIGH,CHANGE,FALLING,RISING が使えます。

 割込みを停止するには、

 detachInterrupt(GPIOPin); とします。

 「Arduinoをはじめよう」の本の外部割込みのスケッチを参考に、簡単なスケッチを作りました。

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

/*
 *  ESP32 GPIO interrupt test
 *  2020.1.28
 *  JH7UBC Keiji Hata
 */

#define LED_Pin 27
#define SW_Pin 33
volatile int state = LOW;
 
void setup() {
  pinMode(SW_Pin, INPUT_PULLUP);
  pinMode(LED_Pin, OUTPUT);
  attachInterrupt(SW_Pin, LED_blink, FALLING);
}

void loop() {
  digitalWrite(LED_Pin, state);
}

void LED_blink(){
  delay(10);
  state = !state;
}

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

配線回路図です。

ブレッドボードです。

 タクトスイッチにチャタリングがあるため、押し方によっては、誤動作しますが、スイッチを押すたびに点灯・消灯を繰り返し、GPIO割込みを確認することができました。

 ただ、入力専用のピンA0,A3,A6,A7を割込み入力に設定するとうまくいきません。

どうして?

 

1月29日追記

 入力専用ピンでの内部プルアップしたGPIO割込みが不安定なことについて、今朝実験をしてみました。

 10kΩの外付け抵抗で入力専用ピンをプルアップしたら、正常に動作しました。

 入力専用ピンは、内部プルアップ(ソフトウェアプルアップ)ができないのかもしれません。(コンパイルではエラーは出ませんが)