WICED SenseをIntel Edisonから使う

WICED Sense というデ バイスがあります。これはBroadcomが作っているBLEタグ です。BLEに加えて、以下の5つの MEMS センサーが搭載されています。

  • 三軸ジャイロ

  • 加速度計

  • 方位

  • 気圧計

  • 湿度、温度計

Intel EdisonとWICED SenseをMac Book Pro 13Inchに乗せて撮影しました。小 ささが分かると思います。

../../../_images/edison_wiced.png

国内からはここから買えます。1つ2450円です。(でも、今は完売してますね) http://www.macnicaonline.com/SHOP/BCM9WICED_SENSE.html

買ったら本体内の電池ボックスの中に通電防止のプラスチックが挟まっていますので、 まずそれを取ります。(ここでハマりましたw)

スマホから接続してみる

"WICED Sense" という名前のアプリをgoogle playからインストールします。 ぼくはNexus5を使っていますのでAndroidアプリですが、iPhoneでもアプリ が出ています。

アプリを起動すると、BluetoothをOnになりScanが始まります。そこでWICEDが 出てきたらタップします。(もしかしたら上のボタンをまずおして、wakeupさ せる必要があるかもしれません)

  1. Connectをタップ

  2. WICED Senseの下のボタンを押す

で「ブ」と短く一回鳴れば接続完了です。画面に電池容量や温度などの情報が 表示されるでしょう。

../../../_images/wiced_app.png

こんな感じで表示されます。

firmwareが更新されているので、メニューから「Check for software updates」 を選び、最新版に更新します。「ブブブ」とうるさいですが、30秒ぐらいで完 了します。

では、続いて Intel Edisonから見てみましょう。

Intel Edisonから接続してみる

Intel EdisonからWICED Senseを使ってみましょう。

まず、Edisonにログインし、以下のコマンドでbluetoothを有効にしておきましょう。(ここではEdisonへのログイン方法などは解説しません)

rfkill unblock bluetooth

cylonから扱う

cylonjs というnodeライブラリがあります。これ はJavaScriptでAurdinoなどいろいろなものを制御しよう、というものです。 これがWICED Senseに対応しています。

WICED SenseにつなぐにはEdisonに以下の3つのnode packageをインストール しておく必要があります。

  • npm install noble

  • npm install cylon-ble

  • npm install cylon-wiced-sense

情報を取ってみる

以下のコードをEdison上に保存し、 node get_info.js と実行します。

var Cylon = require('cylon');

Cylon.robot({
  connection: { name: 'bluetooth', adaptor: 'central', module:
  'cylon-ble', uuid: '207377654321'},
  devices: [{name: 'battery', driver: 'ble-battery-service'},
            {name: 'deviceInfo', driver: 'ble-device-information'},
            {name: 'generic', driver: 'ble-generic-access'},
            {name: 'wiced', driver: 'wiced-sense'}],

  display: function(err, data) {
    if (err) {
      console.log("Error:", err);
    } else {
      console.log("Data:", data);
    }
  },

  work: function(my) {
    my.generic.getDeviceName(function(err, data){
      my.display(err, data);
      my.generic.getAppearance(function(err, data){
        my.display(err, data);
        my.deviceInfo.getManufacturerName(function(err, data){
          my.display(err, data);
          my.wiced.getData(function(err, data){
            my.display(err, data);
          });
        });
      });
    });
  }
}).start();

以下のような感じで、どんどんデータが出てきます。 Connecting のところ で、上ボタンを押す必要があるかもしれません。

I, [2014-11-14T13:38:26.496Z]  INFO -- : Initializing connections.
I, [2014-11-14T13:38:26.511Z]  INFO -- : Initializing connection 'bluetooth'.
I, [2014-11-14T13:38:26.780Z]  INFO -- : Initializing devices.
I, [2014-11-14T13:38:26.782Z]  INFO -- : Initializing device 'battery'.
I, [2014-11-14T13:38:26.788Z]  INFO -- : Initializing device 'deviceInfo'.
I, [2014-11-14T13:38:26.790Z]  INFO -- : Initializing device 'generic'.
I, [2014-11-14T13:38:26.792Z]  INFO -- : Initializing device 'wiced'.
I, [2014-11-14T13:38:26.823Z]  INFO -- : Starting connections.
I, [2014-11-14T13:38:26.827Z]  INFO -- : Connecting to 'bluetooth'.
I, [2014-11-14T13:38:30.841Z]  INFO -- : Starting devices.
I, [2014-11-14T13:38:30.843Z]  INFO -- : Starting device 'battery'.
I, [2014-11-14T13:38:30.846Z]  INFO -- : Starting device 'deviceInfo'.
I, [2014-11-14T13:38:30.849Z]  INFO -- : Starting device 'generic'.
I, [2014-11-14T13:38:30.851Z]  INFO -- : Starting device 'wiced'.
I, [2014-11-14T13:38:30.854Z]  INFO -- : Working.
Data: WICED Sense Kit
Data: { value: 'Generic Tag', description: 'Generic category' }
Data: Broadcom
Data: { accelerometer: { x: 1, y: -1, z: 82 },
  gyroscope: { x: -26, y: -78, z: 203 },
  magnetometer: { x: 842, y: -523, z: -2101 } }
Data: { accelerometer: { x: 0, y: -3, z: 83 },
Data: { accelerometer: { x: 0, y: -2, z: 83 },
  gyroscope: { x: -24, y: -150, z: 261 },
  magnetometer: { x: 850, y: -532, z: -2099 } }
Data: { humidity: 618, pressure: 10155, temperature: 245 }

では、この得られたデータをMQTTで送ってみましょう。

MQTTで送ってみる

MQTTで送るには、mqttcliが便利です。drone.ioにてbuild済みのバイナリを配っ ていますので、linux_386用のファイルを以下のようにして取ってきます。 (chmodが必要です)

curl -O https://drone.io/github.com/shirou/mqttcli/files/artifacts/bin/linux_386/mqttcli
chmod ugo+x mqttcli

そして、 ~/.mqttcli.cfg に MQTT as a Service: sango で得た情報を記載しておきます。

{
  "host": "sango.mqtt.example.jp",
  "port": 1883,
  "username": "shirou@github",
  "password": "BLAHBLAH"
}

あとはさっきのnodeの標準出力を食わせてあげれば、どこからでもデータを受 け取れます。

node get_info.js | ./mqttcli pub -t "shirou@github/edison" -s

あとはDBに突っ込むなりアラートを送るなり、好きなようにいじれますね。

まとめ

WICED Senseという各種センサーが搭載されているBLEタグがあります。これを Intel Edisonから扱ってみました。さらに、得られたデータをMQTTで送ってみ ました。

Intel Edisonは小型でどこにでも置けますし、WIFIが付いているのも大きいで す。WICED Senseも小型でとても扱いやすいです。さらにMQTTを組み合わせる ことで、手軽にセンサー情報を扱うことが出来るようになりました。

Comments

comments powered by Disqus