Developers_プログラム作成・VMコンパイル・書き込み - gfd-dennou-club/mrubyc-esp32 GitHub Wiki
はじめに
マイコンで mruby/c を使う場合,マイコンの開発環境に mruby/c 関連のソースを加えて,VM をコンパイルすることになる. 本リポジトリでは,ESP32 マイコンの公式開発環境 (ESP-IDF 環境, C 言語) のソースツリーに mruby/c 関連のソースコードを 加え,C 言語と mruby/c コードを一緒にコンパイルしている.この時,メインプログラムはあくまで C 言語側である.
本リポジトリのディレクトリ構造は,ESP-IDF の標準形に準拠している. main 以下に C 言語のファイル,components 以下にユーザの拡張ライブラリを置くことになっているため, mruby/c の VM を make するためのソースコードは components 以下に置いている. また,本リポジトリ独自の mruby/c ソースを置くためのディレクトリとして mrblib を用意している.
$ tree -L 4 iotex-mrubyc-esp32/
mrubyc-template-esp32/
├── CMakeLists.txt
├── components 外部リポジトリから取り込んだソースの置き場
│ └── mrubyc-3.4.0 mruby/c の VM のソースなど
..........(中略)...............
├── main C 言語のソース置き場
│ ├── CMakeLists.txt
│ ├── Kconfig.projbuild
│ ├── main.c メインプログラム (C 言語側)
│ ├── mrbc_esp32_adc.c
..........(中略)...............
└── src メインプログラム (Ruby 側)
├── master.rb
└── slave.rb
VM のコンパイルとマイコンへの書き出し
リポジトリをクローンする.
$ git clone https://github.com/gfd-dennou-club/mrubyc-esp32.git
$ cd mrubyc-esp32
idf.py build コマンドで VM がコンパイルされる.
$ idf.py build
idf.py flash コマンドで VM がマイコンへの書き込まれる
$ idf.py flash
プログラムの作成と実行 [シングルタスク]
メインプログラムは src/master.rb に設置する. 以下は "Hello World" を定期的に表示するだけのプログラムとなっている.
$ cat src/master.rb
while true
puts "Hello World!"
sleep 5
end
idf.py spiffs-flash で master.rb をコンパイルしてマイコンに書き込む. さらに,idf.py monitor でモニタ出力,を行うことができる. モニタ出力を止めるときは Ctrl-] を打鍵する.spiffs-flash と monitor は同時に idf.py の引数として与えることができる.
$ idf.py spiffs-flash monitor
プログラムの作成と実行 [マルチタスク]
mrubyc-esp32 リポジトリで配布している VM はマルチタスクに対応している.マルチタスクで動かす場合には, src ディレクトリ以下の master.rb と slave.rb の 2 つに,並行して動作させるプログラムを書きこめばよい. なお,シングルタスクでの動作に戻す場合は,src/slave.rb ファイルの中身を全てコメントアウトすれば良い.
マスターとスレーブで異なる周期で Hello World を表示するだけでなく,スレーブで設定した変数をマスターで表示する サンプルプログラムは以下のようになる. なお,共有変数として使いたい変数には,変数名の先頭に $ (ドル) 記号を付すこと.
$ vi src/master.rb
$msg = "ESP32"
while true
puts "hello world from #{$msg} (master)"
sleep 1 # 1 秒おき
end
$ vi src/slave.rb
i = 1
while true
puts "hello world from ESP32 (slave) #{i}"
if ( i % 2 == 0 )
$msg = "hoge"
else
$msg = "peke"
end
i += 1
sleep 5 # 5 秒おき
end
マルチタスクの場合も,プログラムの書き込み方法はシングルタスクの場合と同じである. idf.py spiffs-flash で master.rb をコンパイルしてマイコンに書き込む. さらに,idf.py monitor でモニタ出力,を行うことができる. モニタ出力を止めるときは Ctrl-] を打鍵する.spiffs-flash と monitor は同時に idf.py の引数として与えることができる.
$ idf.py spiffs-flash monitor
...(中略)...
hello world from ESP32 (master)
hello world from ESP32 (slave) 1
hello world from peke (master)
hello world from peke (master)
hello world from peke (master)
hello world from peke (master)
hello world from ESP32 (slave) 2
hello world from hoge (master)
hello world from hoge (master)
hello world from hoge (master)
hello world from hoge (master)
hello world from hoge (master)
hello world from ESP32 (slave) 3
hello world from peke (master)
hello world from peke (master)
hello world from peke (master)
hello world from peke (master)
hello world from peke (master)
hello world from ESP32 (slave) 4
hello world from hoge (master)
hello world from hoge (master)
...(以下略)...