windows10でnobleを使ってBLEデバイスの検出を行っています。
nobleのstartScanningをしても見つけたいデバイスを検出できません。
ほかのデバイスはたくさん検出されているようでひたすらログが流れています。
javascript
1var noble = require('noble'); 2 3noble.on('stateChange', function(state) { 4 if (state === 'poweredOn') { 5 noble.startScanning(); 6 } else { 7 noble.stopScanning(); 8 } 9}); 10 11noble.on('discover', function(peripheral) { 12 console.log('Found device with local name: ' + peripheral.advertisement.localName); 13});
デバイス側の設定が必要だったりしますか?
ほかのPCやスマートフォンからはこのデバイスを検出できています。
https://github.com/noble/noble/wiki/Compatible-Devices
に対応しているBLEデバイスが載っていますが、
このデバイスしかつなげないってことあるんでしょうか。
1つ気になっているのは、
最初に「No compatible USB Bluetooth 4.0 device found!」のエラーが出ていたので、
https://github.com/noble/noble/issues/670
を参考にwinUSBドライバーをインストールしました。
USB VID/PIDが下記に記載されていないものでしたので、
ソースを直接いじってVID/PIDを追加してしまいました。
https://github.com/noble/node-bluetooth-hci-socket#windows
この修正で一応エラーは解消されて動くようになったので大丈夫だと思っていたのですが、ここに問題があったりするでしょうか。
修正したコードはこんな感じです。(★部分を追加)
javascript
1BluetoothHciSocket.prototype.bindUser = function(devId) { 2 this._mode = 'user'; 3 4 if (process.env.BLUETOOTH_HCI_SOCKET_USB_VID && process.env.BLUETOOTH_HCI_SOCKET_USB_PID) { 5 var usbVid = parseInt(process.env.BLUETOOTH_HCI_SOCKET_USB_VID); 6 var usbPid = parseInt(process.env.BLUETOOTH_HCI_SOCKET_USB_PID); 7 8 debug('using USB VID = ' + usbVid + ', PID = ' + usbPid); 9 10 if (process.env.BLUETOOTH_HCI_SOCKET_USB_BUS && process.env.BLUETOOTH_HCI_SOCKET_USB_ADDRESS) { 11 var usbBus = parseInt(process.env.BLUETOOTH_HCI_SOCKET_USB_BUS); 12 var usbAddress = parseInt(process.env.BLUETOOTH_HCI_SOCKET_USB_ADDRESS); 13 14 debug('using USB BUS = ' + usbBus + ', Address = ' + usbAddress); 15 16 var usbDevices = usb.getDeviceList(); 17 18 for (var i = 0; i < usbDevices.length; i++) { 19 var usbDeviceDesc = usbDevices[i].deviceDescriptor; 20 21 if ((usbDeviceDesc.idVendor == usbVid) && 22 (usbDeviceDesc.idProduct == usbPid) && 23 (usbDevices[i].busNumber == usbBus) && 24 (usbDevices[i].deviceAddress == usbAddress)) { 25 this._usbDevice = usbDevices[i]; 26 } 27 } 28 } else { 29 this._usbDevice = usb.findByIds(usbVid, usbPid); 30 } 31 } else { 32 this._usbDevice = usb.findByIds(0x0a5c, 0x21e8) || usb.findByIds(0x19ff, 0x0239) || usb.findByIds(0x0a12, 0x0001) || usb.findByIds(0x0b05, 0x17cb) || usb.findByIds(0x8087, 0x07dc) ★|| usb.findByIds(0x****, 0x****)★; 33 } 34 35 if (!this._usbDevice) { 36 throw new Error('No compatible USB Bluetooth 4.0 device found!'); 37 } 38 39 this._usbDevice.open(); 40 41 this._usbDeviceInterface = this._usbDevice.interfaces[0]; 42 43 this._aclDataOutEndpoint = this._usbDeviceInterface.endpoint(0x02); 44 45 this._hciEventEndpoint = this._usbDeviceInterface.endpoint(0x81); 46 this._aclDataInEndpoint = this._usbDeviceInterface.endpoint(0x82); 47 48 this._usbDeviceInterface.claim(); 49};
npm install bluetooth-hci-socket
でインストールしたんですが、下記と実装が違うのも気になっています。
https://github.com/noble/node-bluetooth-hci-socket/blob/master/lib/usb.js
知識不足で申し訳ありませんが、
どこかヒントになったりする情報をお持ちでしたらお願いいたします。
あなたの回答
tips
プレビュー