ESP32(Arduino)で擬似マルチスレッド可能な「PollingTimer」ライブラリ開発のリリースノート

はじめに
PollingTimer
は、シングルスレッドで非ブロッキンなタスク処理を実現させるべく作ったライブラリです。下記リポジトリにて、MITライセンスで公開中です。
https://github.com/aragig/PollingTimer
下記動画のように、擬似的なマルチスレッドが実現できます。
また、マルチスレッドでは変数をvolatile
やMutex
などで管理しなければならず面倒です。非ブロッキンな工夫をすればシングルスレッドで十分、というのが私の経験上の感想です。
説明
PollingTimer
は、ArduinoおよびESP32用に設計されたシンプルなタイマーライブラリです。このライブラリは、ポーリングに基づくタイマー機能を提供し、擬似マルチスレッドのような操作を可能にします。割り込み処理を避けることで、状態管理を容易にします。直感的なAPIを通じて、定期的なタスクや特定の遅延後の操作を簡単にスケジュールできます。
主な機能
- シンプルなインターフェース:setIntervalメソッドを使用して、コールバック関数と実行間隔を設定します。
- 柔軟なタイマー制御:タイマーを開始(fire)、停止(cancel)、および状態を確認(isFired)します。
- ループおよびワンショットタイマー:繰り返しまたは一回限りの実行を選択できます。
- デバッグサポート:デバッグモードでは、詳細なログ出力が可能です。
使い方
リポジトリから、cloneまたはzipファイルをダウンロードして、PollingTimer.h
およびPollingTimer.cpp
をライブラリディレクトリへ直接配置します。
プログラム内でPollingTimer
をインクルードします。
#include "PollingTimer.h"
タイマーのインスタンスを作成します。
; PollingTimer timer
そしてsetup
内で、setInterval
を呼び出し、コールバック関数の登録や、実行間隔(ms)、ループの有無を設定します。
.setInterval(yourCallbackFunction, interval, isLoop); timer
その後、fire
でタイマーを発火させます。
.fire(); timer
最後に、loop
イベント内でhandler()
を呼び出します。
void loop() {
.handler();
timer}
注意事項
PollingTimer
はシングルスレッドで動作しているため、登録したコールバック関数内の処理中はループイベントはブロックされます。ですからコールバックイベント内では、不要なdelay
などは使わずに、早く抜けられるようにする工夫をしてください。
使用例
冒頭で紹介した擬似マルチスレッドなLチカを実現すべく、PollingTimer
を使った例です:
#include "PollingTimer.h"
;
PollingTimer timer
void blinkLED() {
// Code to toggle LED state
}
void setup() {
(LED_BUILTIN, OUTPUT);
pinMode.setInterval(blinkLED, 1000, true);
timer.fire();
timer}
void loop() {
.handler();
timer}
詳しくはリポジトリ内の、exampleフォルダーをご覧ください。
関連記事
- ダイソーのリモコンシャッターをESP32で通信するためのヘルパー関数
- ESP32でWiFi接続を簡単にする「WiFiHelper」ライブラリ開発のリリースノート
- DS18B20の使い方|Arduino・ESP32・Raspberry Pi
- ADコンバータADS1115の使い方【ESP32・Arduino】
- ESP32でST7735 TFT LCD液晶ディスプレイを使ってみる