UIFlowを使ってM5Stackと環境センサーを動かしてみる

この資料は2023/6/9開催の高校生向けプチハンズオンの資料です
今回はUIFlowを使ってM5Stackと環境センサーを動かしてみます。

# 使うもの
* M5Stack
* ENV Sensor

# 前提条件
M5Stackはファームウェアを書き換えて画面にAPI KEYが表示されてる状態としておきます。
余談ですが、ファームウェアの書き換えについてはこちらの資料を見てください。
[参考：ChromebookだけでM5StackのUIFlowを使えるようにする](https://qiita.com/t-sho/items/a3ed0ab4579c56d15594)

# UIFlowにアクセスする
下記のリンクテキストからUIFlowにアクセスしてください。
[https://flow.m5stack.com/](https://flow.m5stack.com/)

# 初期設定
この画面は左のUOFlow1.0を選択して、右下のConfirmボタンをクリックしてください。
※選択してる方は左上が緑色になってるのでそれで判断してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/c7f7e805-e99f-b387-a67d-24667d18f98b.png)

M5Stackの画面に表示されている8桁のAPI KEYを入力してください。
※イベント参加者は教室のホワイトボードにもAPI KEYが記載されてるので、そちら見てもよいです。
言語は日本語のままで良いです。Deviceは真ん中の赤丸で印をつけたCore2を選択し、最後にOKボタンをクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/224b3c26-5ec3-4af4-91d7-1fb137ca4524.png)

画面右下に「接続済み」を表示されたら完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/f998764c-7f6b-8fde-1b64-0c9538fbd529.png)

# 画面にラベルを配置する
ここからプログラミング開始です。
まずはラベルを画面に配置していきます。ドラッグ＆ドロップで左上のラベルを画面に配置します。
FontはUnicode24を選択します。
![anime20230608001.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/cc3b88ce-e18b-cc09-8bd2-58b7260ff02e.gif)


同様の要領で以下のように7個のラベルを配置してください。位置はだいたい同じであればよいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/2fdc1f3e-585d-b07b-ec54-6a8a489559f8.png)

# ラベルの初期化を行う
UIの配下のラベルのうち、この部品をBlocklyのエディタにドラッグ＆ドロップで配置します。
Setupのブロックの下にくっつけてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/6f21a6fe-95a0-faa6-f464-a2f73a923d3d.png)
操作イメージはこんな感じです。
![anime20230608002.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/7fcef806-00a1-0663-a011-80e0f2b76d8a.gif)

こんな感じになっていればOKです。
これは先ほど画面に配置した「label0」に"Hello M5"という文字列を表示するための部品です。
"Hello M5"の部分は任意の文字に変えれます。
一応日本語も表示できますが、一部対応していない文字もあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/71b2311a-f8d1-b870-098e-a6f1b6cd338a.png)

同じ要領で、ラベル7個分のブロックを並べてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/7ce0d47d-70a5-8a4b-1f81-11b6d5341d2b.png)

ラベルのドロップダウンを操作して、Label0～6になるよう変更してください。
![anime20230608003.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/ce4401d8-fa02-8e67-c597-b56a2e1a4f48.gif)


こうなっていればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/178d01a8-df2d-5f27-3a9e-59bae9b9020f.png)

各ラベルに表示する値は以下の通りです。それぞれ値を修正してみてください。
※label0には自分の名前をアルファベットで入力してください（イベント中誰が動かしてるプログラムかわかるようにするため）
| ラベル | 入力する値 | 
|:-----------|------------:|
| label0 | yano |
| label1 | 気圧(Pa) |
| label2 | 気温(℃) |
| label3 | 湿度(%) |
| label4 | 0 |
| label5 | 0 |
| label6 | 0 |  

こうなっていればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/a0c58b1d-1dc5-032d-5c01-d8712a8e5f88.png)

もし、間違って多く配置しすぎたとか、必要なのに間違って消してしまった場合は画面右上の「Undo」ボタンをクリックしてください。1つ前の状態に戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/8f2b3f48-374f-cb92-4530-e7c303318e1f.png)


# 一度実行してみる
ここで一度プログラムを実行してみましょう。
イベント参加者は、手元にM5Stackを用意し、API KEYと端末番号が一致してるか確認してください。
M5Stackの数が限られてるので譲り合って順番に実行してみてください。
プログラムを実行するときは右下のRUNボタンをクリックしてください。
※今回ダウンロードボタンは押さないでください。（ファームウェアの書き換えが必要になるため）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/4d22c4d1-39b9-4543-bc41-e4958bae0589.png)

