LEGO SPIKEプライムをターミナルから制御する

# なぜSPIKEプライム？

久しぶりの更新になるが、先月LEGOから衝撃の発表があった。

<img width="700" alt="00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/24d8b70a-86c4-d614-3a90-09d1a03bd1dd.png">
[`まもなく販売終了(廃盤)予定`](https://education.lego.com/ja-jp/products/lego-mindstorms-education-ev3-core-set/5003400#%E6%95%99%E8%82%B2%E7%89%88%E3%83%AC%E3%82%B4-%E3%83%9E%E3%82%A4%E3%83%B3%E3%83%89%E3%82%B9%E3%83%88%E3%83%BC%E3%83%A0-ev3-%E5%9F%BA%E6%9C%AC%E3%82%BB%E3%83%83%E3%83%88)


<img width="700" alt="00-1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/6c1d6bce-2dff-f892-fd63-7e40d4d89ed9.png">
[【重要なお知らせ】教育版レゴ® マインドストーム® EV3 販売終了のお知らせ](https://afrel.co.jp/news/32727)


あの教育版レゴ® マインドストーム® EV3が終売に向かっていくことが発表された。
そのため後継品であるSPIKEプライムについての投稿や情報発信が増えていくだろう。

## SPIKEプライムについて
SPIKEプライムについて詳しくは[こちら](https://spike.afrel.co.jp/#sec-brics)を参照


### ハードウェア
EV3と比較すると、センサーなどの構成はそのままに組み立てや見た目などがとっつきやすいようにデザインされている。
入力出力ポートが一体化されているが全体数としては8→6ポートと減っているなど違う点も散見される。
しかしこれでセンサーやモーターをどこに挿したらいいかはわかりやすくなっており入門としては優しくなっている。内包されているLEGOパーツもかなり便利なパーツが含まれており、ロボットモデルの組み立てはかなりやりやすい印象。
<img width="700" alt="00-2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/23bc65fb-d46d-7605-ad82-edf27de521d6.png">

<img width="700" alt="00-3.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/27899881-3835-c03f-3c0b-323a9e71d8b7.png">

### ソフトウェア
プログラミング環境としては、EV3の時と同様に専用のソフトウェアが用意されている。
ソフトウェア内ではScratchベースでのアイコンプログラミングと、MicroPythonを使ったテキストプログラミングが最初からサポートされている。
<img width="700" alt="00-4.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/86c938be-308e-3a9d-cb5a-d48fc1a8b612.png">
Scratchベースのアイコンプログラミング

<img width="800" alt="00-5.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/02423b35-2e51-e8de-234d-3078a2c8dfe5.png">
MicroPythonでのテキストプログラミング


## ターミナルエミュレーターから直接MicroPythonを実行してみる
上記でSPIKEプライムのプログラミング環境を紹介したが今回はどちらも利用しない。
今回はSPIKEプライムのハブにはMicroPythonがインストールされているので、シリアル通信でPCからハブに直接アクセスしてインタプリタ形式でPythonプログラムを実行してみようと思う。

今回のPCの環境は以下である。

* Windows 10
* ターミナルエミュレーターとして[Putty](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)を利用する


1. まずはPuttyをダウンロードしインストールする。  
[こちら](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)より環境にあわせてmsiファイルをダウンロードし実行・インストールする。

2. PCとSPIKEプライムのハブをUSBケーブルで接続し、SPIKEプライムの電源をONにする。
<img width="600" alt="IMG_1304.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/fee79a30-180b-142f-81b6-115718fd5ec2.jpeg">

3. デバイスマネージャーを開きハブが何番のポートに接続されているか確認する。
画像ではCOM5にハブが接続されている。
<img width="600" alt="01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/efb4ce4a-8dc6-264f-1779-184a19f5c15c.png">

4. Puttyを開き`Connection type`の`Serial`にチェックを入れる。(初期ではSSHに入っている。)
チェックを入れたら`Serial Line欄`に調べたCOMポートを入力する。(画像ではCOM5を入力している。)
隣の`Speed`に`115200`と入力する。(初期では9600が入っている。)
Speedの115200はシリアルコンソールの速度として一般的にサポートされている速度らしい。9600もサポートされているので動作は問題なくできるがここは変更を推奨する。  
<img width="500" alt="02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/f0a15ae0-e57c-f2cc-19e5-415b139547e2.png">

5. 前述の手順を入力できたら`Open`をクリックする。
するとハブにアクセスしたターミナルウィンドウが起動しハブに内蔵されているセンサーの値を返し始める。
<img width="600" alt="03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/5ad13741-4da5-55e1-7363-f50e01e0fe79.png">
この状態で`Ctrl+C`キーを押すことでインタプリタのMicroPythonを入力することができるようになる。
<img width="600" alt="04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/75ac44ec-85ab-5168-0298-97693c5c67a0.png">

### 簡単なプログラムの実行
MicroPythonを実行できるようになったので以下のような簡単なプログラムを実行してみる。
`import hub`  
`hub.display.show(‘Test’)`
インタプリタなので一行ずつ入力するごとにEnterキーを入力する必要がある。
２行目を入力しEnterキーを押すと実行される。
以下が実行結果になる。
<img width="600" alt="IMG_1307.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/d48c60d9-eded-1744-7861-3ba274e21efe.png">
<img width="600" alt="IMG_1308.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/1e4164de-a66c-a6b0-e7fe-981405018e11.png">
<img width="600" alt="IMG_1309.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/e2f2d01f-d394-e25f-3c22-c11d60a7a899.png">
<img width="600" alt="IMG_1310.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/8004ce4a-286b-bf16-4baf-63159cad7363.png">

一定間隔で`Test`の文字がハブに表示される。

他にどのようなメソッドがあるか調べるには`hub.`と入力しTabを押すことでそれ以降に入力することができるメソッド一覧が表示されるので
必要に応じて調べながらプログラムを作成することができる。

### Appendix
ハブ内にインストールされているMicroPythonのバージョンを調べてみた。
以下のコードで調べることができる。
`import sys`
`sys.version_info`
<img width="500" alt="05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440646/2311a08e-2300-c1d3-0a39-81906ea8e62a.png">
バージョンの情報がタプル形式で返される。
インストールされているMicroPythonのバージョンは3.4.0であることがわかった。