mruby-esp32 を使って ESP32 上で動くアプリケーションを Ruby 言語で書いてみる(入門編)


はじめに

@GORO_Neko です。ご存知の方ご無沙汰してます。初めての方お初にお目にかかります。

いつも通りではありますが、まずお断りをば一言。

以下は、ボクが所属する会社の意向を反映したものでもスタンスを示すものでもなく、単なる一個人の趣味の活動から産まれた記述です。

ESP32 & mruby

ESP-WROOM-32(以下 ESP32)は、Espressif 社製の、Arduino 互換マイコンボードです。

(上記の写真は ESP-32 を手軽に使えるように開発ボード化した ESP32-DevKitC )

少し前に、mruby-esp32 を使うことで、ESP32 上で、メインロジックを Ruby のコードで記述して、アプリケーションを動作させることが出来ることを紹介する記事を書きました。

前の記事では、どうすれば任意の機能のアプリケーションを、Ruby を使って書けるかまで、紹介しておりませんでした。

今回は、mruby-esp32 のどこをどうカスタマイズ(もちろん書くのは Ruby のコードだけ!)することで、任意の機能を持った、ESP32 用のプログラムが作れるのか、説明しようと思います。

mruby-esp32 の構成

GitHub から clone 等して得られる mruby-esp32 プロジェクトの構成を、ものすごーく荒っぽく書くと以下のように言えると思います。


  1. mruby-esp32 をビルドするためのスクリプト類
  2. アプリケーションのエントリーポイントとなる C 言語で書かれたコード
  3. mruby vm 構成コード
  4. Ruby で書かれたユーザプログラムのコード

mruby-esp32 ベースなアプリケーションの起動シーケンス

mruby-esp32 をビルドした結果出来上がったアプリケーションは、ESP32上で以下のようなステップを踏んで動作します。


  1. C 言語製のエントリーポイント機能が起動
  2. 自身に格納された mruby vm を起動
  3. 自身に格納された、ruby 言語製のユーザアプリケーションコード( mruby vm が実行可能なバイトコード形式に変換済みの物)を起動した mruby vm にロード
  4. mruby vm が渡されたユーザアプリケーションコードを実行

Ruby 言語を使って、アプリケーションを書く方法

Ruby 言語製のユーザアプリケーションコードは、任意の名前をつけたスクリプトファイルとして記述が可能です。

作成したスクリプトファイルは、必ずディレクトリ "mruby-esp32/main/examples" に格納する必要があります。

"mruby-esp32/main/examples" に格納されていて、ビルド時にパラメタ "MRUBY_EXAMPLE" の値としてファイル名を指定された Ruby スクリプトファイルの内容が、アプリケーションとして動作することになります。

以下の内容のファイルを "loop_test.rb" という名前で作成し "mruby-esp32/main/examples" ディレクトリに格納したとします。

loop do
  puts "test"
  ESP32::System.delay(10 * 1000)
end

そして、開発用の PC と ESP32 を USB ケーブルで接続した後、"mruby-esp32" ディレクトリ直下で以下のコマンドを実行したとします。

$ make MRUBY_EXAMPLE=loop_test.rb
$ make MRUBY_EXAMPLE=loop_test.rb flash monitor

実行結果は以下の写真の通り。

10 秒おきに延々と "test" という文字列が表示されます。

と、言う訳で、最初の目論見通り、Ruby 言語でスクリプトを書くだけで、任意の動きをする、ESP32 用アプリケーションが作成できました。

ESP32 は、他の電子部品を接続可能なマイコンボードなので、次は何かセンサー類をくっつけて、そこから計測値等を取得できるようなアプリケーションを、Ruby スクリプトを書くだけで実現してみようと思います。

では、また。