M5Stack UiFlow x Azure IoT Central で簡単に双方向連携デバイスを作る方法

皆さん、こんにちわ！りなたむです。
様々なIoTデバイスを提供している [M5Stack](https://m5stack.com/) さんには、 Scratch ライクに開発可能な [UiFlow](https://flow.m5stack.com/) という開発ツールがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/99d40108-64e6-77ab-470d-d1b5064e7a44.png)

UiFlow には、クラウド連携用のブロックが用意されており、様々なクラウドと連動させることが可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/d4ee4263-7bae-2891-3791-830e381f1d42.png)

もちろん、Azure もあります。
Azure の連携サービスとしては、 [Azure IoT Hub](https://azure.microsoft.com/ja-jp/products/iot-hub/) と、[Azure IoT Central](https://azure.microsoft.com/ja-jp/products/iot-central) の2つのブロックが用意されています。

今回は、この Azure IoT Central と UiFlow を組み合わせて

* M5Stackに搭載されているセンサー情報をテレメトリとして送信
* Azure IoT Central から M5Stack に メッセージ情報を表示

この2点をそれぞれ解説していきたいと思います。

## 1. Azure IoT Central

### 1.1. Azure IoT Central の作成

まずは、M5Stack と連動させるための、Azure IoT Central を作成しないことには始まりませんので、こちらを作成していきます

1. IoT Central アプリケーションを追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/ae37e4ed-9b94-a9d2-4248-4a85a596a64f.png)

2. リソースグループや名称を入力する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/3a316e57-27e9-d84c-dc18-621ac788e064.png)

3. 使用するデバイスの用途を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/144c1605-e0e7-0e9c-74a3-cdf89db1fc4c.png)

3. リージョンや料金プランを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/e860ac15-aace-cb76-f7bf-8615af426c52.png)
※料金プランは以下の通り。やり取りするメッセージ想定量などに応じて料金プランを指定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/41cea658-acdd-3395-7450-0ab66b1e563a.png)

3. 確認と作成をクリックし、結果が問題なければ、「作成」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/8bab85fb-99a2-37ec-d974-45f482508ba1.png)

### 1.2. Azure IoT Central デバイステンプレートの作成

Azure IoT Central を作成したら、デバイスを登録する前に、テレメトリ情報やデバイスへのコマンドを定義する、デバイステンプレートを作成します。

1. リソース画面から、URLのリンクをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/9de23b73-99d9-1f90-ff93-65794fef7759.png)

2. デバイステンプレートをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/a057b7a6-bcc9-bc7d-75c6-a163de68072f.png)

3. 新規をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/1d7bd18b-1356-7363-660f-9185e1c79505.png)

4. カスタムデバイステンプレートの作成から、IoTデバイスをクリックし、次へをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/1b676132-3cd0-832a-e9df-82ef457f3f5d.png)

5. 任意のテンプレート名を入力して次をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/ca0624e8-1da3-340f-2c9c-5bcd0b992c0d.png)

6. 作成をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/5f34abd2-e0ef-a43f-e00a-aec611d31ae0.png)

7. カスタムモデルをクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/e784f494-a239-01a9-abea-500e2c9b63e2.png)

#### 1.2.1. テレメトリ受信用の機能を追加

M5Stack デバイスのセンサー情報（テレメトリ）を Azure IoT Central にて受信するための機能を追加します。

1. 機能の追加をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/f078837a-0274-20a2-3dce-6780f8c08174.png)

2. センサーに対応した表示名、名前、セマンティックの種類を設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/567f435a-c4fe-478b-f601-3a15c36ac9a1.png)

3. 必要に応じて追加で機能を追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/efcd73c6-cbc3-8c60-82d3-300b37b2349d.png)

#### 1.2.2. コマンド送信用の機能を追加

クラウドサービスから M5Stack に情報を送信する機能を追加します。

1. 機能の追加をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/0f845c72-df4f-bb2d-046a-403ebf60e414.png)

2. 表示名、名前を入力する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/e51edf37-c086-5deb-3479-2ca6c34e3b34.png)

3. 機能の種類をコマンドに変更する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/501ddc9d-581c-ea03-6d35-a0d3d51f0d9a.png)

4. 展開をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/40743755-8571-cec5-7630-e1f5e008bbc8.png)

5. 要求にチェックを入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/6684e92b-4e07-b94b-1e45-e89405d9671f.png)

6. 表示名、名前、スキーマ（データ型）をそれぞれ入力する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/94c9e3fa-6297-d7cd-da0b-fb188bc32dc2.png)

