2018/7/3 M5Stack user meeting 2
@kishima
で始めるM5Stack
 &mrubyスクリプト開発
自己紹介
@kishimaといいます
メーカーで組み込み系の研究開発してます
最近趣味で電子工作はじめました
M5Stack:私の求めていたもの
ネットに繋がって、画が出せて、音も出る
 これをコンパクトに! それを待っていた!
自分で作るとたいへん・・・(楽しいけど)
今日はRuby(mruby/c)を使った、M5Stack
の開発環境の話をします
RubyのパパであるまつもとさんもM5Stack購入され
たようですね
開発環境はどんなの使ってますか?
・Arduino IDE
・PlatformIO
・ESP-IDF
・M5Clould
・その他
スクリプトで開発したい欲
● Rubyの勉強会などでよくWeb系の方ともお話す
る機会があります
● 電子工作的なものに興味持ってるけど・・・
○ 「はんだ付けできない」
○ 「C言語は触りたくない」
○ など
● こんな方にも触ってほしい。
● M5Stack with スクリプト言語はとてもよさそう
M5Stack(ESP32)で使える言語
● 標準だと、↓でしょうか?
○ C/C++(Arduino,ESP-IDF)
○ MicroPython(M5Cloud)
○ Lua(M5Cloud)
● ESP-IDFでビルドできて、ROMとRAMが足りれば
他の言語も動くはず
Pythonでたりるのでは?
確かに入門環境としては事足りてますよね
でも・・・
Rubyも使いたい!
理由:
好きだから
mruby、いけます
● ESP32用のポーティングがあります
○ https://github.com/mruby-esp32/mruby-esp32
mruby?
● Rubyを作ったまつもとさん(Matz)が手がけている
組み込み向けRuby
○ 「組み込み」には、ハードウェア組み込み、アプリケーション組
み込みを含みます
● Rubyよりもコンパクトに、組み込みのしやすさを考
慮して実装されている
● Rubyコード→コンパイル→バイトコード→VMで実
行、という形で動いて、VMを分離可能
mrubyでも大きすぎる?
● 400KB程度RAMがほしいらしい
○ HelloWorldさせるだけならもっと少なくても動きますが
● ESP32のRAMは520KBなので、ある程度長い
コード走らせるには、ちょっと余裕がなさすぎかもし
れません。
● どうしよう・・・
そんなあなたのために
mruby/cというのもあります
● 特徴
○ Mrubyのバイトコードを実行するコンパクトな処理系
■ コンパクトな分、使えない機能がある
● 例外、moduleなど
○ RAMの使用量が少ない
■ 速度よりもRAMを少なくすること重視
○ OSなしでもマルチタスク処理が可能
やりたいこと
● コードをPC上で打つと、M5StackのFlashへの書
き込みなしに、即実行できるようにする
○ PC上ではmirbというアプリがあります
● 面倒な書き込み待ちもなくてすぐ結果をみられ
る!
○ mruby&ESP32での実装例はありますが、今
回はこれを、mruby/cを使ってやってみます
ふつうのmirb
PC
mrib
mruby parser
mruby VM
Byte code
script
● 打ち込んだスクリプトは1命
令単位でパーサーでバイト
コードに変換
● 変換されたバイトコードを
mruby VM(バーチャルマシ
ン)で実行
● これを繰り返す
やってみたこと:
Remote-mribを作ってみた
PC
remote-mrib
M5Stack
mruby parser
mruby/c VM
extension
M5lib Arduino lib
Byte code
Byte code
via WiFi
script
● バイトコードをTCPでM5Stackへ転送
● M5Stackでは、M5Stack用のライブラリのAPIに対応させたmruby/cのVMを動
かして、受け取ったBytecodeを逐次実行
デモ動画
使用したサンプルコードはgithubにあげています。
PC側:
https://github.com/kishima/mruby/tree/rmirb
M5Stack側:
https://github.com/kishima/mrubyc_for_ESP32_Arduino
今後のこと
● まだ実用には程遠いので安定させる
● mruby/c VMからの応答を受け取れるようにする
● M5StackとESP32のAPIのバインディングの拡張
● WiFi経由の静的なバイトコード書き込み
● もっと使用メモリ減らす
● 技術書典5にmruby/c本出す

mruby/cで始めるM5Stack &mrubyスクリプト開発