本記事では,mruby on ev3rt+tecsのベータ版で公開されたBluetoothローダ機能を紹介します.
mruby on ev3rt+tecsとは
mruby (軽量Ruby)を使って,LEGO Mindstorms EV3を動かすためのプラットフォームです.
TECSによってコンポーネントベースで開発されており,mrubyプログラムからRTOS(TOPPERS/HRP2)の機能を呼び出すことができるように設計されています.
ETロボコン2016から公式プラットフォームに認定され,mrubyを使ってETロボコンに参加されたチームもいらっしゃるようです.
準備
まず,mruby-on-ev3rt+tecs_package-beta1.0.1.tar.gzをダウンロードしましょう.
今回は,Windows環境での紹介になります.
以下のものをインストールしてください.
- Cygwin
- Ruby
- GNU Make
- bison
- クロスコンパイラ
arm-none-eabi-gcc.exe (GNU Tools for ARM Embedded Processors)
クロスコンパイラにPATHを通しておいてください.
---ここまではスタンドアローンでの環境構築と同じです---
-
Tera Term
Bluetoothを用いてバイナリを転送する際に使用します. - Bluetooth Stack for Windows by Toshiba (必要であれば)
※Bluetoothの接続方法についてはこちらを参考にして下さい.
私の環境では,Bluetoothドングル(planexのBT-Micro4)とToshiba Bluetooth Stackを用いました.
Bluetoothローダを使ってみる
ここまで準備できたら,Cygwinを起動し,ダウンロードしたパッケージを解凍しましょう.(パッケージの名前は,ev3rt+tecsに省略しています.)
mrubyのビルド
まず,mrubyのビルドを行います.
cd ~/ev3rt+tecs/mruby
make
uImageの作成
mrubyのビルドが完了したら,Bluetoothローダを含むプラットフォームをビルドし,SDカードにコピーします.
cd ../hr-tecs/workspace/bluetooth
ここで,Makefile(58行目)を編集し,SDカードのドライブ名を設定します.
# SDのドライブ文字を指定
SD_DIR = /cygdrive/e/
設定できたら,ビルドします.
make tecs
make
mrubyバイトコードの作成
次に,作業ディレクトリに移動します.
cd ../mruby_app
このディレクトリでmrubyプログラム(.rb)を書いていきます.
Makefile (hr-tecs/workspace/mruby_app/Makefile) を編集し,実行したいアプリケーションを指定してください.
# mrubyのアプリケーションファイル名
#APP_NAME = battery_sample.rb
APP_NAME = button_sample.rb
#APP_NAME = color_sample.rb
#APP_NAME = color_sample2.rb
#APP_NAME = ev3way_sample.rb
#APP_NAME = gyro_sample.rb
#APP_NAME = lcd_sample.rb
#APP_NAME = lcd_sample2.rb
#APP_NAME = lcd_sample3.rb
#APP_NAME = led_sample.rb
#APP_NAME = motor_sample.rb
#APP_NAME = motor_sample2.rb
#APP_NAME = rtos_sample.rb
#APP_NAME = speaker_sample.rb
#APP_NAME = speaker_sample2.rb
#APP_NAME = touch_sample.rb
#APP_NAME = ultrasonic_sample.rb
デフォルトでは,button_sample.rbになっています.
指定したら,mrubyプログラムをコンパイルします.
make
( ../../../mruby/bin/mrbc button_sample.rb でもコンパイルできます)
button_sample__.mrb__というファイルが作成されたかと思います.
これがバイトコードになります.
Bluetoothを通して転送する
ここまで出来たら,EV3にSDカードを差し込み,起動します.
下のようにスタート画面が表示されたら,Bluetoothのペアリングを行います.
Toshiba Bluetooth Stackを立ち上げ,EV3とペアリングします.
PINコードは”0000”を入力してください.
次にTeraTermを起動し,EV3と接続します.
- __シリアル__を選択し,BluetoothのCOM番号のポートに接続
- 設定タブ-->シリアルポート-->ボーレート:115200
で設定完了です.
そしていよいよ転送です.
- ファイルタブ-->転送-->ZMODEM-->送信
- 転送するバイトコードを選択
転送が終わると,mrubyのプログラムが実行されます.
面倒なSDカードの抜き差しを省略
Bluetoothローダを使う利点は,SDカードの抜き差しが不要になることです.
EV3の機体によっては,SDカードの抜き差しがとてもやりづらいことがありますが,Bluetoothローダを使えば,そういったイライラもなくなります.
EV3のBackボタンを長押しすると,プログラムはリセットされます.
mrubyのプログラムを修正し,
make
し,更新されたバイトコードを同じ手順で転送することができます.
Cygwin上からコマンドで転送する
実はCygwin上からmakeコマンドを打つだけで転送することもできます.
(とことん楽をしたい方向け)
まずは,TeraTermにPATHを通して,
ttpmacro.exe
が実行できる状態にします.
次にMakefile(hr-tecs/workspace/mruby_app)を編集します.
# コマンドから転送する場合,TRANSFER = true とする
# デフォルトでは,TRANSFER = となっている
TRANSFER = true # 36行目
# COM番号
COM_PORT = 40 # 39行目 それぞれの環境に合わせてください
# ボーレート
BAUDRATE = 115200
あとは,
make
するだけで,転送されます!
Bluetoothローダを使う利点
- SDカードの抜き差しをしなくて済む
一番のメリットはこれだと思います. - printデバッグが可能
Bluetoothで接続されていれば,mrubyプログラムで
p, print, puts 関数の出力をTeraTerm上に表示することができます.