7. 保存をクリックし、公開をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/87000268-fd22-b0ab-642a-92fbd1e986ee.png)

8. 再度、公開をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/f012f988-34ff-6cab-4e64-8475414a4931.png)

### 1.3. Azure IoT Central デバイス追加

デバイステンプレート を作成したら、実際に管理画面で今回使用するデバイスを登録します。

1. デバイスから、新規をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/f0c90fd8-68e8-2da8-0700-ccc744aba3a0.png)

2. デバイス名を入力する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/7ead0d05-5d8e-88a3-580b-04213ac00467.png)

3. デバイステンプレートに作成したテンプレートを指定し、作成をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/021f08d7-ec32-990c-3a61-125dd036f41e.png)

## 2. UiFlow 開発

[UiFlow](https://flow.m5stack.com/)をつかって、M5StackデバイスとAzure IoT Central を接続していきます。

### 2.1. Azure IoT Central 接続前まで

基本的に、デバイスの構成やセンサーの設定をした上で、Wifi 接続部分までを以下のように定義していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/d6876668-6002-8bd6-d734-802f3b837d20.png)

### 2.2. Azure IoT Central 接続部分

時刻同期の下ブロックを以下のように変更していきます。

1. IoTCloud > Azure > Classic から IoT Central のブロックを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/4889e2bf-4269-ba50-a2d6-6ae81c38fbc5.png)

2. 入力パラメータは、Azure IoT Central のデバイスから、接続をクリックすると取得できるので、それぞれに入力していく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/15e9504b-f08c-d7a6-f89e-e62245f103af.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/36875bf1-0f96-73be-f4c5-50d9398ab2cb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/b4917d1c-c374-309d-e8c6-1e0f0fbaf338.png)

3. IoTCloud > Azure > Classic から Start azure のブロックを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/92eb1e1a-5242-b53d-f057-0ee2e6ad4d56.png)

4. この状態で Run を実行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/4132ddaa-2b9a-b465-4fc3-4cd46551139b.png)

5. しばらくすると、Azure IoT Central 側で、デバイスが接続済みとなる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/52c9c52e-206c-209f-15a8-82d8f17533c4.png)

### 2.3. テレメトリ送信

予め作成しているイベントタイマーにて、Azure IoT Central にテレメトリを送信する部分を作成していきます。

1. IoTCloud > Azure > Classic から Publish D2C Message ブロックを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/f13ce556-d23b-8d7c-b11d-2d03473fd492.png)

2. イベントタイマーに配置する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/f56ad626-2066-147d-4438-a9625c56bed4.png)

3. 送信データを、マップとJSON変換のブロックを使い、デバイステンプレートに定義した名前をキー項目として、以下のようにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/b25e8a33-b9c5-0122-7209-9564316f3dd9.png)

4. この状態で Run を実行する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/3c0c6b16-001d-9771-05ce-4787887df9c5.png)

5. イベントタイマーが実行されると、Azure IoT Central 側の生データに、受信したセンサー情報が出力される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/c43b7f40-c2eb-fcb4-a2d0-795e28c01d79.png)

### 2.4. コマンド実行

Azure IoT Central からのコマンドを M5Stack デバイスに受信する部分を作成していきます。

1. IoTCloud > Azure > Classic から Subscribe Direct Method ブロックを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/7b3a2d8d-141a-6a18-e6eb-72b5857b8fb8.png)

2. メソッド名を、Azure IoT Central のデバイステンプレートに定義した機能の名前に変更する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/0b0f890b-58c2-11d2-3f0d-1ecb83bf89d1.png)

3. デバイスのディスプレイ表示部を変更するブロックなどを入れて、以下のように定義する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/4136cf33-0de4-bd64-e1e1-0163f33594b0.png)

4. この状態で Run を実行する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/274896f7-e761-a408-f6d4-e114e1a7601a.png)

5. Azure IoT Central のデバイスにあるコマンド実行画面でテキストを入れると、文字がデバイスに表示されることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269159/0e3b1f2c-042e-0897-ecb5-c7cce19ea3b2.png)

## 3. まとめ

いかがだったでしょうか？
M5Stack UiFlow と Azure IoT Central を組み合わせることで、双方向にやり取り可能なデバイスを簡単に作ることが出来ました！
次回は、Microsoft の Power Platform 製品である、Power Automate と Power Apps を組み合わせて、スマホから簡単にデバイスに文字を反映する部分を作成していきたいと思います。