Skip to main content
すっさんぽ
  1. Posts/

ESP32でTickerのactive()を使えるようにする

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は上がっているにもかかわらず、おそらくプルリクエストも出ているはずですが、いまだ改善されていません。こうした手作業による変更はなるべく避けたいので、はやく改善されるといいなと思っています。