【Azure で IoT】実デバイスが無くてもテストしたい！(ラズパイシミュレーター & IoT Hub編)

#実デバイスが無くても試せる Azure で IoT 
**「Azure IoT やってみたいけれど、実デバイス持ってないんだよなー」**
という貴方にお勧め。

今回は実機が無くてもブラウザだけでテストできる **「Raspberry Pi オンライン シミュレーター」** を使って**「Azure IoT Hub」**と通信する方法を説明します。

基本的には、マイクロソフトの公式コンテンツ(下記URL)ですが、ちょっとココに書いていないTipsを交えて紹介します。

- [Raspberry Pi オンライン シミュレーターの Azure IoT Hub への接続 (Node.js)](https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-raspberry-pi-web-simulator-get-started/?WT.mc_id=AZ-MVP-4040034)


#Azure側 IoT Hub の用意
はじめに、Azure IoT Hub を作成し、IoT Hub 上に新しいデバイスを登録(デバイスID)しておきます。

下記のURLの手順に従って準備してください。

- [Raspberry Pi オンライン シミュレーターの Azure IoT Hub への接続 (Node.js)](https://docs.microsoft.com/ja-jp/azure/iot-hub/iot-hub-raspberry-pi-web-simulator-get-started/?WT.mc_id=AZ-MVP-4040034)

#Raspberry Pi オンライン シミュレーター の起動
下記のURLから、ラズパイシミュレーターを起動します。

ラズパイシミュレータ本体
https://azure-samples.github.io/raspberry-pi-web-simulator/#Getstarted

こんな感じ。
<img width="960" alt="RPI001.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/8e55a15a-6552-3c77-769a-4f8fd93422a4.png">

ちなみに、このラズパイシミュレータ、GitHub でソースコードが公開されていますので、中身を見てみたい方はどうぞ。

[[GitHub] Azure-Samples/raspberry-pi-web-simulator](https://github.com/Azure-Samples/raspberry-pi-web-simulator)

#Raspberry Pi オンライン シミュレーター の初期設定
ラズパイシミュレーターの画面右側、**コーディング領域**で15行目の

```
const connectionString = '[Your IoT hub device connection string]';
```

に、IoT Hub で登録したデバイスの **プライマリ接続文字列(Primary Connection String)** を貼り付けます。
※以下の例では**「RPISim001」**という名前でデバイスを登録しています。

```
const connectionString = 'HostName=iothubpaasdemo.azure-devices.net;DeviceId=RPISim001;SharedAccessKey=xxxxrxZrOHjt4E86ynH87d8EC8UNRXTMWAf1nyZxxxx=';
```
あとは**コーディング領域**の下にある**「Run」**ボタンを押すだけです。
<img width="490" alt="RPI_Run.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/5a9c76ee-eec9-210e-390b-15f3eb2bb8b3.png">

ラズパイシミュレーターからIoT Hubへのデータ送信が成功すると、「Run」ボタンの下の**コンソール ウィンドウ - コードの出力** に、次のようなJSON形式で2秒置きにデータが送信されている事が分かります。

```
Sending message: {"messageId":1,"deviceId":"Raspberry Pi Web Client","temperature":24.557101751054944,"humidity":79.75501992169126}
```
**「temperature」**がシミュレートされた温度の値で、**「humidity」**が湿度の値です。

一旦、ここで**「Stop」**ボタンを押してデータ送信を停止しておきます。

#Raspberry Pi オンライン シミュレーター から IoT Hub に送信されているデータを変更してみる

送信するJSONデータの「deviceId」の値を変えたい場合には、29行目の
<img width="363" alt="RPI005.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/75fd90ee-49a8-d5ae-8d2f-fc1a211cc1b7.png">

```
deviceId: 'Raspberry Pi Web Client',
```

の'Raspberry Pi Web Client' の値を変更します。


JSONデータの送信間隔を変えたい時には、123行目の
<img width="353" alt="RPI006.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/d4c8a2d4-f993-f164-0d87-c473950b46c5.png">

```
setInterval(sendMessage, 2000);
```
の「2000」の値(2.0秒=2000ms)を変更します。
例えば、0.5秒(500ms)毎にデータを送信したい場合は「500」にします。


#Raspberry Pi オンライン シミュレーター から IoT Hub に送信されているデータをモニターする
次に、「Device Explorer」という Windowsアプリ(オープンソース)を使ってIoT Hubに届いたデータをモニタリングしてみます。

下記のURLから「Device Explorer」のインストーラー (SetupDeviceExplorer.msi
) をダウンロードして、使い方を確認してください。

[Device Explorer のダウンロード](https://github.com/Azure/azure-iot-sdk-csharp/releases)
[Device Explorer の使い方](https://github.com/Azure/azure-iot-sdk-csharp/tree/master/tools/DeviceExplorer)

準備ができたら、ラズパイシミュレーターの**「Run」**ボタンを押して、データ送信を開始しましょう。

<img width="465" alt="RPI009.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/612e6856-4095-65f5-d224-f004b4fc6b93.png">

Device Explorer の**「Data」**タブを選択し、対象の**「Device ID」** を指定した上で**「Monitor」**ボタンをクリックすると、IoT Hub に届いたJSONデータを見る事ができます。
※停止させるには**「Cancel」**ボタンをクリックします。

<img width="960" alt="RPI010.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/493219/7cfe27f2-93d3-8635-5c04-ac6cf4339d43.png">

これで、ラズパイシミュレーターから IoT Hub にテストデータを送信して、実際に動作しているかどうか簡単にテストする事ができました。