【初めの一歩】Azure Sphereを動かしてみた　～Azure IoT Hubへの接続～

地道にAzure Sphereを触っている日々ですが、今回はついにAzureへの接続を試みます！
前回に引き続き、Azure Sphereのサンプルコードを使って進めていきます。
今回は以下のサンプルを利用します。
https://github.com/Azure/azure-sphere-samples/blob/master/Samples/AzureIoT/IoTHub.md

#Azure側の環境をセットアップ
まずはAzure Sphereを接続するためのAzure側の環境を準備します。
Azure上に用意するリソースはIoT HubとIoT Hub Device Provisioning Service(以後、DPS)が必要になります。
リソースの作成については詳しく書きませんが、詳細は以下を参考にしています。
https://docs.microsoft.com/ja-jp/azure/iot-dps/quick-setup-auto-provision
https://docs.microsoft.com/ja-jp/azure-sphere/app-development/setup-iot-hub
※作成するリージョンについては、なるべく近くの場所を選んでください。

以下のようになれば、Azure側の準備完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/e3fe65c0-a66d-ae45-41d6-46c05bbc6611.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/52597519-9cb5-b362-f609-123050b42b7d.png)

これで、Azure側の準備は完了です。

#Visual Studio上でプログラムを編集
次に、Azure Sphereのプログラムを立ち上げていきます。
前回の記事のようにプログラムを実行する準備を行います。
(※前回記事：https://qiita.com/ishii1125/items/96b646086caf2db45df7)
ここで前回と違う点はCMakeで作成するものが違うくらいですね。

プロジェクトが立ち上がったら、設定情報を対応させます。変更するところはapp_manifest.jsonとAvnet社のモジュールを使っているので、CMakeSetting.jsonの2つです。

##app_manifest.jsonの変更内容
先にapp_manifest.jsonを編集します。全部で3つ変更を加えます。
1つ目に、Azure SphereのテナントIDを記入します。テナントIDは以下のコマンドで確認します。

```ruby:cmd
azsphere tenant show-selected
```

テナントIDを確認したら、DeviceAuthenticationの値を確認したIDの値に置き換えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/e6cf8159-6a5a-37fb-96f9-86584e97118c.png)


2つ目に、DPSに接続するためのスコープIDを記入します。場所はCmdArgsの値にDPSのスコープIDを追記します。※画像の赤線部をコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/6e142f29-4ce7-9179-9ff0-288145460946.png)
こんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/faf6224d-855f-9ce0-09c7-27e49a1a3995.png)

3つ目にAzure Sphereデバイスが接続する先の情報を記入します。接続先の情報として、IoT Hubのホスト名を追記します。※画像の赤線部をコピー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/b76617c5-a247-928a-3f4b-aed30f754dd3.png)
こんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/1088e258-6ae3-ce06-dd85-b80ca447c1aa.png)
この時、DPSに接続する必要があるので、”global.azure-devices-provisioning.net”は残したままで、カンマで区切って、追記してください。あと、それぞれがダブルクォーテーションでくくられていることもお忘れなく。

##CMakeSetting.jsonの変更内容
もう一つの変更内容である、CMakeSetting.json内のハードウェアの情報を変更します。
以下が変更後の状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/39dab6fb-8e55-75e6-7391-a9c239579804.png)
変更内容については以下のハードウェアの情報を参照し、使っているデバイスに合わせてください。
https://github.com/Azure/azure-sphere-samples/tree/master/Hardware

上記の変更が完了したら、プロジェクトをビルドしていきます。

#プロジェクトの実行
前回と同じ流れですが、メニューの「ビルド」から「すべてビルド」を実行します。
ビルドが完了したら、ツールバーにある「スタートアップアイテムの選択」のところで「GDB Debugger(HLCore)」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/bddfc432-fc8f-e906-bdd3-9f210fc17855.png)

最後にF5キーを押してアプリケーションを実行します。
実行すると温度(仮想データ)についてはこんな感じで流れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/84bc778f-63e0-a244-ca93-6ecb187bedde.png)

また、ボタンの操作についてもリアクションが搭載されており、Aを押すと、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/27f4c5aa-5eb1-9941-bf96-603bf8c2656b.png)
Bを押すと、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/90a00645-5218-4e31-64ae-aa223c76228f.png)
といったようにそれぞれのリアクションを返すようになっています。

ちなみに、IoT Hubのカウントも上昇していました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482426/25aa4eac-bec5-cf95-bc94-90eb3b7e4b70.png)

#まとめ
サンプルのものを利用するとDPSが必須になっていますが、証明書をAzure Sphereテナントで生成できるので、比較的すぐに利用することができました。
また、今回は仮想データを送っているのみですが、今後は実データの取得も試みたいです。。。