Categories: 工作・開発

ESP32内部のタスクCPU使用率をグラフ表示するライブラリ、Webブラウザでリアルタイムモニタリング

ESP32でマルチタスクプログラムを開発していると、各タスクがどれだけCPUを消費しているか把握するのは意外と難しい。デバッグ用のシリアル出力では瞬間的な情報しか得られず、時系列での変化を追うのは困難だ。そんな課題に対して、GitHubユーザーのjameszah氏が開発したのが「ESP32-Task-Manager」だ。

このライブラリの特徴は、ESP32内部で動作する全てのタスクのCPU使用率を記録し、Webブラウザ上でグラフ表示できる点にある。既存のArduinoプログラムに2行追加するだけで、IPアドレスのポート81番にアクセスすると、過去100秒間のタスク別CPU使用率の推移がグラフとして表示される。

使い方はシンプルだ。まず、ヘッダーファイル「taskman.h」をインクルードし、setup関数内で「taskman_setup()」を呼び出すだけで準備は完了する。プログラムを実行すると、ESP32のIPアドレス(例:192.168.1.111)のポート81番で、Webベースのモニタリング画面が利用できるようになる。

システムは1秒ごとにタスクのCPU使用率を測定し、2%以上の使用率を示したタスクを記録する。ESP32-S系(AI ThinkerのESP32-CAMなど)は2コア搭載のため、全タスクの合計使用率は最大200%となる。グラフはリアルタイムで更新されるが、WiFi経由の1秒更新には遅延が発生する可能性がある。ブラウザでリフレッシュすれば、ESP32内部に保存された100秒分の完全なデータを一度に取得でき、遅延の影響を排除できる。

グラフの下部には、タスクのスナップショット情報も表示される。各タスクの名前、実行コア、優先度、スタックハイウォーターマーク(Stack High Water Mark、スタックの最大使用量)、状態が30秒ごとに更新される。これにより、タスクの実行状況を詳細に把握できる。

ただし、この仕組みには制約もある。CPU使用率を測定する「cpu_monitor」タスクは、コア0で優先度7で動作する。Webサーバーは優先度5、WiFiは優先度23で動作するため、優先度7より高いタスクがcpu_monitorの実行を妨げると、データ収集が正確に行われない可能性がある。マルチタスクシステムでは、優先度の設定が測定精度に影響を与えることを理解しておく必要がある。

グラフ上では、凡例のタスク名をクリックすることで、特定のタスクのグラフ表示を非表示にできる。また、グラフ上の線にカーソルを合わせると、そのタスク名と現在のCPU使用率が表示される。これにより、複数のタスクが動作している場合でも、目的のタスクに注目しやすい。

データはHTTPエンドポイント経由でも取得できる。「http://IPアドレス:81/dataInfo」にアクセスすると、各タスクの詳細情報がJSON形式で返される。データ収集は1秒に1回のみ実行されるため、1秒以内に複数回アクセスしても同じデータが返される。

このツールは、ESP32のマルチタスク動作を可視化する実用的なアプローチだ。特に、複数のタスクが競合してパフォーマンス問題が発生している場合、どのタスクがボトルネックになっているかを時系列で確認できる点が有用だろう。2行のコード追加だけで導入でき、既存のプロジェクトに組み込みやすい設計も評価できる。

ライセンスはGPL-3.0で、GitHubで公開されている。

関連情報

ESP32-Task-Manager(GitHub)

FabScene編集部

FabScene編集部