ここでは、BLECAST_BLからの照度データをAndroidで取得する方法について解説致します。尚、他のBLECASTシリーズを使う場合は、ソースプログラム中のローカルネームの指定を、使用する製品の名前に変更してください。
作成したプロジェクトファイル全体を圧縮したものがこちらになります。
BLECAST_BL_test_a.lzh
非常に短いプログラムなので、詳しくはソースを見ていただければわかるかと思います。接続はせず、アドバタイズデータを取得するだけです。
Androidの場合、android.bluetooth.BluetoothManagerでBLEが使えます。まず、BluetoothManagerを初期化してインスタンスを生成します。
final BluetoothManager bluetoothManager =
(BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBluetoothAdapter = bluetoothManager.getAdapter();
アドバタイズデータをキャッチすると LeScanCallBack が呼び出されます。 onLeScanメソッドに渡される BluetoothDevice クラスにアドバタイス情報が格納されています。複数のBLEデバイスがアドバタイズしている場合は各アドバタイズをキャッチした瞬間にこのコールバックが呼ばれますのでBLECAST_BLかどうかを判定うします。行137のようにgetName()メソッドでローカルネームが取得できますので、"BLECAST_BL"かどうかを判定します。
scanRecordにはアドバタイズデータの中のデータ部が入ります。下記のオレンジの部分です。
scanRecord[9]と[10] の位置がセンサーデータなのでこれをデコードします。これらは符号なしの2バイトで表されています。Javaは基本的に符号付変数しかありませんので、バイトデータを 0xFFで&して符号なし変数値へ変換しています。
この値はほぼlx(ルックス:照度の単位)となっています。10の場合は10lx、100の場合は100lxです。
まっくらな状態 = 0近く
暗い部屋 = 20〜100
電気をつけた部屋 = 300〜500
くもりの日 = 1500〜2000
はれの日 = 2700前後
快晴、直射日光 = 2750以上
そのデータをTextViewに表示させています。
|