エラーが発生しなければこんな感じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/9443a480-8276-399c-6cf1-8bd6f0f32b13.png)

# 環境センサーのユニットを組み込んでみる
ここからはM5Stackに環境センサーのユニットを組み込んでみます。
左下の＋ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/5288c3cd-b0c7-365a-4b24-b186ad4b1022.png)

ユニットの一覧が出てくるので、ENV Ⅲを選択し、Portは変更せずに、ＯＫボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/790de99a-18ad-13ae-73e6-52395bfbf8ae.png)

追加後、こうなっていればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/a82bd1fa-2b17-5c70-1054-7434dc92385b.png)

今度はイベントの「ずっと」というブロックをドラッグ＆ドロップでBlocklyエディタに追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/c761912e-e84d-3e72-72c3-31b3d0d22dd6.png)

こんな感じで一番下のブロックに繋げてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/ccb39ce9-cfbe-f493-bd93-aa765b2b31fa.png)

こうすることで、プログラムの実行ボタンをクリックしたら、Setupからプログラムが順番に実行され、「ずっと」ブロックまで来たらアプリケーションが終了するまで「ずっと」ブロックの中に書いた処理が繰り返し実行されます。
ここに環境センサーから読み取った値を画面に表示し続けるようプログラムを追加していきます。

まずは新しくラベルブロックを3つ配置します。
ラベルはlabel4～label6を指定します。
![anime20230608004.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/710370d3-0372-0d2a-30d1-9edb0e958a34.gif)

こんな感じになってればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/2369766d-0e25-6773-a5e2-a2f09dc45cda.png)

ユニットの中にある環境センサーのブロックをドラッグ＆ドロップで追加していきます。
先ほど追加したラベルブロックの中に配置していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/e8bc7c74-41d7-54e6-73b1-d54f0d39dcd5.png)
![anime20230608005.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/fb9c6664-a1b6-0012-b9b9-7688588d0139.gif)

こうなってればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/687edf66-0dd4-0de7-45ed-77751bf29e2a.png)

# M5Stackに環境センサーと接続する
M5Stackの本体左側面にある赤いポートを使ってENVセンサーをこんな感じでGroveコネクタを使って接続します。
これだけでOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/a1596a5a-80c5-a5bd-4039-cd060180c2cf.png)

余談ですが、温湿度センサーDHT11などをRaspberryPiで使用する場合、このように自分で抵抗をかませて回路を作ってあげる必要があるので、これに比べると楽ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/d91a3ba2-4e4d-cb7e-4f97-6f682e30e578.png)

# プログラムを実行してみる
イベント参加者は、手元にM5Stackを用意し、API KEYと端末番号が一致してるか確認してください。
M5Stackの数が限られてるので譲り合って順番に実行してみてください。
プログラムを実行するときは右下のRUNボタンをクリックしてください。
※今回ダウンロードボタンは押さないでください。（ファームウェアの書き換えが必要になるため）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/3338d3ed-5c0b-c24e-a413-305aaa4e36b9.png)

うまくいけばこのように気圧、気温、湿度が表示されます。
環境センサーを手で握っておくと、湿度などが変化していくのがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/81274851-c609-d636-70c9-ee2859da70e8.png)
このように非常に簡単にセンサーと繋いで情報を取得することができます。
ここまでできれば今日のメイン目標は達成です。お疲れさまでした。
もし、時間が余ってる場合は、以下も試してみてください。

# データを記録してみる
今のままだとセンサーから取得した気温等のデータをただ表示しているだけなので、ボタンを押したタイミングで表示している気温を保持して画面に表示してみます。

イベントのこのブロックをBlocklyエディタに配置します。
今まで作ったものとは独立した状態で使っていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/176dc7c3-077e-cfac-c3ca-f74272679a56.png)

こんな感じになってればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/c56189fb-8507-a1f0-3060-3fefb284b2ac.png)

このブロックはM5Stackの左下のボタンをタッチした時に実行されるブロックです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/be076ea9-93e3-a031-8660-96a51e3530db.png)

では、このブロックに処理を追加するための準備をしていきます。
まずは、ラベルを2つ追加します。FontはUnicode24を選択してください。
![anime20230608006.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/c7308786-9e58-330d-f33b-9399d2e80ce6.gif)

