IOTについて(3)JavascriptでのBLE活用(noble)
前回はBLEとの接続のライブリの中で、最もシンプルに構築できるbluejelly.jsについて紹介した。今回はこれまで述べたサーバーサイドのアプリケーションと組み合わせることが可能なnode.js上で動作するnobleについて紹介したい。
nobleは、node.js上で動くjavascriptのモジュールで使い方としては「npm install noble」でモジュールをインストールして、例えば前述のbleデバイスのcsanの場合は以下のようなコードでおこなうことができる。
var noble = require('noble');
noble.startScanning(); // any service UUID, no duplicates
noble.startScanning([], true); // any service UUID, allow duplicates
var serviceUUIDs = ["<service UUID 1>", ...]; // default: [] => all
var allowDuplicates = <false|true>; // default: false
noble.startScanning(serviceUUIDs, allowDuplicates[, callback(error)]); // particular UUID's
BLEの通信は、最初の段階でアドバタイズと呼ばれるブロードキャスト通信(対象を定めず広く通信)があり、それを受信機が上記のような形でscanして、UUIDと呼ばれる送信機のIDとRSSIと呼ばれる受信電波強度の情報を得る。これを利用することで特定の場所に情報端末をかざすとweb経由で情報を得る「位置情報サービス」と呼ばれるサービスを組むことができる。
さらに、得られたアドバタイズ情報の送信先に接続要求信号を送り、それが許容されるとGATT(Generic attribute profile)通信と呼ばれる1対1通信に切り替わる。GATT通信ではService(サービス)とCharacteristic(キャラクタリスティック)という概念でデータのやり取りをおこなう。サービスはキャラクタリスティックを機能単位で一括りにしたラベルのようなもので、キャラクタリスティックはペリフェラル機器がセントラル機器に公開して共有するデータ構造となる。nobleのサンプルコードは以下のようになる。
peripheral.discoverAllServicesAndCharacteristics([callback(error, services, characteristics)]);
service.discoverCharacteristics() // any characteristic UUID
var characteristicUUIDs = ["<characteristic UUID 1>", ...];
service.discoverCharacteristics(characteristicUUIDs[, callback(error, characteristics)]); // particular UUID's
characteristic.read([callback(error, data)]);
characteristic.write(data, withoutResponse[, callback(error)]); // data is a buffer, withoutResponse is true|false
キャラクタリスティックは個々のIOTデバイスで規定されているので公開されているAPI情報を参照して設定すれば良い。
サンプルと試すのは、rasberypiを使うのがお手軽だが、センサーネットワークのようなものを組みたい場合はTIのsensor tag等の小型センサータグを使ったり、少し前に話題になったメガネ型デバイスであるJINSのMEMEをつなげたものも面白いと思う。
コメント
[…] IOTについて(3) JavascriptでのBLEの活用(noble) […]