EV3シリアルコンソールを起動してみた

#きっかけ#
ロボカップジュニア2019を観戦しに行ったのを機に、**EV3とPC**あるいは**EV3同士複数台**での接続方法を研究したいと思ったため。

#環境#
- EV3 インテリジェントブロック
- シリアル-USB変換モジュール(今回はサンハヤト製MM-FT232)
- パソコン(WindowsでもMacでも可)

↓これがMM-FT232というモジュール
FTDI社製のICであるFT232RQを搭載しています。
![shopping.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/9e29acf1-a09d-d819-a6d4-2af3b3851210.png)
同じような変換治具があるならば、これでなくても構いません。

[サンハヤト社によるMM-FT232の取扱説明書](https://www.sunhayato.co.jp/dcms_media/other/MM-FT232_Manual_SG11005.pdf)

#接続の準備#
EV3のシリアルコンソールに入るには、本体のUSB-Aやmini-Bなどではなく、**センサーポート1**から仮想シリアルポートとしてPCに接続しなければなりません。
まずはポート1にセンサーケーブルを挿し、もう片側をなんらかの方法で電子回路に組み込めるようにします。

一番ラクなのは、mindsensors.comで売っている[Breadboard Connector Kit for NXT or EV3](http://www.mindsensors.com/ev3-and-nxt/58-breadboard-connector-kit-for-nxt-or-ev3)という変換ボードを使う方法だと思います。
しかしながら、海外のサイトということで購入するのは少し難易度が高かったため別の方法を考えました。

EV3(NXT)のセンサーケーブルはモジュラージャックの規格であるRJ11/RJ12とほぼ同じ形状です。
すなわち、同じような形状で6極6芯のソケットを用意すれば良いと考え、以下のようなパーツを購入しました。
![IMG_1589.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/60a92d73-1073-edb3-942f-35d288f44dde.jpeg)
これなら電子部品屋に売ってました。
このパーツの右上を削ることでケーブルを挿せるようにしました。
![IMG_1665.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/0fe3cc1e-8dd0-ebac-4f3e-15926b99160a.jpeg)

つづいて、配線について。
![IMG_1676.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/962eaacc-1011-1e93-3a30-69f78694f28c.jpeg)
![スクリーンショット 2019-05-16 12.23.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/45eb846e-faab-2765-0599-b1d02001216a.png)
上の画像のようになっており、以下のように配線します。
![6a0120a6ffc261970b01b7c91a2fb8970b.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/423473bc-6cf7-7078-3a5f-e4547f322183.gif)
(画像は「[ロボジョイくらぶ・マイスターブログ/EV3のUSBシリアル変換治具について](https://nxt.typepad.jp/robojoy/2017/08/usbserial.html)」のページより)

ざっくりいうと、UARTの通信方式に従い、片方のTXDをもう片方のRXDに接続する感じ。

ということで完成したのが↓の画像のようなもの
![IMG_1663.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/e4a6e57f-a4db-9e0b-3aff-4c74bc65975b.jpeg)

#FTDI社のドライバをインストール#
ICを動作させるためにFTDI社のホームページからドライバをダウンロード・インストールする必要があります。
https://www.ftdichip.com/Drivers/VCP.htm
![スクリーンショット 2019-05-16 13.00.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/5b97c6e2-3ba7-ccd7-05f8-73f65d25f504.png)
ダウンロード・インストールは手順に従って行えばいけるはずです。

#u-bootの起動#
前提として、EV3のボーレートは**```115200```**です。

##windowsの場合##
毎度おなじみ、TeraTermを使います。
インストールしていない人は先にやっておいてください。
[TeraTermのインストール方法](https://qiita.com/koushiro/items/578a1d65721b982c55c6#tera-term%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)

ではまず、Tera Termを開きます。
開くとどのポートに接続するか選択する画面が出てくるので、以下を参考に適切なものを選んでください。
![スクリーンショット (94).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/86d301e0-1dd2-6ce9-248d-5b8b0504b6f6.png)

恐らくUSB Serial Portと出ていると思います。

次に、ボーレートの設定を行います。
[設定]->[シリアルポート]と進んでください。 
![スクリーンショット (92).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/b5624b16-b2e4-2d5d-c9d0-80c90eedc489.png)
ここでスピードを`115200`に変更します。
これを怠ると文字化けします。
![スクリーンショット (93).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/e8d80b00-3df7-34d3-2294-b8abb36f0638.png)
これで準備完了です。

## macの場合 ##
ターミナルで`screen`コマンドを使うのが無難でしょう。
まずはポートを調べる必要があるので以下のようにします。

```
$ ls -la /dev/tty.*
crw-rw-rw-  1 root  wheel   21,   4  5 26 20:03 /dev/tty.MindstormsEV3-SerialPor
crw-rw-rw-  1 root  wheel   21,   6  6  2 10:47 /dev/tty.usbserial-AK05LF65
```
この場合、下の/dev/tty.usbserial-AK05LF65がMM-FT232のポートになります。
(上はEV3rtを使用してBluetooth接続したときの仮想ポートです。)

つぎに実際に接続を試みます。

```
$ screen /dev/tty.usbserial-AK05LF65 115200
```
これで真っ白な画面になればおそらく繋がっています。

## EV3を起動
では起動ボタンを押してみましょう。
以下のように文字列がダダぁーーーと流れるはずです。
(今回はEV3rtでやっています。)
![EV3console.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/76fa7496-e2ba-36f6-3389-fcdded0e24f8.gif)

流れてくる文字列は以下に記します。

```
Mindstorms EV3 標準OS

EV3 initialization passed!
Booting EV3 EEprom Boot Loader

        EEprom Version:   0.60
        EV3 Flashtype:    N25Q128A13B

EV3 Booting system

Jumping to entry point at: 0xC1080000


U-Boot 2009.11 (Oct 26 2012 - 10:30:38)

I2C:   ready
DRAM:  64 MB
MMC:   davinci: 0
In:    serial
Out:   serial
Err:   serial
ARM Clock : 300000000 Hz
DDR Clock : 132000000 Hz
Invalid MAC address read.
Hit 'l' to stop autoboot:  0
Card did not respond to voltage select!
16384 KiB M25P128 at 0:0 is now current device
## Booting kernel from Legacy Image at c0007fc0 ...
   Image Name:   Linux-2.6.33-rc4
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1965008 Bytes =  1.9 MB
   Load Address: c0008000
   Entry Point:  c0008000
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.
IP-Config: No network devices available.
INIT: version 2.86 booting
Please wait: booting...
Starting udev
Remounting root file system...
Caching udev devnodes
Configuring network interfaces... ifconfig: SIOCGIFFLAGS: No such device
done.
Setting up IP spoofing protection: rp_filter.
INIT: Entering runlevel: 5
Starting system message bus: dbus.
Setting up VirtualDrive...
Initialize Bluetooth...
Found a Texas Instruments' chip!
Firmware file : /lib/firmware/TIInit_6.2.31.bts
Loaded BTS script version 1
texas: changing baud rate to 2000000, flow control to 1
Device setup complete
Serial Port service registered
Starting lms2012
玻玻玻玻玻玻玻玻玻玻玻玻玻玻玻玻玻玻玻玻玻玻玻玻玻玻
```

```
TOPPERS/EV3rt

EV3 initialization passed!
Booting EV3 EEprom Boot Loader

        EEprom Version:   0.60
        EV3 Flashtype:    N25Q128A13B

EV3 Booting system

Jumping to entry point at: 0xC1080000


U-Boot 2009.11 (Oct 26 2012 - 10:30:38)

I2C:   ready
DRAM:  64 MB
MMC:   davinci: 0
In:    serial
Out:   serial
Err:   serial
ARM Clock : 300000000 Hz
DDR Clock : 132000000 Hz
Invalid MAC address read.
Hit 'l' to stop autoboot:  0
reading boot.scr

** Unable to read "boot.scr" from mmc 0:1 **
reading uImage

871472 bytes read
## Booting kernel from Legacy Image at c0007fc0 ...
   Image Name:   TOPPERS/hrp2 Kernel (EV3)
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    871408 Bytes = 851 kB
   Load Address: c0008000
   Entry Point:  c0008000
   Loading Kernel Image ... OK
OK

Starting kernel ...


TOPPERS/HRP Kernel Release 2.2.1 for EV3(AM1808(ARM926ES-J)) (Aug  1 2018, 09:58:58)
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                            Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2004-2014 by Embedded and Real-Time Systems Laboratory
            Graduate School of Information Science, Nagoya Univ., JAPAN

EDMA3_CC0.ER: 0x00010c00
EDMA3_CC0.EMR: 0x00000000
Card is present
<6>fb0: ST7586 frame buffer device, using 7 KiB of video memory

<3>fb0: Initing display

System logging task is started on port 1.
<3>fb0: Initing display

brick_dri initialized.
analog_dri initialized.
motor_dri initialized.
i2c_dri initialized.
uart_dri initialized.
sound_dri initialized.
bluetooth_dri initialized.
BT Chip: CC2560

   _____   ______ ___  ______
  / __/ | / /_  // _ \/_  __/
 / _/ | |/ //_ </ , _/ / /
/___/ |___/____/_/|_| /_/

==================>Beta 7-2<=

Powered by TOPPERS/HRP2 RTOS
Initialization is completed..
BT Addr: 00:17:EC:F5:93:35

```

## u-bootを操作する。
起動時にパソコン側から**"l"**キーを送り続けると自動起動がキャンセルされ、任意のコマンドが打てるモードに入ります。
![スクリーンショット (95).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/183170/3b65a7d9-fdb1-16d4-82da-87c6c53cef99.png)

# 考察
今回の経験から、EV3のかなり核心まで迫ることができ、まだまだ未探索部分があることが分かった。
そして、EV3rtにはUARTで情報を吐き出すことが出来るので、それを[例のセンサー値監視アプリ](https://qiita.com/koushiro/items/dffdd4375d3ce110cb41)に応用することもできた。
従って、[Connect to EV3](https://qiita.com/koushiro/items/dffdd4375d3ce110cb41)は有線でも無線でも使用可能となった。

次回、その件について詳しく書きます。