Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Write your own mrbgem, Create your own device

Write your own mrbgem, Create your own device

Write your own mrbgem,
Create your own device
PicoRuby Overflow Kaigi
R3 institute, Osaka
2025-07-19

Avatar for Harukasan

Harukasan PRO

July 19, 2025
Tweet

More Decks by Harukasan

Other Decks in Technology

Transcript

  1. Write your own mrbgems, Create your own device Pico Ruby

    Overflow Kaigi, Osaka 2025-07-19 Shunsuke Michii / Harukasan
  2. Shunsuke Michii / Harukasan → ピクシブ株式会社 執行役員 CTO → 2012年にピクシブに新卒ソフトウェアエンジニアとして入社

    → 仕事では普段「はるかさん」と呼ばれています → 学生時代は高専ロボコンで主に機械加工を担当していました → PicoRabbitというやつをつくっています 2
  3. 16

  4. overflow.rb require "ws2812" image = [1, 1, 1, 1, 1,

    1, 1, 1, … (snip) ] # 画像データの配列を作成 web_safe_values = [0, 4, 8, 12, 16, 20] led = WS2812.new(26, 239) # static領域のstructを割り当て index = 0 image.each do |v| color = v - 1 r = web_safe_values[color / 36] # 画像データをRGBに展開 g = web_safe_values[(color % 36) / 6] b = web_safe_values[color % 6] led.set_pixel_at(index, [r, g, b]) # C側の配列に値をセット index += 1 end led.show # DMA転送開始 17
  5. 現在のharukasan's実装 → WS2812はstatic structを確保してそれを割り当てるようにした → Raspberry Pi PicoのDMAを用いて転送している → メモリが溢れているのはどうやらRuby世界

    → とりあえず(Cで実装されている)picoruby-prk-rgbは置き換えられそう → picoruby-prk-rgbはpicoruby-ws2812に依存するようにしたい → インターフェースがESP32実装と異なる → このあとの実装方針を相談したいです 18
  6. VSCode + RaspberryPi Pico SDK → 公式に提供されているVSCode拡張 → SDKとか環境をいろいろセットアップしなくていい →

    USBケーブルを抜いたり挿したりしなくていい! → この環境にPicoRubyだけを組み込みたい 24
  7. そこでCでつくってからmrbgemをつくる → まずはCで実装する → 次にそのコードを呼び出すmrubyを実装する → Cで書いた実装を ports/rp2040/*.c におく →

    それを呼び出す src/mrubyc/*.c のバインディングを書く → するとCでうごくものをすべてRubyで使えるようになる 26