木曜日, 2月 12, 2015

BGLibを使おう!

木曜日, 2月 12, 2015 By



まさかの続編。。。

BLED112ドングルを使おう!」でBluegiga製のBLEモジュールの使用方法を説明しました。
そこでBGLibというライブラリを使用すると楽になるよ!と言ったは良いですが、日本語の解説ページなんかは少ないみたいですね。
せっかくなので簡単に解説しましょう。

BGLibで検索すると一番最初に引っかかるのはこちらです。
ArduinoやC#、Python向けにBGAPIを利用しやすくしたライブラリです。

https://github.com/jrowberg/bglib

ですが、今回はNode.jsなので、こちらを使います。

https://www.npmjs.com/package/bglib

インストールはいつも通りnpmで。

$ npm install bglib

前回同様serialportもインストールしてください。
BGLibで重要なコマンドはgetPacketとparseIncomingのたったの2つです。

getPacket(command, params, callback(err, response))
コマンド実行時のパケットを生成します。
この段階ではコマンドは実行されませんので、生成したパケットをシリアル通信でモジュールに送る必要があります。

parseIncoming(data, callback(err, parsedPackets)
受信したパケットを解析します。
シリアル通信でモジュールから送られてきたパケットを解析してわかりやすい形式に変換してくれます。

これをふまえてプログラムを書くと下記のようになります。
前回同様Helloコマンドとアドバタイズ開始コマンドを送信しています。


// BGLib初期化
var bg = require('bglib');
var bglib = new bg()

// シリアル初期化
var serialport = require("serialport");
var SerialPort = serialport.SerialPort;
var sp = new SerialPort("/dev/tty.usbmodem1", { // ここのパスは適宜変更する
    baudrate: 115200,
}, false);

// BGAPI実行
function bgAPI(command, params) {
bglib.getPacket(command, params, function(err, response) {
var data = response.getByteArray();
console.log(data);
   sp.write(response.getByteArray(), function(err, results) {
   });
});
};

// シリアル開始処理
sp.open(function () {
console.log('open');
// 受信イベント
sp.on('data', function(data) {
bglib.parseIncoming(data, function(err, parsedPackets) {
console.log("Parsed packets: ", parsedPackets);
});
});
// Helloコマンド送信
bgAPI(bg.api.systemHello, null);
// アドバタイズ開始コマンド送信
bgAPI(bg.api.gapSetMode, [2,2]);
});



BLED112だけではなくBLE112/113など同系統のモジュールでも使用できます。
Node.js + Raspberry Piという環境などで動かすと面白い事ができるのではないでしょうか。

1 コメント: