Slide 1

Slide 1 text

M5Unifiedと PicoRubyで楽しむ M5シリーズ

Slide 2

Slide 2 text

@kishima 組み込み系エンジニア プレイングマネージャ業 mruby好き 電子工作好き 2

Slide 3

Slide 3 text

2025の流行りはPicoRuby Ruby x マイコンが熱い

Slide 4

Slide 4 text

PicoRubyとESP32とM5Stack PicoRubyは元々、Raspberry Pi Pico がター ゲット @YuuuさんがESP32へ対応 ESP32を使ったM5Stackという 製品がある

Slide 5

Slide 5 text

我が家のM5シリーズ(の一部)

Slide 6

Slide 6 text

M5のなやみ ▸ きれいにまとまったデバイスでかわいい ▸ ふつうはC++で開発 ▸ M5のC++ライブラリを使えば、簡単に画面 描画などもできる ▸ PicoRubyだと自分で C++ライブラリを叩く mrbgemを実装必要!

Slide 7

Slide 7 text

M5Stack向けのライブラリをgem化しよう ● 標準ライブラリ(M5Unified/M5GFX) ○ 画面描画 ○ LED ○ ボタン ○ 電源 ○ IMU ○ スピーカー ○ マイク ○ etc https://docs.m5stack.com/ja/arduino/m5unified/helloworld

Slide 8

Slide 8 text

たくさんのメソッド 描画系(M5GFX)だけで100個以上! バインディングを書く必要あり void drawPixel ( int32_t x, int32_t y, const T& color) void drawCircle ( int32_t x, int32_t y, int32_t r, const T& color) … … … さすがに無理・・・

Slide 9

Slide 9 text

どうやって実装するか CだとFFIが使えるが・・・  ※FFI:Foreign Function Interface     Cなどの関数を違う言語から直接呼ぶ仕組み マイコン環境で使うことが難しい・・・   今回は、Claude Codeにやらせた

Slide 10

Slide 10 text

実装 1. 実装対象の関数をC++ヘッダからスクリプト で抽出 2. 抽出した結果をYAMLにまとめる 3. YAMLからmrubyバインディングのスケルト ン関数を生成 4. スケルトン関数を段階的に実装 作業量が多いので、そのままではAIでも対応できない ◆実装方針

Slide 11

Slide 11 text

中間生成物のYAML

Slide 12

Slide 12 text

現在の結果 描画系 99/180 メソッドを実装 - M5Unified Core: 20/20 (100%) ✅ - M5GFX Color: 12/12 (100%) ✅ - M5GFX Draw: 30/30 (100%) ✅ - M5GFX Fill: 3/13 (23%) - M5GFX Text: 9/31 (29%) - M5GFX Image: 2/13 (15%) - M5GFX Display: 9/29 (31%) - M5GFX Low-level: 4/18 (22%) - M5GFX Utility: 0/13 (0%) https://github.com/kishima/picoruby-m5unified/tree/main

Slide 13

Slide 13 text

できたので、色々動かしてみる 我が家のM5から以下を試す ● M5Stack ● M5StickC Plus2

Slide 14

Slide 14 text

こんな感じで

Slide 15

Slide 15 text

同じコードで動かせる

Slide 16

Slide 16 text

課題 AIですべて実装できたとしても、200を超えるメ ソッドを継続的にメンテするのは難しい・・・ Ruby-FFI的な仕組みが必要