M5StickVをとりあえず使ってみる (おまけ:起動音の低減)

## 【内容】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/63539e0f-0041-b874-c9f4-ca51d30ddffc.png)

いきなり手渡されたM5Stack社のM5StickV。
なんか深センで直接売り込まれたとかなんとか。
本当は別のEdgeデバイスを取り扱う予定でしたが、予定通りに届かなかったので、とりあえず予備知識無しでM5StickVを使ってみます。

なお、作業にはWindows 10 Pro (1809)を利用しています。


## 【Quick Start】
基本的には公式の手順を踏襲しますが、何箇所かハマりました。
[【M5StickV Quick Start - M5Stack】](https://docs.m5stack.com/#/en/quick_start/m5stickv/m5stickv_quick_start)

## 【ファームウェアの更新】
まずはファームウェアの更新を行います

### EasyLoaderを使ったファームウェアの更新 (失敗)
QuickStartのトップに書かれているEasyLoaderを使ってファームウェアの更新を試みます。
EasyLoaderはWindowsのみに提供されています。
手順自体はソフトウェアをダウンロードしたら、アプリを起動して、COMポートの設定をしたら「Burn」ボタンを押すだけで、非常に簡単です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/e45bb124-a1c2-26a5-da6d-105d0ab36a45.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/ac011cba-dd9f-957c-2f0d-2c108443a62f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/756abc1b-0c19-05e3-09a9-5761cefc47bc.png)

この画面で止まってしまいました。
一時間ほど放置してみましたが改善する様子がないため諦めました。


### Kflash_GUIを使ったファームウェアの更新
次に、Kflash_GUI使ったFirmwareの更新を試みます。
事前に「click to download firmware」ボタンから最新のファームウェアをダウンロードしておきます。
その下に「Kflash_GUI」と書かれている部分に各プラットフォーム用のFlashツール用のダウンロードリンクがありますので、ダウンロードして適当なフォルダに解凍します。
本手順では「Windows」版をダウンロードしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/4824b8a1-3e4f-43a2-b469-7b822edb3aec.png)

解凍したフォルダ内に含まれている「Kflash_GUI.exe」というファイルを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/2db8da2c-5b06-7e7b-abe4-2d1c34b843c7.png)

実行すると、下記の画面が表示されるとともに、Githubのリポジトリが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/82c7f452-664e-aea7-37c6-7d34931ac61d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/0b4f9e81-ff30-9a43-68fd-c2bfbf872cb9.png)

Gitリポジトリによると、本記事を書いている2019年8月21日現在、Release版が「v1.3.2」、Pre-release版が「v1.5.3」となっています。
起動したアプリの表示は「v1.2」となっているので古いようです。

とりあえず人柱として「v1.5.3」をダウンロードして使ってみました。
なお、Gitリポジトリ上のWindows版のアーカイブファイルは7z形式で圧縮されているため、解凍には7-zipなどのアプリが必要になります。

改めて最新バージョンを起動します。
タイトルバーのバージョン番号が「V1.5」になっています。
この状態で事前にダウンロードしたファームウェアファイルおよびシリアルポートなどの設定を行い、「Download」ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/3fc2cbd5-6841-4571-17b9-03f2c640d8a3.png)
なお、上記設定では「Board」を「M5StickV」に「Baudrate」を「115200」に変更しています。
進捗状況が進み、「Download Success」の表示がされたら、更新完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/a0dc6ec6-9644-8c6b-03e5-4c6192a4f654.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/10d17fe4-2435-f238-b576-bd9f9a341d72.png)


## 【シリアルデバッグツール】
次にシリアルデバッグツールに接続してみます。
M5StickVに付属していたType-Cのケーブルをコネクタをつないで、PCのUSBに接続するとCOMポートで接続できるようになります。

公式手順ではPuttyを使っていますが、今回はTeraTermを使いました。
以下の設定で接続できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/806cd885-8e8e-b932-494c-a8a31c9b2037.png)

重要なのは「Baud rate」の設定で、「115200」で設定しないと文字化けしてしまいました。
正常に接続できると以下のような画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/8282784c-fa41-aedf-f0de-d61453698662.png)

