ESP32でTickerのactive()を使えるようにする
Table of Contents
ESP32系のArduino互換?ボードでは、タイマー割り込みをかんたんに実装できる「Ticker」というライブラリを使うことができます。「Ticker」で使えるメソッドは、ヘッダファイル Ticker.h
を見るとわかりますが、そこでメソッドが宣言されていながらも、実装が見つからないメソッドがあります。
active()
というメソッドです。
active()メソッドとは #
active()
メソッドは、Tickerオブジェクトのタイマーが有効かどうかを返すメソッドです。
定期実行したいタスクがTickerオブジェクトにattach
されてタイマーが動いているとtrue
が返り、何もattach
されていなかったり、すでにdetach
されていたりするとfalse
が返ります。
Ticker.h
には、このメソッドがpublicで宣言されていますが、その実装であるTicker.cpp
に実装が定義されていないため、コンパイルエラーになります。
実装を追加する #
Arduino core for the ESP32のリポジトリにあるIssueを参考に、実装を追加します。
以下のファイルをテキストエディタで開きます。なお環境はmacOSです。
${HOME}/Library/Arduino15/packages/esp32/hardware/esp32/2.0.1/libraries/Ticker/src/Ticker.cpp
そして、以下の実装を追加して保存します。
bool Ticker::active() {
return _timer;
}
たったこれだけでOK。 こうして、Tickerでタイマーが動いているかどうかを確認することができるようになりました。
数年前からこのIssueは上がっているにもかかわらず、おそらくプルリクエストも出ているはずですが、いまだ改善されていません。こうした手作業による変更はなるべく避けたいので、はやく改善されるといいなと思っています。