ちょっと前に NeoPixel でプラモデルをライトアップする~Lチカ編~ - koudenpaのブログ として、NeoPixelをESP8266から制御した。
目的はプラモデルをいい感じにライトアップすることなので、どういう光らせ方にすればいい感じになるのかの調整をしたい。
でも、光らせ方を変えるのにイチイチコードを再コンパイル、転送なんてやってられない。
かといって入力機器をマイコンにつなぐのはクッソ面倒くさい。
なので、ESP8266自身をアクセスポイントかつWebサーバにして設定を変えられるようにしたいと思い、実際した。
が、非常にタイムリーにそのうち試したいと思っていた ESP8266 と Azure IoT Hub を繋ぐライブラリ が公開されてしまった。
となれば試してみるしかないじゃない? というわけで、試した結果が以下の動画です。
このライブラリを使って ESP8266 を IoT Hub に繋ぐチュートリアル記事はこちら。
LEDの色を遠隔操作するためにやったこと
デバイス
自分がAPになって HTTP Post されたメッセージをLEDに反映していたものを、 ライブラリを使って IoT Hub からのC2DメッセージをLEDに反映するようにした。
クラウド
Azure IoT Hub は共有秘密鍵を使って認証したうえでメッセージをデバイスに送るので、 フロントエンドをHTML+JavaScriptで済ますのはなかなかハードルが高い。
なので、ASP.NET MVC5 でちょこっとアプリケーションを作って Microsoft Azure App Service にデプロイした。
Core にしようかとも思ったのだけれど、結構変なところにはまったりするのでやめておいた。
かなり恥ずかしい作りなのでそのうち直していきたい。 (これは何もしないパターン)
おおむね以下のようなことを行った。
- デバイスのレジストリから IoT Hub に登録されているデバイスを一覧表示
- C# で Azure IoT Hub を使用する方法 | Microsoft Azure
- この辺だったかな? RegistryManager を使えばよい
- 任意のデバイスを選択してコマンドの発行フォームを表示
- フォームからPostされた内容をデバイスに送信
- 人としてIoT Hubへの接続文字列は Web.config に出した
IoT Hub はガスガス機能追加がされているので全然追いつけていない。 そのうちこの辺も試しておきたい。 (これは何もしないパターン)
AWSに負けていたデバイスのメタ情報をいい感じに管理できる機能、、、だと思う。 それがなかった時代の構成済みシステムである IoT Suite なんかはその辺をDocument DB に入れていたり自前管理をしているのだけれど、マネージドサービスなのだから密結合する関連情報は同じサービス内で扱えてくれた方がありがたい。
とはいえ IoT Hub を使うのはかなり遠回り
ぶっちゃけ、こんなこと(MQTTでメッセージ送ってLチカ)くらい先人がいくらでもやっている。 特に、目的を簡単に達成するなら Milkcocoa などのMQTTブローカーのラッパーを使ってHTMLとJavaScriptで済ますのが簡単だと思う。
このデモはそんな感じの構成だった。
おー!すげえ! webから操作 #mlkcca pic.twitter.com/RP2YBn7uOk
— 真夏のおしぼりジャンボリー (@bakuonboogie) 2016年7月20日
IoT Hub の利点は、デバイス毎にIDを発行してメッセージの送受信や管理を行えるところにある。 要はPaaSとして完全にエンタープライズ指向なのだ。 その分機能が重たいため、単純にメッセージを送受信するだけには重めな部分もある。
とはいえ、Freeなら無料で8000メッセージ(0.5KB)/日を処理できるので、 試してみて損はないサービスだとは思う。
8000メッセージは結構きつい制限だけれど、課金プランは5000円~なので、 趣味で遊ぶにはちょっとお高め(僕にとっては)。
明日はどっちだ
次こそはいい感じに光らせる調整をしていきたい。