木曜日, 1月 29, 2015

BLED112ドングルを使おう!

木曜日, 1月 29, 2015 By



Bluegigaから出ているBLED112というデバイスがあります。

参照)
https://www.bluegiga.com/en-US/products/bluetooth-4.0-modules/bled112-bluetooth-smart-dongle/

BLE(Bluetooth Low Energy)の通信モジュールの一つです。
最近これを制御するという事があったのですが、少し紛らわしいデバイスなのでここに書いておきます。

BLED112を制御するには2つの方法があります。
1つはBGScriptというScript言語で制御を書いてRomを焼き直す方法と、もう1つはBGAPIというシリアル通信で制御するやり方です。
今回はBGAPIを使ったやり方をご紹介します。

通常のBLEドングルはHCI(Host Controller Interface)というプロトコルを使ってホストと通信するのですが、このBLED112はUSB CDCというプロトコルを使っています。
USB CDC(communications device class)はUSBでシリアル通信ができるようにするための規格になります。

参照)
http://phys.sci.hokudai.ac.jp/LABS/yts/pic/GB002/hcip.html

ですので、一般的にネット上で見られるBLEドングルとの通信方法は使えず独自の制御が必要になります。


シリアル通信するためにはプログラムを書かなければいけないので、今回はMac上でnode.jsを使用してみます。

1、node.jsのインストールはインストーラがあるので簡単ですね。

参照)
http://nodejs.org/

2、serialportライブラリをインストールします。

$ npm install serialport

3、下記のようなプログラムを書きます。



var serialport = require("serialport");

var SerialPort = serialport.SerialPort;

var sp = new SerialPort("/dev/tty.usbmodem1", { // ここのパスは適宜変更する

    baudrate: 115200,
}, false);

sp.open(function () {
    console.log('open');
    
    sp.on('data', function(data) {
    // [0,0,0,1]を受信すれば成功
        for(i=0; i<data.length; i++) {
       console.log(i+': ' + data[i].toString(16));
}
    });
    
    var sendData = new Uint8Array([0,0,0,1]); // Helloコマンド
//     var sendData = new Uint8Array([0,2,6,1,2,2]); // アドバタイズ開始コマンド
// コマンド送信
    sp.write(sendData, function(err, results) {
        console.log('err ' + err);
        console.log('results ' + results);
    });
});



接続されているシリアルポート名は下記コマンドで調べられます。
ドングルを接続した状態でコマンドを実行してみましょう。

$ ls /dev/tty.*


簡単に説明するとHelloコマンドという動作確認用のBGAPIをnode.jsからBLED112に送信しています。リファレンスには下記の様に書いてあるので「0,0,0,1」を送ります。

返事は下記の様に「0,0,0,1」が返って来れば成功となります。



同様に「0,2,6,1,2,2」を送信すればアドバタイズが開始されますので、BLEデバイスから検索する事ができるようになります。

BGAPIの詳細は「Bluetooth_Smart_Software_vX.X_API_Reference」を参照してください。
ちなみにこんな感じでプログラムするのは結構大変なので、BGLibという良いライブラリを作ってくれた人がいます。感謝!
これを利用するとずっと開発は楽になるでしょう。
でも、基本動作を理解することは大事ですからね!

0 コメント:

コメントを投稿