M5Stack にZephyr(RTOS)とEdge Impulseを実装してみた

本サイトはアフィリエイト広告を利用しています。
Zephyr

M5Stack にZephyr(RTOS)とEdge Impulseを実装してみました。

内蔵の加速度センサを使って、ジェスチャー認識をさせています。

Zephyr(RTOS)でEdge AIっぽいテストをした内容を紹介します。

 

M5Stack にZephyr(RTOS)とEdge Impulseを実装してみた

M5Stack にZephyr(RTOS)とEdge Impulseを実装してみました。

内蔵の加速度センサを使って、ジェスチャー認識をさせています。

 

RTOSでEdge AIっぽいテストをした内容を紹介します。

実際のデモ動画が下記となっています。

 

今回の内容は「M5 Japan Tour 2026 Spring Nagoya」で発表させていただきました。

発表スライドは下記となります。

 

M5Stack CoreS3 + Zephyr

M5Stack CoreS3でZephyr(RTOS)を始めてみた内容は下記で紹介しています。

M5Stack CoreS3でZephyr(RTOS)を始めてみた

M5Stack CoreS3でZephyr(RTOS)を始めてみた
M5Stack CoreS3でZephyr(RTOS)を始めてみました。M5Stackも多くの機種がZephyr(RTOS)サポートされています。購入して、簡単なテストをしてみた内容を紹介します。M5Stack CoreS3でZephyr(...

 

M5Stack CoreS3 + Edge Impulse

M5Stack CoreS3の内蔵センサを使ってのAIモデル作成例は下記で紹介しています。

M5Stackの加速度センサ値をEdge Impulseにアップしてみた

M5Stackの加速度センサ値をEdge Impulseにアップしてみた
M5Stackの加速度センサ値をEdge Impulseにアップしてみました。Edge ImpulseでCoreS3用のエッジAIモデルを作成してみました。データアップロード方法含めて、概要ですが紹介します。M5Stackの加速度センサ値を...

GitHub

実際のテストしたリポジストリが下記となっています。

Edge Impulseのモデルに関しては、ライセンスの関係上、各自で作成お願いします

GitHub - iotengineer22/zephyr-m5-ei-imu: This repository is a project that executes EdgeAI inference based on accelerometer (BMI270) data using the M5Stack CoreS3 running Zephyr RTOS.
This repository is a project that executes EdgeAI inference based on accelerometer (BMI270) data using the M5Stack CoreS...

 

概要の紹介

今回は、IoTデバイス開発で大人気の M5Stack CoreS3 に、本格的な組み込み向けOSである Zephyr RTOS と、エッジAI開発プラットフォームの Edge Impulse を組み合わせて、デバイスの動きを認識する「ジェスチャー認識AI」を実装してみました。

単にAIを動かすだけでなく、リアルタイムOS(RTOS)の強みを活かしたマルチスレッド処理や、組み込みGUIライブラリ「LVGL」を使った画面表示まで踏み込んでみたので、その実装のポイントを紹介します!

 

今回作ったもの

M5Stack CoreS3に内蔵されている6軸IMU(BMI270)から加速度データを取得し、デバイスが今どんな状態かをAIが推論します。

推論結果は本体の液晶ディスプレイに、かわいい顔文字(アスキーアート)と一緒にリアルタイム表示されます。

  • Idle(放置状態)( -_- ) zzz 💤
  • Flick(横に振る)( >_< ) 💦
  • Updown(上下に振る)( @o@ ) ↕️
  • Knock(叩く)( O_O )! ✊

 

システム構成

  • ハードウェア: M5Stack CoreS3 (ESP32-S3搭載)
  • センサー: Bosch BMI270(内蔵IMU・加速度を使用)
  • OS: Zephyr RTOS
  • AIモデル: Edge Impulse (C++ SDK)
  • GUI: LVGL (Zephyr標準サポート)

従来のArduino IDE環境ではなく、モジュール性が高くマルチスレッドに強い Zephyr RTOS を採用したのが今回のこだわりの一つです。

 

実装のポイント

実装したポイントの概要を紹介します。詳細はGitHubのmain.cppを参照ください。

 

Zephyr RTOSによるマルチスレッド制御

AIの推論計算(数百ミリ秒かかる)を行っている間も、センサーデータの取得(100Hz = 10ms周期)を絶対に取りこぼさないようにする必要があります。

そこで、Zephyrのスレッド機能を使って処理を完全に分離し、優先度(Priority)を設定しました。

  • sensor_tid (優先度5: 高): 10msごとに確実にセンサーデータを取得
  • gui_tid (優先度6: 中): LVGLによる画面描画の更新
  • inference_tid (優先度7: 低): 溜まったデータを使ってEdge Impulseで推論

 

LVGLを使った表情豊かなディスプレイ表示

Zephyrは強力なGUIライブラリである「LVGL」を標準サポートしています。prj.conf で CONFIG_LVGL=y を設定するだけで簡単に組み込めます。

AIの推論結果(最も確率の高いラベル)を見て、画面の顔文字を切り替えるロジックを入れました。

 

フォントサイズも CONFIG_LV_FONT_MONTSERRAT_48=y で大きくし、デバイスに命が吹き込まれたようでとても可愛いです!

 

応用編でLVGLを使った顔に変更、またバー表示など対応してみました。

 

ビルド・書き込み

ZephyrのWestによるビルド・書き込み例は下記となります。

ビルド結果・各使用率は下記となりました。

 

実行結果

冒頭でも紹介した下記デモ動画のように、ジェスチャー認識の結果をLCDに表示します。

 

USBシリアルからは詳細のログも確認できます。

 

CPU・スレッド負荷もモニタリングしてみました。

加速度センサのI2C自体がゆっくりなので、ほぼIdle状態でした。

(LVGLで文字・バーのアニメーションを追加するとguiが≒20%まで負荷高まりました。)

 

M5 Japan Tour 2026 Spring Nagoya

2026/4/27にM5 Japan Tour 2026 Spring Nagoyaが開催されました。

名古屋にあるSTATION Aiにて開催されました。Connpassのリンク先は下記です

M5 Japan Tour 2026 Spring Nagoya @ STATION Ai (2026/04/27 17:00〜)
M5Stack User Group Japan 主催のM5 Japan Tourを、名古屋・STATION Ai にて開催します! STATION Ai 1階のテックラボを活用し、LT発表に加えて自作のM5Stack作品を展示できるハイブ...

 

●後日イベントの様子を記載します。

 

まとめ

M5Stack にZephyr(RTOS)とEdge Impulseを実装してみました。

内蔵の加速度センサを使って、ジェスチャー認識をさせています。

Zephyr(RTOS)でEdge AIっぽいテストをした内容を紹介しました。

 

コメント