M5StickV V-Functionを試す

# M5StickV V-Function (Motion Detect)を試す
先日、M5StickVをいつもの[スイッチサイエンスさん](https://www.switch-science.com/catalog/6651/)で購入した。V-Trainingの記事はある程度見つかるが、V-Functionの記事はあまりなかったので、ここに記す。とは言っても、[本家サイト](https://docs.m5stack.com/#/en/quick_start/unitv/v_function)に従っただけ。ただ、いくつか落とし穴もあり。

## M5StickVにMotion Detect用Firmwareを入れる
[ここ](https://m5stack.com/pages/download)にあるM5Burnerを使う。同ページにあるCP2104ドライバをインストール後、M5Burnerを起動。
![M5StickVr書き込み前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/84d93c51-0f33-9eac-98d4-99ab749a3e0d.png)
STICKV選択後、MotionTrackerをDownloadしBurnする。Baudrateは115200bpsに設定しないと、うまく書き込みできないようだ。書き込みに成功すると下記のようなメッセージが表示される。
![M5StickV書き込み成功.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/5907aba3-75eb-01e9-4e03-21e65eefe3e0.png)

## M5Stackと連携
[本家サイト](https://docs.m5stack.com/#/en/quick_start/unitv/v_function)では、M5StickVで検出した結果をM5Stackで表示させるようになっていたのでそれに従う。

### UIFlow FirmwareをM5Stackに入れる
[ここ](https://m5stack.com/pages/download)にあるUIFlow-Desktop-IDEを使って、M5Stackにプログラミングする。そのためには、M5Burnerを使って、UIFlow Firmwareを書き込む必要がある。ここでも、Baudrateは115200bpsを選択する。
![M5Stackへの書き込み前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/9a240206-40bc-7cb2-0cca-96a9d3214929.png)
ここでは、v1.6.3-enを選択。Burnを選択後、下記メッセージが表示される。
![M5Stack Burn WiFi無視.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/7715c2e2-388c-9efe-b92c-2264a997f82a.png)
紛らわしい表示であるが、このWifi Settingを無視して（SSIDおよびPasswordに何も入力せず）、Startを選択する。（[参考サイト](http://ji1pvv.cocolog-nifty.com/blog/2020/09/post-228cf5.html)）
下記メッセージ表示されて、書き込みが成功する。（少々時間がかかる。）
![M5Stack書き込み成功.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/c93742fa-7c94-bd79-42ea-cba3a70197a2.png)
次に、Configurationを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/edda4f22-6217-d9ec-7f23-4a0c6e9339bb.png)
ここで、Start ModeにUSB Modeを選んでSave。でないと、UIFLOW-Descktop-IDEが使えない。下記メッセージが表示されて、設定成功。
![M5Stack Configuration成功.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/68943457-a8d4-598a-0aa5-aea24338a4e7.png)

### UIFlow-Desktop-IDE起動＆設定
![UI Flow起動時.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/58a5cad1-9b91-9146-1c29-9293b82ce47a.png)
Unitsをクリックし、UnitVを選択する。
![UnitV選択.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/336129b1-ac7f-ab30-0c7f-94202fe47683.png)
すると、V Functionが見える。
![V-Functionが見える.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/2de185a2-147b-877f-a0c8-81f8774f4d0e.png)
Motion Detectメニューには次のような選択肢がある。
![MotionDetect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/2ba2fbc7-b290-d7c2-615a-059c2cf1483f.png)

### UIFlow-Desktop-IDEでプログラミング
[本家サイト](https://docs.m5stack.com/#/en/quick_start/unitv/v_function)のMotion Detectの情報を参考にプログラミングを行う。最初、UIのラベルの出し方がよくわからなかったが、
![Label選択前.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/1548d827-a428-bb4d-74bf-b946640b2758.png)
左上の方にあるLabelを選んでDrag&Drop（たぶん）して、画面内にTextを作ると
![Label選択後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/85b94f90-b97f-8028-e6b9-2dbfd6a315dc.png)
ラベルメニューが追加される。参考サイトは[こちら](https://qiita.com/ryokurta256/items/e108a8c150c6468e92d9)。

最終的には次のようなコードとなった。
![コード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/b585afb8-0834-b3f4-a9f0-d321ac01bbf1.png)

## 実験
### 動きがないときの結果
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/fd26f559-0232-0fe5-abaa-db26d65e7b4c.png", width=75%>
（M5StickVとM5StackとはGROVEケーブルで接続）

### 動きがあるときの結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/d0d33366-e61f-3210-5927-8fddbd5662ea.png)

## 参考サイト
V-FunctionのFace Detectを行った[記事](https://qiita.com/Toshiki0324/items/ef3edbdee2aeabc39433)を参考にしました。