@abandonware/bluetooth-hci-socket 中文文档教程
node-bluetooth-hci-socket
Node.js 的蓝牙 HCI 套接字绑定
注意: 目前仅支持 Linux、FreeBSD 和 Windows。
Prerequisites
注意: node-gyp
仅在 npm 找不到适用于您的操作系统版本的二进制文件时才需要,否则二进制文件是预构建的。
Linux
- Bluetooth 4.0 Adapter
注意: node-usb 依赖项可能会安装失败,这没关系,因为它是一个可选的可选依赖项。 通过 Linux 发行版的包管理器安装 libudev-dev
将解决该问题。
Windows
这个库需要原始 USB 访问蓝牙 4.0 USB 适配器,因为它需要绕过 Windows 蓝牙堆栈。
需要 WinUSB 驱动程序,使用 Zadig 工具 用于替换适配器的驱动程序。
警告:这将使适配器在 Windows 蓝牙设置中不可用! 要回滚到原始驱动程序,请转到:<代码>设备管理器 -> 打开设备 -> 更新驱动程序 注意:
- that one should select "Delete the driver software for this device" as per Zadig instructions if the generation of the system restoral point by Zadig fails if one wishes to use restore system restoral point as an option.
Compatible Bluetooth 4.0 USB Adapter's
Name | USB VID | USB PID |
---|---|---|
BCM920702 Bluetooth 4.0 | 0x0a5c | 0x21e8 |
BCM920702 Bluetooth 4.0 | 0x0a5c | 0x21f1 |
BCM20702A0 Bluetooth 4.0 | 0x19ff | 0x0239 |
BCM20702A0 Bluetooth 4.0 | 0x0489 | 0xe07a |
BCM20702A0 Bluetooth 4.0 | 0x413c | 0x8143 |
CSR8510 A10 | 0x0a12 | 0x0001 |
Asus BT-400 | 0x0b05 | 0x17cb |
Intel Wireless Bluetooth 6235 | 0x8087 | 0x07da |
Intel Wireless Bluetooth 7260 | 0x8087 | 0x07dc |
Intel Wireless Bluetooth 7265 | 0x8087 | 0x0a2a |
Intel Wireless Bluetooth 8265 | 0x8087 | 0x0a2b |
Belkin BCM20702A0 | 0x050D | 0x065A |
Dell Precision 5530 | 0x8087 | 0x0025 |
Compatible Bluetooth 4.1 USB Adapter's
Name | USB VID | USB PID |
---|---|---|
BCM2045A0 Bluetooth 4.1 | 0x0a5c | 0x6412 |
Marvell AVASTAR | 0x1286 | 0x204C |
Install
npm install @abandonware/bluetooth-hci-socket
Usage
var BluetoothHciSocket = require('@abandonware/bluetooth-hci-socket');
Actions
Create
var bluetoothHciSocket = new BluetoothHciSocket();
Set Filter
var filter = new Buffer(14);
// ...
bluetoothHciSocket.setFilter(filter);
注意如果使用bindRaw
,则不需要setFilter
。
Bind
Raw Channel
bluetoothHciSocket.bindRaw([deviceId]); // optional deviceId (integer)
User Channel
bluetoothHciSocket.bindUser([deviceId]); // optional deviceId (integer)
要求设备处于断电状态(sudo hciconfig hciX down
)。
Control Channel
bluetoothHciSocket.bindControl();
Is Device Up
查询设备状态。
var isDevUp = bluetoothHciSocket.isDevUp(); // returns: true or false
注意:必须在bindRaw
之后调用。
Start/stop
开始或停止事件处理:
bluetoothHciSocket.start();
// ...
bluetoothHciSocket.stop();
注意:必须在bindRaw
或bindControl
之后调用。
Write
var data = new Buffer(/* ... */);
// ...
bluetoothHciSocket.write(data);
注意:必须在bindRaw
或bindControl
之后调用。
Events
Data
bluetoothHciSocket.on('data', function(data) {
// data is a Buffer
// ...
});
Error
bluetoothHciSocket.on('error', function(error) {
// error is a Error
// ...
});
Examples
有关代码示例,请参阅示例文件夹。
Platform Notes
Linux
Force Raw USB mode
卸载 btusb
内核模块:
sudo rmmod btusb
设置 BLUETOOTH_HCI_SOCKET_FORCE_USB
环境变量:
sudo BLUETOOTH_HCI_SOCKET_FORCE_USB=1 node <file>.js
FreeBSD
通过将 no-ubt.conf 进入 /usr/local/etc/devd/no-ubt.conf
并重新启动 devd(sudo service devd restart
).
卸载 ng_ubt
内核模块(如果已加载):
sudo kldunload ng_ubt
OS X
Disable CSR USB Driver
sudo kextunload -b com.apple.iokit.CSRBluetoothHostControllerUSBTransport
Disable Broadcom USB Driver
sudo kextunload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport
Windows
Force adapter USB VID and PID
设置 BLUETOOTH_HCI_SOCKET_USB_VID
和 BLUETOOTH_HCI_SOCKET_USB_PID
环境变量。
USB 设备 ID 示例:050d:065a:
set BLUETOOTH_HCI_SOCKET_USB_VID=0x050d
set BLUETOOTH_HCI_SOCKET_USB_PID=0x065a
node <file>.js
node-bluetooth-hci-socket
Bluetooth HCI socket binding for Node.js
NOTE: Currently only supports Linux, FreeBSD and Windows.
Prerequisites
NOTE: node-gyp
is only required if the npm cannot find binary for your OS version otherwise the binaries are prebuilt.
Linux
- Bluetooth 4.0 Adapter
Note: the node-usb dependency might fail install, this is ok, because it is an optional optional dependency. Installing libudev-dev
via your Linux distribution's package manager will resolve the problem.
Windows
This library needs raw USB access to a Bluetooth 4.0 USB adapter, as it needs to bypass the Windows Bluetooth stack.
A WinUSB driver is required, use Zadig tool to replace the driver for your adapter.
WARNING: This will make the adapter unavailable in Windows Bluetooth settings! To roll back to the original driver go to: Device Manager -> Open Device -> Update Driver
Note:
- that one should select "Delete the driver software for this device" as per Zadig instructions if the generation of the system restoral point by Zadig fails if one wishes to use restore system restoral point as an option.
Compatible Bluetooth 4.0 USB Adapter's
Name | USB VID | USB PID |
---|---|---|
BCM920702 Bluetooth 4.0 | 0x0a5c | 0x21e8 |
BCM920702 Bluetooth 4.0 | 0x0a5c | 0x21f1 |
BCM20702A0 Bluetooth 4.0 | 0x19ff | 0x0239 |
BCM20702A0 Bluetooth 4.0 | 0x0489 | 0xe07a |
BCM20702A0 Bluetooth 4.0 | 0x413c | 0x8143 |
CSR8510 A10 | 0x0a12 | 0x0001 |
Asus BT-400 | 0x0b05 | 0x17cb |
Intel Wireless Bluetooth 6235 | 0x8087 | 0x07da |
Intel Wireless Bluetooth 7260 | 0x8087 | 0x07dc |
Intel Wireless Bluetooth 7265 | 0x8087 | 0x0a2a |
Intel Wireless Bluetooth 8265 | 0x8087 | 0x0a2b |
Belkin BCM20702A0 | 0x050D | 0x065A |
Dell Precision 5530 | 0x8087 | 0x0025 |
Compatible Bluetooth 4.1 USB Adapter's
Name | USB VID | USB PID |
---|---|---|
BCM2045A0 Bluetooth 4.1 | 0x0a5c | 0x6412 |
Marvell AVASTAR | 0x1286 | 0x204C |
Install
npm install @abandonware/bluetooth-hci-socket
Usage
var BluetoothHciSocket = require('@abandonware/bluetooth-hci-socket');
Actions
Create
var bluetoothHciSocket = new BluetoothHciSocket();
Set Filter
var filter = new Buffer(14);
// ...
bluetoothHciSocket.setFilter(filter);
Note: setFilter
is not required if bindRaw
is used.
Bind
Raw Channel
bluetoothHciSocket.bindRaw([deviceId]); // optional deviceId (integer)
User Channel
bluetoothHciSocket.bindUser([deviceId]); // optional deviceId (integer)
Requires the device to be in the powered down state (sudo hciconfig hciX down
).
Control Channel
bluetoothHciSocket.bindControl();
Is Device Up
Query the device state.
var isDevUp = bluetoothHciSocket.isDevUp(); // returns: true or false
Note: must be called after bindRaw
.
Start/stop
Start or stop event handling:
bluetoothHciSocket.start();
// ...
bluetoothHciSocket.stop();
Note: must be called after bindRaw
or bindControl
.
Write
var data = new Buffer(/* ... */);
// ...
bluetoothHciSocket.write(data);
Note: must be called after bindRaw
or bindControl
.
Events
Data
bluetoothHciSocket.on('data', function(data) {
// data is a Buffer
// ...
});
Error
bluetoothHciSocket.on('error', function(error) {
// error is a Error
// ...
});
Examples
See examples folder for code examples.
Platform Notes
Linux
Force Raw USB mode
Unload btusb
kernel module:
sudo rmmod btusb
Set BLUETOOTH_HCI_SOCKET_FORCE_USB
environment variable:
sudo BLUETOOTH_HCI_SOCKET_FORCE_USB=1 node <file>.js
FreeBSD
Disable automatic loading of the default Bluetooth stack by putting no-ubt.conf into /usr/local/etc/devd/no-ubt.conf
and restarting devd (sudo service devd restart
).
Unload ng_ubt
kernel module if already loaded:
sudo kldunload ng_ubt
OS X
Disable CSR USB Driver
sudo kextunload -b com.apple.iokit.CSRBluetoothHostControllerUSBTransport
Disable Broadcom USB Driver
sudo kextunload -b com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport
Windows
Force adapter USB VID and PID
Set BLUETOOTH_HCI_SOCKET_USB_VID
and BLUETOOTH_HCI_SOCKET_USB_PID
environment variables.
Example for USB device id: 050d:065a:
set BLUETOOTH_HCI_SOCKET_USB_VID=0x050d
set BLUETOOTH_HCI_SOCKET_USB_PID=0x065a
node <file>.js