mruby on ev3rt+tecsのBluetoothローダ機能を使う方法


本記事では,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環境での紹介になります.
以下のものをインストールしてください.

---ここまではスタンドアローンでの環境構築と同じです---

  • 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カードのドライブ名を設定します.

Makefile
# SDのドライブ文字を指定
SD_DIR = /cygdrive/e/

設定できたら,ビルドします.

make tecs
make

このような画面になれば,ビルド成功です.

mrubyバイトコードの作成

次に,作業ディレクトリに移動します.

cd ../mruby_app

このディレクトリでmrubyプログラム(.rb)を書いていきます.
Makefile (hr-tecs/workspace/mruby_app/Makefile) を編集し,実行したいアプリケーションを指定してください.

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)を編集します.

Makefile
#  コマンドから転送する場合,TRANSFER = true とする 
#  デフォルトでは,TRANSFER = となっている
TRANSFER = true            # 36行目

#  COM番号
COM_PORT = 40             # 39行目 それぞれの環境に合わせてください
#  ボーレート
BAUDRATE = 115200

あとは,

make

するだけで,転送されます!

Bluetoothローダを使う利点

  • SDカードの抜き差しをしなくて済む 一番のメリットはこれだと思います.
  • printデバッグが可能 Bluetoothで接続されていれば,mrubyプログラムで p, print, puts 関数の出力をTeraTerm上に表示することができます.