手元のTIセンサータグのデータをBluemixを使ってビジュアルに表現してみました。
Bluemixの IoT FoundationとNode-REDと、Gitなどにあるサンプルプログラムを使ってわりと簡単に実現できたので、まとめておこうと思います。
###今回使用したもの###
- Raspberry Pi 2 model B
- Bluetoothドングル
- TI Sensor Tag CC2541
・・・もっと簡単に使えるCC2560というのが出ているようですが持っていないので。。。 - IBM Bluemix フリートライアル・アカウント
###データを発信する側:ラズパイ+センサータグのセットアップ###
Bluez をインストールして、Bluetoothでラズパイとセンサータグと接続します。
こちらにまとまっていますので、リンクを掲載させていただきます。
Bluez を使用したSensorTagへのアクセス
ラズパイとセンサータグの接続の確認ができたら、IoTF へデータを発信するプログラムをラズパイにインストールします。今回はセンサータグのデータをMQTTへパブリッシュする Node.js のプログラムがあったのでそれを使いました。
ということで、まずは Node.js をインストールします。
Node.js インストールもここにまとまっていますので、リンクを掲載させていただきます。
node.jsのversionを管理するためにnodebrewを利用する
Raspberry PiにNode.jsをインストールしてCylon.jsでLチカする
Node.js をインストールしたら、プログラムをGitからクローンします。
$ git clone git://github.com/IBM-Bluemix/iot-sensor-tag
このプログラムを動かすために、config.properties というファイルを作成し、publishディレクトリに置く必要がありますが、その設定は後ほど。
設定ファイルが作成できたら、publishディレクトリに移動してプログラムを起動します。
$ node sensor-tag.js
###データを受信する側:Bluemixでのデバイス接続###
Bluemixにログインします。アカウントがない場合は次のリンクから登録ください。少し時間がかかる場合があります。
Bluemix フリートライアル サインアップ手順
ログイン後、画面右上の表示が「地域:英国」となっている場合は、地域のところをクリックして「米国南部」に切り替えます。スペース名を要求されたら dev と入力します。
次に「カタログ」をクリックし、ずっと下までスクロールして「モノのインターネット」というサービスをクリックします。
クリック後の画面で、次のようにして作成ボタンをクリックします。
- スペース名:デフォルトのまま
- アプリ:アンバインドのまま
- サービス名:日本語表記の部分をアルファベットで適宜変更
こうしてIoTサービスが起動しWelcome画面が表示されるので、左下の Launch dashboard
をクリックします。-ここでデバイスを登録します。
次の画面の Devices
タブをクリックし、Add device
をクリックします。ここでdevice typeに CC2541 Sensor Tagと入力し、MACアドレスを入力します。
Continue
をクリックすると、登録したデバイスのプロパティが表示されるのでコピーします。
重要 ここでメモっておかないと、後で参照できません。
コピーした内容を、ラズパイにクローンしたレポジトリのpublishディレクトリ内の config.propertiesファイルにペーストします。
org = your Organization Code
type = your device type id
id = your device ID
auth-method = token
auth-token = yourAuthToken
###データを受信する側:Bluemixでのアプリのデプロイ###
Bluemixのカタログから「Internet of Things」のボイラープレートをクリックします。実行中にステータスが変わったら、用意ができたらアイコンをクリックし、Node-REDフロー・エディターを起動します。
次にWebSocket経由でデバイスのデータを受け取り、ブラウザに表示するプログラムを使います。
以下の手順にしたがってアプリを実装します。
Node-REDを使ってセンサーデータをWebSocketで出力する
この投稿にあるNode-REDサンプルの内容を、先ほど起動したIoTのフロー・エディターに貼り付けます。(Node-REDでデバイス・データをWebSocketに出力し、ここで実装したアプリで受け取る、という構造です)
アプリがデプロイできたら、上記投稿に記載のあるとおり、センサー・シミュレーターを使って動きを確認します。
センサー・シミュレーターでの稼動確認が終わったら、接続先をシミュレーターからセンサータグに変更します。
Bluemixのダッシュボードに移動し、「Internet of Things」ボイラープレートから作成したアイコンをクリックします。ここで、「+サービスまたはAPIのバインド」をクリックし、デバイス接続時に作成した「モノのインターネット」サービスを選択してバインドします。
次にNode-REDフローエディター画面で、
- IoT Sensor というラベルのついたノードの内容をIoT Foundationで登録した内容に変更
- Create Message というラベルのついたノードで、センサータグのデータを出力するように変更 (Functionノードで出力として送るデータを整形します。)
以上で、WebSocket経由でセンサータグのデータを計器(メーター)のように表示できるようになります。あとは、メーター上限・下限や表示するラベルなど、Socketからデータを受け取るアプリのソースを適宜修正して、見た目をブラッシュアップします。