ちなみにデフォルトではカメラ映像に対して顔検知を行うようプログラムが実行されているため、顔を認識すると認識した結果がログとして流れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/bc8f38c4-41fb-7e12-fe7d-87167fc108d4.png)
BoundingBoxとスコア、認識した数やインデックス値が返ってきているようです。

なお、 `Ctrl+C` を押すとプログラムが終了して、Pythonのコンソール状態になります。
(上記画像はCtrl+Cを押した直後の状態)
この状態ではPythonのコードが打てる状態になっています。


## 【Hello World】
上記のコンソール状態で、「Hello World」を実行します。
コンソールに以下のコードを入力すると、画面下部に赤字で「hello world」が表示されます。

```python:hello.py
import lcd

lcd.init()
lcd.draw_string(100, 100, "hello world", lcd.RED, lcd.BLACK)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454012/dcde33cf-bac9-b69a-5448-0dc0d8fd9e8a.png)


## 【ファイルの追加、編集】
ファイルを新規に作成し、そのファイルに上記のスクリプトを保存してみようと思います。
まず、現在保存中のファイルを確認するためにコンソールで `os.listdir()` を実行します。
以下の4つのファイルが保存されています。

```python:ファイル一覧_1
['ding.wav', 'startup.jpg', 'boot.py', 'freq.conf']
```

新たにファイルを作成して、編集を行います。
`pye("hello.py")` を実行して編集モードに入ります。
`pye` 命令は指定したファイルが存在しない場合は新規で作成し、存在する場合は既存ファイルを開いて編集状態になります。

上記の 「Hello World」で実行した内容を入力して、 `Ctrl+S` を押すと保存ファイル名を聞いてきますので、そのままEnterを押すと保存されます。
その後 `Ctrl+Q` を押すと編集状態から抜け出します。

細かい操作方法は、下記のURLで確認できます。
[【Pyboard Editor.pdf - Github】](https://github.com/robert-hh/Micropython-Editor/blob/master/Pyboard%20Editor.pdf)

なお、私の環境では前の文字を削除しようと `Backspace` を押すと置換モードになってしまいました。
代わりに `Del` キーで前の文字を削除することが出来ました。

確認のために再度 `os.listdir()｀ を実行します。

```python:ファイル一覧_2
['ding.wav', 'startup.jpg', 'freq.conf', 'hello.py', 'boot.py']
```

`hello.py` が追加されていることが確認できます。

## 【ファイルの実行】
上記で保存した `hello.py` を実行します。
コードの実行に関して公式手順では二通りの方法が書いてありますが、本記事では繰り返し実行可能な方法を採用します。
具体的には以下のコードを実行します。

```python:exec_hello.py
with open("hello.py") as f:
    exec(f.read())
```

二行目の`exec(f.read())` を入力してEnterキーを押すとインデントが保持され入力待ち状態になりますが、Backspaceキーでインデントを戻して空欄状態でEnterキーを押すとコードが実行されます。
うまく動けばディスプレイ上に赤い文字で「hello world」と表示されるはずです。


## 【最後に】
とりあえず、基本的な操作方法はわかりました。
次の記事ではファイルアップロードツールとIDEツールを使ってみようと思います。


## 【おまけ：起動音の低減】
M5StickVの電源投入時にはかなり大きな音で起動音がなります。
静かなオフィスなどではかなり注目を集めてしまいます。
そこで、 `pye` 命令を使って起動スクリプトを編集して、起動音を低減させます。
具体的にはシリアルデバッグツールに接続し、デフォルトで保存されている `boot.py` の32行目にある音量設定部分を調整します。

```python:boot.pyの編集
pye('boot.py')
```

```python:boot.py：32行目の変更点
    player.volume(100)    # 変更前
    ↓↓↓
    player.volume(10)     # 変更後
```

変更後 `Ctrl+S` ＞ `Enter` で保存後、 `Ctrl+Q` で編集状態から抜けてください。
その後、 `Ctrl+D` で再起動がかかります。
上記変更がうまく行えていれば、起動時の音量が10分の1(?)になります。
なお、`player.volume(0)` にすると起動音がしなくなります。

また、変更部分の一行前にはWAVファイルを指定している部分がありますので、好みの起動音に変更することも可能そうです。