Bluetooth通信
5
BLEデバイスから値の変化を受け取りたい
5
BluetoothPeripheralクラスでBLE(Bluetooth Low Energy)のデバイスに接続し、キャラクタリスティックの読み込みやキャラクタリスティックの変化のイベントを受け取ることができます。
Bluetoothのペアリングを行った後にConnectメソッドを実行し、BLEデバイスと接続します。
キャラクタリスティックの値の読み込みはReadメソッドを使用します。データの読み込みが完了するかタイムアウトが発生するまでは他の処理を行えません。読み込まれたデータはByteArray型のオブジェクトで返されます。
キャラクタリスティックが変化した際に値を取得したい場合、StartNotifyメソッドを使用してイベントの受け取りを開始させます。キャラクタリスティックの変化があるとCharacteristicChangedイベントが発生します。CharacteristicChangedイベントでは以下の項目が取得できます。
名前
内容
ServiceUuid
サービスを識別するUUID
CharactaristicUuid
キャラクタリスティックを識別するUUID
Data
変化後のキャラクタリスティックの値
イベントの受け取りを終了したい場合はStopNotifyメソッド、BLEデバイスとの接続を切断したい場合はDisconnectメソッドを使用します。
[ サンプルコード ]
Form BleHt_005 { Width = 404; Height = 580; OptionButton OptionButton1 { X = 12; Y = 17; Width = 152; Height = 59; BgColor = $WHITE; OptionItem item[1] { Width = 144; Height = 28; X = 5; Y = 3; } item[0].Title = "Bluetooth Low Energy"; item[0].Value = "1"; Value = 0; } Button Button1 { X = 170; Y = 17; Width = 101; Height = 59; Title = "スキャン開始"; Function OnTouch( e ) { try { /* FlexView初期化 */ ^.FlexView1.ClearRows(); /* デバイスの種類を設定 */ var bttype; if(^.OptionButton1.Value == 0){ bttype = Runtime.BLUETOOTH_LE; } /* Bluetooth デバイスのスキャン開始 */ var params = new Array(); /* 接続可能なデバイスのみを検索 */ params["CONNECTABLE_DEVICE_ONLY"] = true; Runtime.StartBluetoothScanning(bttype, params); } catch(e) { //.MessageBox("エラー:" + e.Message); } } } Button Button2 { X = 280; Y = 17; Width = 101; Height = 59; Title = "スキャン停止"; Function OnTouch( e ) { /* スキャンを停止 */ Runtime.CancelBluetoothScanning(); } } Label Label1 { X = 8; Y = 85; Width = 157; Height = 24; Value = "スキャン結果"; } Label Label2 { X = 8; Y = 109; Width = 157; Height = 25; Value = ""; HorizontalAlign = $CENTER; VerticalAlign = $CENTER; BgColor = $FFCCFF; } Label Label3 { X = 8; Y = 144; Width = 157; Height = 24; Value = "ボンディング結果"; } Label Label4 { X = 8; Y = 168; Width = 159; Height = 25; Value = ""; HorizontalAlign = $CENTER; VerticalAlign = $CENTER; BgColor = $FFCCFF; } FlexView FlexView1 { X = 9; Y = 211; Width = 379; Height = 199; FlexRecord FlexRecord1{ FlexLabel fl_DeviceID{ title = "デバイスID"; width = 150; } FlexLabel fl_Name{ title = "デバイス名"; width = 150; } FlexLabel fl_AsBTClassic{ title = "Bluetooth Classicデバイス"; width = 170; } FlexLabel fl_AsBLE{ title = "BLEデバイス"; width = 150; } FlexLabel fl_HasRssi{ title = "RSSI値の有無"; width = 150; } FlexLabel fl_Rssi{ title = "RSSI値"; width = 150; } FlexLabel fl_HasTxPowerLevel{ title = "送信出力値の有無"; width = 150; } FlexLabel fl_TxPowerLevel{ title = "送信出力値"; width = 150; } FlexLabel fl_ServiceUuidList{ title = "サービス一覧"; width = 150; } } Function addDeviceInfo(info) { var row; var r; if(rowCount > 0) { /* FlexViewの情報を取得 */ r = GetRow(); do { /* デバイスIDの比較 */ if(r.fl_DeviceID == info.deviceid) { row = r; break; } } while(r.MoveNext()); } if(row == null) { row = InsertRow(); } /* デバイス情報をFlexViewにセット */ row.fl_DeviceID.Value= info.deviceId; row.fl_Name.Value = info.name; row.fl_AsBTClassic.Value = info.ConnectableAsBluetoothClassic; row.fl_AsBLE.Value = info.ConnectableAsBluetoothLE; row.fl_HasRssi.Value = info.HasRssi; if(info.HasRssi != FALSE){ row.fl_Rssi.Value = info.Rssi; } row.fl_HasTxPowerLevel.Value = info.HasTxPowerLevel; if(info.HasTxPowerLevel != FALSE){ row.fl_TxPowerLevel.Value = info.TxPowerLevel; } row.fl_ServiceUuidList.Value = info.serviceUuidList.length; } Function getSelectedDeviceId() { /* 選択した行を取得 */ var rowPos = ^.FlexView1.RowPosition; if(rowPos < 0) { //.MessageBox("デバイスが選択されていません。"); return ""; } /* 選択行のデバイスIDを取得 */ var row = ^.FlexView1.GetRow(rowPos); var r_deviceId = str(row.fl_DeviceID); return r_deviceId; } } Button Button3 { X = 170; Y = 88; Width = 101; Height = 88; Title = "ボンディング済(ペアリング済)デバイス取得"; Function OnTouch( e ) { try { /* ボンディング(ペアリング)済みのデバイスを取得 */ var devices = Runtime.GetBondedDeviceList(); /* FlexView初期化 */ ^.FlexView1.ClearRows(); var i; var row; var info; for(i = 0; i < devices.length; i++ ){ /* デバイス情報をセット */ info = devices[i]; ^.FlexView1.addDeviceInfo(info); } } catch(e) { //.MessageBox("エラー:" + e.Message); } } } Button Button4 { X = 280; Y = 88; Width = 102; Height = 88; Title = "ボンディング(ペアリング)開始"; Function OnTouch( e ) { var device_Id = ^.FlexView1.getSelectedDeviceId(); if(device_Id == "") { /* デバイスIDを取得できなかった場合 */ //.MessageBox("デバイスが選択されていません。"); return; } try { /* ボンディング(ペアリング)を開始 */ Runtime.RequestBonding(device_Id); } catch(e) { //.MessageBox("エラー:" + e.Message); } } } Button Button5 { X = 11; Y = 435; Width = 110; Height = 40; Title = "BLE 接続"; Function OnTouch( e ) { var device_Id = ^.FlexView1.getSelectedDeviceId(); if(device_Id == "") { /* デバイスIDを取得できなかった場合 */ //.MessageBox("デバイスが選択されていません"); return; } try { /* BLEペリフェラル(デバイス)に接続 */ //.peripheral.Connect(device_Id); } catch(e) { //.MessageBox("エラー:" + e.Message); } } } Button Button6 { X = 133; Y = 435; Width = 110; Height = 40; Title = "BLE 切断"; Function OnTouch( e ) { try { /* BLEペリフェラル(デバイス)の接続を切断 */ //.peripheral.Disconnect(); } catch(e) { //.MessageBox("エラー:" + e.Message); } } } Button Button7 { X = 11; Y = 486; Width = 110; Height = 40; Title = "BLE 値の読込"; Function OnTouch( e ) { try { /* 指定したキャラクタリスティックから値の読込み */ var data = //.peripheral.Read("180F", "2A19"); //.MessageBox(data._toHexString()); } catch(e) { //.MessageBox("エラー:" + e.Message); } } } Button Button8 { X = 133; Y = 486; Width = 110; Height = 40; Title = "BLEイベント受取開始"; Function OnTouch( e ) { try { /* 指定したキャラクタリスティックの変化のイベント受け取り開始 */ //.peripheral.StartNotify("180F", "2A19"); } catch(e) { //.MessageBox("エラー:" + e.Message); } } } Button Button9 { X = 253; Y = 486; Width = 110; Height = 40; Title = "BLE イベント受取終了"; Function OnTouch( e ) { try { /* 指定したキャラクタリスティックの変化のイベント受け取り終了 */ //.peripheral.stopNotify("180F", "2A19"); } catch(e) { //.MessageBox("エラー:" + e.Message); } } } } /* Bluetoothデバイスのスキャンを開始した時に発生するイベント */ Function OnBluetoothScanStarted(e) { BleHt_005.Label2.Value = "スキャン開始"; } /* Bluetoothデバイスのスキャンが終了した場合、またはCancelBluetoothScanningメソッドにより スキャンがキャンセルされた時に発生するイベント */ Function OnBluetoothScanFinished(e) { BleHt_005.Label2.Value = "スキャン終了"; } /* Bluetoothデバイスとのボンディング(ペアリング)処理が終了した場合に発生するイベント */ Function OnBluetoothBondingFinished(e) { /* ボンディング結果をラベルに表示 */ if (e.bonded) { BleHt_005.Label4.Value = "ボンディング成功"; } else { BleHt_005.Label4.Value = "ボンディング失敗"; } } /* Bluetoothデバイスのスキャンにより、Bluetoothデバイスが検出されたときに発生するイベント */ Function OnBluetoothDeviceFound(e) { BleHt_005.FlexView1.addDeviceInfo(e); } if(!$DESIGNTIME) { BluetoothPeripheral peripheral { /* キャラクタリスティックの変化を受け取った際に発行するイベント */ Function onCharacteristicChanged(e) { //.MessageBox( "Service : " + e.ServiceUuid + "\n" + "Char : " + e.CharacteristicUuid + "\n" + "Data : " + e.Data._toHexString() ); } } }
管理番号:BleHt_005
Biz-Collections Bizの宝箱 トップへ
Biz/Browser HT・Biz/Browser SmartDevice・Biz/Browser AI TIPS集 トップへ