M5Stack/ESP32 Arduino向けのmruby/cライブラリを作る
TechArduino, c, Embedded, ESP32, Japanese, M5Stack, mruby/c
Wio LTE Arduino用にライブラリ化したmruby/cを少しだけ改造して、ESP32 Arduino用にしてみました。
https://github.com/kishima/mrubyc_for_ESP32_Arduino
まだAPIの移植はほとんどできていませんが、M5StackのLCD用のサンプルスケッチと同じ処理をスクリプトで走らせる事ができます。
内部では、ビルド時にM5Stackのフラグが定義されているときだけ、バインディングがビルドされるようにしています。簡単なので、ソースを見ると自前で拡張もできると思います。
サンプルコード:
https://github.com/kishima/mrubyc_for_ESP32_Arduino/blob/master/examples/M5_lcd/M5_lcd.rb
実行例:
M5StackのLCDサンプルスケッチを、mruby/cで動くように足りないAPIなど移植した。ランダムな三角形を背景に映ってるようなmrubyスクリプトで描いてるけれど、実際の描画はm5stack提供のライブラリの関数が行ってるので、十分早い。 pic.twitter.com/3vVOzVmm8T
— kishima (@kishima) June 23, 2018
狙い
- ESP-IDFをインストールしなくても、ArduinodeIDEだけで、mrubyでの開発環境を整えられること。
- Arduino環境上でVMを実行することで、様々なデバイスを接続するときに、既存のArduinoのスケッチの資産を最大限活用できるようにすること。
- mruby,mruby/cはバインディングを書くのが簡単なのがよい
- 最終的には、一度mruby/cのブートローダスケッチを書き込めば、それ以降mrubyのコードを触るだけで開発できるようにする。
- 標準のmrubyでもメモリ的な要求が厳しいマルチスレッド(マルチタスク)を気軽に使えるようにしたい。コンパクトなマルチタスクはmruby/cの大きな特徴なので。
使い方
- M5Stack Arduinoの開発環境を準備する
https://github.com/m5stack/M5Stack - mruby v1.3のmrbcを準備する(Windowsの場合は、mrbc.exe)
https://github.com/mruby/mruby/releases - githubからライブラリをcloneして持ってくる
$ git clone https://github.com/kishima/mrubyc_for_ESP32_Arduino.git
- ライブラリをArduinoのライブラリフォルダへコピーする
普通のArduinoライブラリ利用の手順と一緒です。
https://garretlab.web.fc2.com/arduino/libraries/installation/index.html#manual - ArduinoIDEを起動して、スケッチ例からスケッチを読み込み、適当な名前をつけて保存する。
ファイル→スケッチ例→mruby/c for EPS32-Arduino→basic - 保存したスケッチのフォルダにあるRubyスクリプト(basic.rb)を更新する
- basic.rbのあるディレクトリで、バイトコンパイルする
$ mrbc -Bcode -E basic.rb
バイトコンパイルの結果、basic.cが更新されているはずです。
- M5StackをUSBで接続して、ArduinodeIDE上でビルド&書き込みする。
basic.rbのファイル名は自由に変更可能です。
今後やりたいこと
- APIバインディングの拡張
- 一度ArduinoIDEで書き込めば、C/C++のコードを一切触らないで開発できるCLI環境
- マルチタスク機能へも対応
- あと、もう一つ小ネタを
関連記事
直近の活動予定
直近の対外的な活動予定を記載しています。 今後のイベント 特になし (技術書、も ...
(Hacked) mruby/c can work on Arduino Uno
As you know, Arduino Uno has only 2KB RA ...
mrubyバイトコードハンドブックv1.1公開と頂いた質問への返答
だいぶ時間が立ってしまいましたが、技術書典6で新刊「mrubyバイトコードハンド ...
Rubyのスレッドはタイムスライスで切り替わる?
(English Version) Rubyのスレッド切り替えのトリガーは? ...
mruby2.0.0 Opcode一覧
mruby2.0.0以降のOpcodeについての説明はあまりネット上では見かけ方 ...
独習mrubyバイトコード[OP_LOADT]
OP_LOADT Arguments A:レジスタ番号 How it works ...
Recent Comments