ESP32でTimer割り込み

最近ESP32を使用しています

理由としてはESP32でBLE通信をしたいためです

その前に、ESP32でTImer割り込みはどうすればいいんだ?ということで色々と調べたときになかなか参考がでてこない!

サンプルプログラムはあるのですが、わかりにくいということで自分なりにESP32についてのTimer割り込み方法についてまとめてました

今回はスイッチサイエンスから発売してあるESP32開発ボードで試していました

また、ESP32をArduino化して使用しています

Arduino化については以下のURLを参照してください

先日東京に行きました 秋葉原を徘徊しているとESP32開発ボードが販売されていたので早速購入をしました 備忘録ついでに使い方をメ...

とりあえず先にソースコードを掲載します

ESP32はTimer割り込みをするときにセマフォ管理をしなければなりません

またプリスケーラの設定も必要です

timerAttachInterrupt()にてタイムアウトしたときに呼ばれる関数を定義しています

timerAlarmWrite()にてタイマーの設定をしています

上記のプログラムは1秒毎にonTimerを呼び出しています

timerAlarmEnable()にてタイマーをスタートさせています

より深く知りたい人はexampleを参考にしてみてください

スケッチの例 -> ESP32 -> Timer -> RepeatTimer です

ESP32のサンプルファイルにBLE通信をするサンプルファイルがありますが、void loop()で値を更新するものでした

TImerで値更新ができれば高度なものができそうです

スポンサーリンク







フォローする

スポンサーリンク




コメント

  1. 匿名 より:

    複数タイマーを使用したいときはどのようにすればよいですか?

    • miyakawa より:

      コメントありがとうございます
      ESP32で複数のタイマーを使いたいという質問に対して回答致します

      現在(2019/05/05)におけるArduinoにてESP32でタイマーを使う方法を確認したところ、どうやらTicker.hで簡単にタイマー処理ができるようになっていました
      複数のタイマーを使用しているサンプルを下記に記述しておきますので参考にしてください


      #include "Arduino.h"
      #include "Ticker.h"

      Ticker helloTimer;
      Ticker worldTimer;

      void hello() {
      Serial.print("Hello");
      }

      void world() {
      Serial.println(" World");
      }

      void setup() {

      Serial.begin(115200);

      // 25msでfunc helloを呼び出し
      helloTimer.attach_ms(25, hello);

      // 26msでfunc worldを呼び出し
      worldTimer.attach_ms(26, world);
      }

      void loop() {

      }