概要
RaspberryPi で Azure IoT Hub を使ってみました
Azure のサインアップ ( Microsoft アカウントの取得 ) は事前に済ませておいてください
環境
- Raspberry Pi Type B Single Board Computer 512MB
- Raspberry Pi Camera Module Rev1.3
- Raspbian 8.0 (Jessie)
- Kernel Version 4.1.7+ #817
- Azure Portal 20160419 時点
Azureポータルへのログイン
サインアップしたアカウントでポータルにログインしましょう
無事ログインできてダッシュボードが表示されれば OK です
サービスを作成する
IoT Hub を作成します
新規 -> モノのインターネット (IoT) -> Azure IoT Hub
を選択します
すると「Azure サブスクリプションの取得」にサインアップする必要がある旨が表示されると思うので素直にサインアップします
無料試用版のサブスクリプションの取得を行う
今回は無料試用版を選択します
個人情報は入力する必要があるので入力しサインアップを選択します
本人確認が必要になります
自分は電話番号を使って SMS 認証を行いました
また、カードの登録も必要になります
今回の IoT Hub は無料枠で収まる範囲で使えますが、他のサービスは作った瞬間課金されるものもあるのでカードの登録が必須になります
※IoT Hub 使いたいだけなのでこの段階でやる気がなくなりそうです
登録が完了するとアクティベーションがかかるのでちょっと待ちます
アクティベーションが終了すればサブスクリプション登録は完了です
再度ダッシュボードに戻って Azure IoT Hub の作成を行います
と思ったが
どうやら無料試用版だとダメみたいで従量課金のサブスクリプションに契約しないとダメなようです
※公式には無料試用版でいけるとあったんですが自分はなぜかダメでした
無料試用版のサブスクリプションが有効になっていなかっただけでしょうか
無料試用版を契約したと少し時間をおいてからダッシュボードにアクセスしたほうがいいかもしれません
以下はせっかちな人だけが登録すれば OK です
再度サービスを作ろうとしてもまた、サインアップの画面に飛ばされるのでそこで従量課金のサブスクリプションを購入してください
一応、従量課金のサブスクリプションを購入した段階で課金が発生するか確認したのですが、それはないようです
マイアカウントに行って課金状況を確認しましたがサブスクリプションを購入しただけでは 0 円でした
ややこしいので「購入」という表現をやめてほしいです
今回は従量課金のサブスクリプションを購入しても、IoT Hub は無料枠の範囲 (8,000msg 以内, 最大メッセージサイズ 0.5 KB) で使う予定だったので問題はないですが、従量課金のサブスクリプションを購入していると「いつの間にか」ということもあるので、、、
(ようやく)サービスの作成をする
いろいろありましたが、これでようやく IoT Hub が作成できます
IoT Hub の作成画面で Hub を作成します
とりあえず以下のような感じで入力しました
名前は適当に入力して OK です
価格とスケールティアは「F1 Free」を選択しましょう
IoT Hub ユニットと Device-to-cloud パーティションはサブスクリプションを無料試用版にすると自動で 1, 2 となります
リソースグループは新規作成で好きな名前を入力してください
問題なければ「作成」ボタンをクリックします
するとダッシュボードに戻ってデプロイが開始されます
デプロイが完了するまで待ちましょう
デプロイ完了後にすべてのリソースを確認すると IoT Hub が作成されていると思います
デバイス ID を生成する (デバイスを登録する)
ここからは RaspberryPi 上での作業になります
RaspberryPi の電源を ON にしてインターネットに接続できる状態にしてください
で、まずはデバイス ID なるものを生成します
デバイス ID を生成するために iothub-explorer をインストールします
sudo npm install -g iothub-explorer@latest
これを使ってコマンドラインから Azure にログインします
ログインには認証文字列が必要でこれが Azure ポータルで取得できます
先ほどすべてのリソースで確認した IoT Hub のページから辿ります
rpi-hub (ここは作成した IoT Hub 名) -> 共有アクセスポリシー -> iothubowner -> 接続文字列—プライマリキー
をコピペして持ってきます
そしたらその「接続文字列—プライマリキー」を使って以下のコマンドを発行します
iothub-explorer "HostName=rpi-hub.azure-devices.net;SharedAccessKeyName=iothubowner;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" create raspberrypi --connection-string
すると以下のようにデバイスが登録された旨が表示されます
-
deviceId: raspberrypi
generationId: 635966494155048235
etag: MA==
connectionState: Disconnected
status: enabled
statusReason: null
connectionStateUpdatedTime: 0001-01-01T00:00:00
statusUpdatedTime: 0001-01-01T00:00:00
lastActivityTime: 0001-01-01T00:00:00
cloudToDeviceMessageCount: 0
authentication:
SymmetricKey:
secondaryKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
primaryKey: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-
connectionString: HostName=rpi-hub.azure-devices.net;DeviceId=raspberrypi;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ここで取得できた最後の「connectionString」は使うのでどこかにメモしておいてください
この状況で一旦、作成した IoT Hub を見てみるとデバイス数がカウントされていることがわかると思います
サンプルの Node スクリプトを作成する
さて、デバイスを登録できたので実際にデータを IoT Hub に送信してみます
git clone https://github.com/Azure/azure-iot-sdks.git
cd azure-iot-sdks/node/device/samples
vim simple_sample_device.js
16 行目を以下のように書き換えます
var connectionString = ‘[IoT device connection string]’;
↓
var connectionString = ‘HostName=rpi-hub.azure-devices.net;DeviceId=raspberrypi;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’;
書き換えたら実行してみましょう
動作確認
- sudo npm install
- node simple_sample_device.js
とすると 1 秒おきにサンプルの情報を IoT Hub に送信し始めます
Client connected
Sending message: {“deviceId”:”myFirstDevice”,”windSpeed”:11.82843124307692}
send status: MessageEnqueued
Sending message: {“deviceId”:”myFirstDevice”,”windSpeed”:13.104170331731439}
send status: MessageEnqueued
この状態で IoT Hub を確認するとメッセージ数が上昇していることが確認できると思います
最後に
デバイスから送信したデータが IoT Hub に登録されるところまで試してみました
サインアップには正直参りました
こんなに面倒だとは思いませんでした
まぁ元々商用サービスなので仕方ないと言えば仕方ないですが、、、
あとハマリそうなポイントはデバイス ID の作成 (登録) 部分でしょうか
わかれば大したことはないですが、そもそもデバイス ID を生成(登録)しなければいけないということを知るすべが少ない気がします
公式ドキュメントには書いてはいますが、中々に見つけづらいかったです
そしてそこでデバイス用に生成された認証文字列を使わないとデバイスからのデータが登録できない点も注意が必要です
今回は主に公式のドキュメントを元に進めていきましたが、日本語からいきなり英語になったり、ドキュメントにあるファイルが Github 側にはなかったりとドキュメントの精度が微妙だなという印象を受けました
0 件のコメント:
コメントを投稿