ESP32(Arduino)でタイマー割り込みが使いたい!定時実行やセンサの状態取得等、一定時間が経過した際に実行させたい場合にタイマー割り込みを使いますが、
そんなタイマー割り込みをArduinoで使う方法をまとめました。
こんにちは、北神です。
ESP32(Arduino)でタイマーが使いたかったので試してみました。
以下のソースを貼り付けるだけで、タイマー割り込みが使用できます。
//===========================================================// // Timer Interrupt //===========================================================// hw_timer_t *timer1 = NULL; portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED; void IRAM_ATTR onTimer1() { portENTER_CRITICAL_ISR(&timerMux); // 実行させたい関数をここに記載 example(); portEXIT_CRITICAL_ISR(&timerMux); } void Timer1_interrupt_setup(int usec) { timer1 = timerBegin(0, getApbFrequency()/1000000, true); timerAttachInterrupt(timer1, &onTimer1, true); timerAlarmWrite(timer1, usec, true); timerAlarmEnable(timer1); }
実行する際は、
Timer1_interrupt_setup(マイクロ秒) を記述して、その間隔で関数が実行されます。
ESP32では、HTTPの送信や受信で数秒程度、処理に時間がかかりますので、
その間にセンサーやスイッチの立ち上がりだけ見たい! ハードウェア特有の処理を済ませておきたい!という時に割り込みが使用できます。
ただ、何重にも割り込みは発生させることができませんし、割り込み後の処理で時間がかかる処理はご法度ですので、割り込みプログラムには留意が必要です。
ではでは。