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環境
- マルチタスク機能へも対応
- あと、もう一つ小ネタを
関連記事
直近の活動予定
直近の対外的な活動予定を記載しています。 今後のイベント 特になし (技術書、も ...
Let’s make apps on mruby/c for M5Stack(ESP32)
This article comes from 2nd M5Stack user ...
ESP32-WROVER-B のSPI-SRAMを試してみる
ついに8MBのSPI-SRAMを搭載した技適マーク付きのESP32-WROVER ...
子供向けの簡単なおもちゃを作る(ATTiny85のPWMで音を出す)
姪と甥に会いに行くのだけど、姪へのお土産はあるが、甥へのお土産がないので、作って ...
独習mrubyバイトコード[OP_LOADSELF]
OP_LOADSELF Arguments A:レジスタ番号 How it wo ...
RubyKaigi2019へ行ってきた
2019/4/18-20に開催されてRubyKaigi2019に参加するために、 ...
Recent Comments