nobleを使用してbleデバイスと接続しデータを定期的に取得しようとしています。
以下のようなソースコード(一部「***」で隠しています)で実行時に引数を指定することでUUIDを切り替えているのですが、SERVICE_UUID1のsubscribeができません。
SERVICE_UUID2のほうはデータが定期的に受信できているので、ロジックの問題はないと思っているのですが、UUIDによってsubscribeがうまくいかないなんてことあるんでしょうか。
androidアプリで同じようにUUIDを指定してデータを取得することはできているので、bleデバイスの問題でもないと思っています。
javascript
1var noble = require('noble'); 2 3var DEVICE_NAME = "*********"; 4var SERVICE_UUID1 = "********************************"; 5var SERVICE_CHARACTERISTIC_UUID1 = "********************************"; 6var SERVICE_UUID2 = "********************************"; 7var SERVICE_CHARACTERISTIC_UUID2 = "********************************"; 8 9if (process.argv[2] == "*****") { 10 var SERVICE_UUID = SERVICE_UUID1; 11 var SERVICE_CHARACTERISTIC_UUID = SERVICE_CHARACTERISTIC_UUID1; 12} else if (process.argv[2] == "*****") { 13 var SERVICE_UUID = SERVICE_UUID2; 14 var SERVICE_CHARACTERISTIC_UUID = SERVICE_CHARACTERISTIC_UUID2; 15} 16 17//start ble 18noble.on('stateChange', function(state) { 19 if (state === 'poweredOn') { 20 noble.startScanning([],false); 21 } else { 22 noble.stopScanning(); 23 } 24}); 25 26//search ble 27noble.on('discover', function(peripheral) { 28 if(peripheral.advertisement.localName == DEVICE_NAME){ 29 noble.stopScanning(); 30 peripheral.connect(function(error){ 31 peripheral.discoverServices(SERVICE_UUID, function(error, services) { 32 var deviceInformationService = services[0]; 33 deviceInformationService.discoverCharacteristics(SERVICE_CHARACTERISTIC_UUID, function(error, characteristics) { 34 characteristics[0].on('data', function(data, isNotification) { 35 console.log(data, isNotification);★ 36 }); 37 console.log("subscribe start"); 38 characteristics[0].subscribe(function(error) { 39 console.log('notify'); 40 }); 41 }); 42 }); 43 }); 44 } 45}); 46
・SERVICE_UUID1
「subscribe start」のログから進まない。
・SERVICE_UUID2
「subscribe start」→「notify」→★のログが定期的に送られてくる
subscribeの処理の中で止まっていると思うんですが、デバッグの方法などがわかりません。
どのあたりに目をつけてみていったらいいかなどアドバイスがあればお願いします。
あなたの回答
tips
プレビュー