Mac OS X でETロボコンに出よう！（Bluetooth編）

EV3RTとMac(yosemite)をBluetooth経由で通信するための情報です。
MacとEV3RTの接続のしかたから、minicomを使ってプログラムの送信をするところまで解説します。
環境構築がまだの場合は[環境構築編](http://qiita.com/drafts/3cee3991ea9472a1f6b6)を参考にやってみてくださいね。

※ EV3 とMacを行き来してちょっと面倒ですが、順番どおりにやってください。

(2015/5/30追記 yosemite 10.10.2 と10.10.3 で一部挙動が違うようです。)
(2018/10/22追記 Sierra と EV3RT β7 用に更新しました)

## minicomの準備

minicomは
http://dev.toppers.jp/trac_user/ev3pf/wiki/SampleProgram
「シリアルケーブルによるアプリケーションのロード方法」のところで使われている、Teratarm の代わりに使います。見た目はTeratarmよりは劣りますが、Macだとminicomが一番使いやすそうです。[^1]
[^1]: OS X 10.8 を使っていたときに日本語化されたメニューが表示されるバージョンを使っていたことがありますが、そちらは表示が崩れて使いづらかったです。

私はHomebrewを使っているのでHomebrewを使って解説しますが、MacPortsでも同様にできるようです。(MacPortsについては、私の方では動作確認をしていません。試した方がいたらコメントいただけるとうれしいです)

### lrzsz のインストール

MacからEV3RTにファイル転送する際にZMODEMというバイナリ転送プロトコルを使っています。このZMODEMに対応するために、lrzszをインストールします。

```
brew install lrzsz
```

### minicom のインストール

```
brew install minicom
```

MacPortsの場合は以下のコマンドでできるようです。

lrzszのインストール

```
sudo port install lrzsz 
```

minicomのインストール

```
sudo port install minicom
```

### minicomの設定

minicomの設定画面を表示します。

```
minicom -s
```

![configuration.png](https://qiita-image-store.s3.amazonaws.com/0/34097/29b40d3b-e704-9859-e31a-03d4468c952d.png)

`Serial port setup` を選択してEnterキーを押してください。（上下キーで選択が変更できます）
<img width="205" alt="スクリーンショット 2018-10-22 14.48.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/34097/39f77323-ca81-4831-223c-ccd98809ef78.png">


以下のように設定してください。

![SerialPortSetup.png](https://qiita-image-store.s3.amazonaws.com/0/34097/76f4802b-c438-0460-e1a8-79f4925c376c.png)

```
A - Serial Device : /dev/tty.MindstormsEV3-SerialPor
E - Bps/Par/Bits 115200 8N1
F - Hardware Flow Control : No
G - Software Flow Control : No
```
※ SerialPort ではなく SerialPor (tがない)なので注意

`ls /dev/tty.*`
でEV3のBluetooth設定がみれます
TODO:lsの結果

`Modem and dialing` を選択
画像のように設定してください。
![ModemAndDialing.png](https://qiita-image-store.s3.amazonaws.com/0/34097/9568e82e-a3c5-f898-c8a4-d56c9ba83632.png)

#### デフォルト設定として保存する
`Save setup as dfl` を選択
設定した内容をデフォルト設定に保存します。
(一瞬以下のような メッセージが表示されます)
![saved.png](https://qiita-image-store.s3.amazonaws.com/0/34097/31e7f3d3-6a5c-2e7d-371f-18e673bec5dd.png)

#### 設定を名前をつけて保存する

Bluetooth で接続するのはEV3だけの場合は「デフォルト設定として保存」すればよいでしょう。
他のマイコンなどでも使用したい場合は設定内容を「名前をつけて保存」にした方が便利です。

`Save setup as..`を選択します。
<img width="220" alt="スクリーンショット 2018-10-22 13.56.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/34097/316f6b69-05e7-d67f-eaa7-22670d8cf30a.png">

以下のようなウィンドウが表示されるので、好きな名前をつけてください。
<img width="321" alt="スクリーンショット 2018-10-22 14.13.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/34097/fa352ba3-334b-09e7-b061-3d5c1c46e1fa.png">

名前を入力したら「enter」キーを押して確定します。

<img width="306" alt="スクリーンショット 2018-10-22 14.14.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/34097/55eaa54c-3970-7fd7-f9b0-c6c71525132c.png">
（名前を「hoge」にした例）

メニューで`Exit` を選択して configuration ダイアログを終了します。

設定内容は、アフレルさんの[ネイティブLinuxプログラミング方法 （Ver0.3)](http://www.afrel.co.jp/archives/7301) の「付属A．minicomの設定」を参考にしました。[^2]
[^2]: Ubuntu用ですが、設定内容は同じなので

### minicom を起動する

設定内容をデフォルト設定として保存した場合

```
minicom
```

設定内容に名前をつけて保存した場合

```
minicom hoge
```

(hoge には実際につけた名前を入れてくださいね)
PCにログを送信したい場合はここまででOK

# EV3RTにPCからアプリを送信する

2018年時点ではUSB経由でアプリを送信する方法の方がおすすめです。

## EV3RT と Mac をBluetoothで接続する
minicomのインストールができたら、今度はEV3側の準備をしましょう。

### EV3側での準備
1. EV3に動的ローディング形式用に作成したSDカードを差し込みます。[^3]
2. EV3の真ん中のボタンを押して起動します。
3. EV3RT Console と書かれた画面が表示されたら、真ん中のボタンを押します。
4. EV3RT App Loader と書かれた画面が表示されます。

![EV3-AppLoader2.png](https://qiita-image-store.s3.amazonaws.com/0/34097/f84272d8-22d4-6599-2ad3-9eb682b8462a.png)

[^3]: 作り方は〜を参照してください。

ここまでできたら次はMac側の設定にいきます。

※ 現在のバージョンではここで Bluetoothを選択するとエラーになってしまうので、まだ選択しないでください[^4]

[^4]: 2015/4/22版の場合、ここでBluetoothを選択すると、Error Receiving applecation file failed. というメッセージが表示されます。 

### Mac側でBluetooth画面を開く
右上のリボンを横にしたような[Bluetoothのアイコン]をクリック→[Bluetooth環境設定を開く...]
![Bluetooth環境設定2.png](https://qiita-image-store.s3.amazonaws.com/0/34097/2af4ef51-8557-e022-b798-b83962b23c6e.png)
もしくは、
[アップルメニュー]→[システム環境設定]→[Bluetooth]
からBluetoothの画面を開きます。

しばらく待つと「Mindstorms EV3」が出てくるので、ペアリングボタンをクリックします。（EV3ではないので注意）
![ペアリング.png](https://qiita-image-store.s3.amazonaws.com/0/34097/12fb0cf1-9880-9e87-d082-4ccd7bf8df63.png)

一度ペアリング失敗と表示されますが、そのまま数秒待つと接続済みに変わります。(10.10.3 の場合は接続済みに変わりませんが、そのまま次に進んでください)
![ペアリング失敗.png](https://qiita-image-store.s3.amazonaws.com/0/34097/bfc9fba6-306d-f07d-ab62-a36ecff868a1.png)

![接続済.png](https://qiita-image-store.s3.amazonaws.com/0/34097/235092b8-a05b-5984-f268-abbd8fa8c86e.png)



### minicom から接続する

まず、EV3の EV3RT App Loader のメニューからBluetooth を選択します。
（上下キーを使って、`>` をBluetooth の横に移動させます）
![EV3-AppLoader.png](https://qiita-image-store.s3.amazonaws.com/0/34097/c778fddf-ec7c-e6ec-56db-013b0aaa3f53.png)

本体の中央のボタン(濃い灰色のボタン)をクリックすると、Receive App File という画面が表示されましたね。
![EV3-ReceiveAppFile.png](https://qiita-image-store.s3.amazonaws.com/0/34097/6d13cc6d-366a-33f3-0698-17ae27d5d784.png)

画面が表示されたことを確認したら次にいきましょう。

ターミナルで`minicom`と入力します

```
minicom
```

```
Welcome to minicom 2.7
```
上記のようにwelcome と表示されたら起動できました。（インストールした時期によりバージョンは上記と異なる可能性があります）

## minicom からapp を転送してみる

escキーとzキーを同時に押すと以下のようなメニューが表示されます。
(タイミングによってはなかなか表示されない場合もあります。表示されない時は数秒待ってもう一度escキーとzキーを押してみましょう)

![minicomメニュー.png](https://qiita-image-store.s3.amazonaws.com/0/34097/72a4035f-cd03-061d-851e-102c68e12bc8.png)


Send files は s となっているので、s キーを押します。
[upload]と書かれた枠が表示されるので、zmodemを選択しEnterを押します。
（zmodemが一番上にあるので、選択(黒背景に白字)されていると思います。選択されていない場合は上下キーで移動して選択しましょう。）
![uploadメニュー.png](https://qiita-image-store.s3.amazonaws.com/0/34097/a752df22-c7c6-f325-fcdd-e41257ec2ff3.png)


[Select one or more files for upload]というダイアログ（というか枠）が表示されます。
![minicom使い方2.png](https://qiita-image-store.s3.amazonaws.com/0/34097/0c2dc860-4845-3955-1586-d2b2296d15d0.png)

わかりづらいかもしれないけど、そのフォルダの中にあるサブフォルダとファイルの一覧が表示されています。図の中で「上下キーで動かす」と書いた矢印の先にある灰色の■で選択状態を表しています。この四角は上下キーで移動することができます。
下にあるメニューは左右キーで選択を変更できます。Enterキーを押すと確定します。
※ フォルダがたくさんあって一覧に入りきらない場合、▼キーを押し続けると出てきます。（スクロールバーは出てないけど、スクロールします）

カレントディレクトリがユーザフォルダになっているので、ev3rt/hrp2/workspace まで移動するには、フォルダを1つずつ選択していきます。[^5]
[^5]: この図ではev3rtフォルダは下の方に隠れてしまってますが・・・
ev3rt の横に■を移動してスペースキーを2回連打します。そうすると、ev3rtフォルダに移動するので、hrp2のところまで■を移動して、スペースキーを2回連打、同様にしてworkspaceフォルダの内容を表示させます。

app の横に■を移動したらスペースキーを押し、appが反転された状態にし、下のメニューで[Okay]が選択されているのを確認して、returnキーを押します。
（[Okay]が選択されていない場合は左右キーでカーソルを移動して選択状態にしましょう）

![app選択.png](https://qiita-image-store.s3.amazonaws.com/0/34097/ee35598d-4c66-f4e0-916b-5637ef4f07bc.png)

![app選択2.png](https://qiita-image-store.s3.amazonaws.com/0/34097/16cb92ae-3625-a112-b5dd-73c9d250e217.png)

Enterを押すと送信開始し、Upload中の画面が表示されます。送信し終わったら自動的に消えます。（案外時間がかかります）

送信中のダイアログ
![送信.png](https://qiita-image-store.s3.amazonaws.com/0/34097/097d565f-a986-9178-f2ef-73ae96a1138b.png)

送信完了（表示がすぐ消えるので、気を抜いてると見落としますw）
![送信成功.png](https://qiita-image-store.s3.amazonaws.com/0/34097/77263980-15e2-bafd-0b0a-d40f8de86aea.png)


EV3側で App Received と表示されていたら送信OKです。
![EV3-AppReceived.png](https://qiita-image-store.s3.amazonaws.com/0/34097/940ce03b-232d-602e-1834-f8aa1564799a.png)


本体の中央ボタンをクリックすると、minicomで送信したappが起動されます。

※　2015/4/22版だと画面にエラーログが表示されているようです。


## トラブルシューティング

* busyが表示された場合

接続すると以下のようなメッセージが表示されることがあります。

```
minicom: cannot open /dev/tty.MindstormsEV3-SerialPor: Resource busy
```

このようなメッセージが表示されたら、minicomを終了->EV3RTを再起動->MacでBluetoothの接続->EV3RTのメニューでBluetoothを選択->minicomで接続の順でやり直してみてください。[^6]


[^6]: 2015/4/22版ではこの手順が一番つながりやすいようです。