こんな感じに配置されてればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/04554258-630a-2a34-e41a-39137e240d11.png)


Setupに先ほど追加したラベルの処理を追加します。
ここではSetupとずっとのブロックの間に差し込んでいきます。
ラベルはlabel7とlabel8を選択してください
![anime20230608013.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/20810bbb-7390-c2e3-401e-e4bc21dad840.gif)


追加したラベルには以下のように何も表示しないよう入力文字を消してください。
こうなっていればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/3d8302b7-8dc8-d26f-d61f-857f96d272a7.png)

次は変数を作成します。
変数から「変数の作成」を選択します。
変数の名前を入力してくださいというポップアップが表示されるので、「SaveValue」を入力し、OKボタンをクリックします。
![anime20230608008.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/71990e97-119e-3236-2af9-6840e2eeef3f.gif)

こんな風にブロックが表示されたらOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/18280333-33a1-c9d6-bf83-b22b7a757415.png)

作成した変数のブロックを「ずっと」ブロックの中の1番目に差し込みます。
![anime20230608014.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/eb941ee3-37e9-0e4c-70b4-caf40281d112.gif)

こうなってればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/051c8aaa-f53e-5682-0777-abf192ec78aa.png)

この変数ブロックの空欄に、label5のラベル表示ブロックの中にある、温度取得ブロックをドラッグ＆ドロップで移動させてください。
![anime20230608015.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/5f147c1b-8f4f-e51e-8317-654c92977026.gif)
こうなってればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/3b6ee4a6-c8ee-5d09-3f18-8a0c06ab007a.png)

label5のラベル表示の中身は、変数SaveValueをセットします。
![anime20230608016.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/b275ad2d-8f26-6f1b-c4f6-2bb2f7f259a6.gif)

こうなっていればOKです。
何が変わったのかというと、今まではlabel5のラベルには環境センサーから取得した温度の値をそのまま格納していましたが、温度の値を変数SaveValueという箱に一度格納し、label5には変数に格納したデータを使うようになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/965d3f3c-101c-2ecc-5a96-bbd38f18926b.png)

では、ボタンAの処理を作っていきましょう。
ラベル表示部品を2つ追加します。それぞれlabel7とlabel8を指定してください。
![anime20230608017.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/d4d0189d-4b09-c4da-35c4-1950228660ae.gif)

追加したlabel7のラベル表示ブロックの値は「記録した温度(℃)」をしてください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/5fd125db-06d3-44cb-980c-a54f71056671.png)

一方label8のラベル表示ブロックは、変数SaveValueのブロックをセットしてください。
![anime20230608018.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/cc80512c-cabe-8810-0d88-96f9527fa525.gif)

こうなっていればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/e987ca2e-f4d6-ac42-d08c-a5a5f05a6630.png)



# プログラムを実行してみる
画面右下のRunボタンをクリックして実行してみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/36cb0922-1f1a-c97e-96f0-e0967cc59c52.png)
ボタンAをタッチするたびに、タッチした時の温度データが変わって表示されれば成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/e0ecbac7-0f81-65cb-0698-ba5463773799.png)

もし、label8の表示データが中途半端に見切れる場合は、label8の位置を左にずらして調整してみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/7d104680-8b44-701e-94ea-4ce8fe7f0e21.png)

時間に余裕上がれば、Bボタン押したときに気圧、Cボタン押したときに湿度が記録され画面に表示されるよう修正してみてください。

今日のハンズオンのソースコードの完成版はここに置いておきます。
必要に応じてダウンロードしてください。
[ここからダウンロード](https://shotechlab-my.sharepoint.com/:u:/g/personal/t-sho_shotechlab_jp/EecKWHsPT5ZAicEk1TKLoGoB72WOq0YnJ2b8254_yVg7oQ?e=arMGYG)

今回は単にボタンをタッチするたびに画面上に表示しているだけですが、たとえば、ボタンを押すたびにSDカードに記録したり、HTTPリクエストなどネットワークを介してGoogleのスプレッドシートに記録していくと、データを集めることができ、集めたデータは分析等に使用することができます。また、ボタンを押したタイミングではなく、30秒に1回とか、10分に1回とかタイマー処理を使って自動で記録し続けるといったことも可能です。ぜひ、いろいろ試してみてください。

プチハンズオンはこれで終了です。
お疲れさまでした。