node.js ble(蓝牙低能)中央模块。
想实现外围吗?结帐Bleno
注意: MacOS / Mac OS X,Linux,FreeBSD和Windows当前是唯一受支持的OS。其他平台可以在以后开发。
libbluetooth-dev
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
确保node
在您的路径上,如果不是,则有些选择:
nodejs
到node
: sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo yum install bluez bluez-libs bluez-libs-devel
有关蓝牙LE(智能)开发的配置Intel Edison
确保您拥有GNU MAKE:
sudo pkg install gmake
通过将no-ubt.conf放入/usr/local/etc/devd/no-ubt.conf
和Restarting Devd( sudo service devd restart
)中,禁用默认蓝牙堆栈的自动加载。
卸载ng_ubt
内核模块如果已经加载:
sudo kldunload ng_ubt
确保您已经在与蓝牙适配器相对应的/dev/usb/*
设备上读写权限。
Windows的节点GYP要求
使用Microsoft的Windows-Build-Tools安装所需的工具和配置。
npm install --global --production windows-build-tools
节点蓝牙-HCI插座先决条件
请参阅bluetooth le上的node.js上的 @don的设置指南,在窗口上贵族
蓝牙适配器硬件以及固件施加了此限制。
平台 | |
---|---|
OS X 10.11(El Capitan) | 6 |
Linux/Windows-适配器依赖 | 5(基于CSR的适配器) |
某些BLE适配器在扫描时无法连接到外围设备(以下示例)。尝试连接时,您将收到以下消息:
SENA UD-100(Cambridge Silicon Radio,Ltd蓝牙加密狗(HCI模式)): Error: Command disallowed
Intel Dual Band Wireless-AC 7260(Intel Corporation Wireless 7260(Rev 73)): Error: Connection Rejected due to Limited Resources (0xd)
您需要在尝试连接之前停止扫描以解决此问题。
npm install noble
var noble = require ( 'noble' ) ;
noble . startScanning ( ) ; // any service UUID, no duplicates
noble . startScanning ( [ ] , true ) ; // any service UUID, allow duplicates
var serviceUUIDs = [ "<service UUID 1>" , ... ] ; // default: [] => all
var allowDuplicates = < false | true > ; // default: false
noble.startScanning(serviceUUIDs, allowDuplicates[, callback(error)]); // particular UUID's
注意: noble.state
必须在启动扫描之前是poweredOn
。 noble.on('stateChange', callback(state));
可以使用注册进行状态变更事件。
noble . stopScanning ( ) ;
peripheral . connect ( [ callback ( error ) ] ) ;
peripheral . disconnect ( [ callback ( error ) ] ) ;
peripheral . updateRssi ( [ callback ( error , rssi ) ] ) ;
peripheral . discoverServices ( ) ; // any service UUID
var serviceUUIDs = [ "<service UUID 1>" , ... ] ;
peripheral . discoverServices ( serviceUUIDs [ , callback ( error , services ) ] ) ; // particular UUID's
peripheral . discoverAllServicesAndCharacteristics ( [ callback ( error , services , characteristics ) ] ) ;
var serviceUUIDs = [ "<service UUID 1>" , ... ] ;
var characteristicUUIDs = [ "<characteristic UUID 1>" , ... ] ;
peripheral . discoverSomeServicesAndCharacteristics ( serviceUUIDs , characteristicUUIDs , [ callback ( error , services , characteristics ) ) ;
service . discoverIncludedServices ( ) ; // any service UUID
var serviceUUIDs = [ "<service UUID 1>" , ... ] ;
service . discoverIncludedServices ( serviceUUIDs [ , callback ( error , includedServiceUuids ) ] ) ; // particular UUID's
service . discoverCharacteristics ( ) // any characteristic UUID
var characteristicUUIDs = [ "<characteristic UUID 1>" , ... ] ;
service . discoverCharacteristics ( characteristicUUIDs [ , callback ( error , characteristics ) ] ) ; // particular UUID's
characteristic . read ( [ callback ( error , data ) ] ) ;
characteristic . write ( data , withoutResponse [ , callback ( error ) ] ) ; // data is a buffer, withoutResponse is true|false
withoutResponse
:false
:发送写入请求,与“写”特征属性一起使用true
:发送一个写入命令,与“写入无响应”特征属性一起使用 characteristic . broadcast ( broadcast [ , callback ( error ) ] ) ; // broadcast is true|false
characteristic . subscribe ( [ callback ( error ) ] ) ;
'data'
事件时,当周围发送通知或指示时 characteristic . unsubscribe ( [ callback ( error ) ] ) ;
characteristic . discoverDescriptors ( [ callback ( error , descriptors ) ] ) ;
descriptor . readValue ( [ callback ( error , data ) ] ) ;
descriptor . writeValue ( data [ , callback ( error ) ] ) ; // data is a buffer
peripheral . readHandle ( handle , callback ( error , data ) ) ;
peripheral . writeHandle ( handle , data , withoutResponse , callback ( error ) ) ;
有关更多信息,请参见Node.js EventEmitter文档。在API上。
state = < "unknown" | "resetting" | "unsupported" | "unauthorized" | "poweredOff" | "poweredOn" >
noble . on ( 'stateChange' , callback ( state ) ) ;
noble . on ( 'scanStart' , callback ) ;
启动扫描时或其他应用程序启用扫描或更改扫描设置时会发出事件。
noble . on ( 'scanStop' , callback ) ;
停止扫描或其他应用程序停止扫描时,该事件是发出的。
peripheral = {
id : "<id>" ,
address : "<BT address" > , // Bluetooth Address of device, or 'unknown' if not known
addressType : "<BT address type>" , // Bluetooth Address type (public, random), or 'unknown' if not known
connectable : < connectable > , // true or false, or undefined if not known
advertisement: {
localName : " < name > ",
txPowerLevel: <int>,
serviceUuids: [" < service UUID > ", ...],
serviceSolicitationUuid: [" < service solicitation UUID > ", ...],
manufacturerData: <Buffer>,
serviceData: [
{
uuid: " < service UUID > "
data: <Buffer>
},
...
]
},
rssi: <rssi>
};
noble.on('discover', callback(peripheral));
注意:在OS X上,如果以前未连接设备,则将设置为“未知”。
noble . on ( 'warning' , callback ( message ) ) ;
peripheral . once ( 'connect' , callback ) ;
peripheral . once ( 'disconnect' , callback ) ;
peripheral . once ( 'rssiUpdate' , callback ( rssi ) ) ;
peripheral . once ( 'servicesDiscover' , callback ( services ) ) ;
service . once ( 'includedServicesDiscover' , callback ( includedServiceUuids ) ) ;
characteristic = {
uuid : "<uuid>" ,
// properties: 'broadcast', 'read', 'writeWithoutResponse', 'write', 'notify', 'indicate', 'authenticatedSignedWrites', 'extendedProperties'
properties : [ ... ]
} ;
service . once ( 'characteristicsDiscover' , callback ( characteristics ) ) ;
在特征读取完成后发出的characteristic.read(...)
或特征值已通过通知或指示进行了外围更新 - 已通过notify(true[, callback(error)])
启用后。
characteristic . on ( 'data' , callback ( data , isNotification ) ) ;
characteristic . once ( 'read' , callback ( data , isNotification ) ) ; // legacy
注意: isNotification
事件参数值可能undefined
平台支持。该参数在版本1.8.1之后被弃用,并且在MacOS High Sierra和更高版本上不支持该参数。
当特征写入完成时,发出的是characteristic.write(...)
的结果。
characteristic . once ( 'write' , withoutResponse , callback ( ) ) ;
当特征广播状态变化时,发出的是characteristic.broadcast(...)
。
characteristic . once ( 'broadcast' , callback ( state ) ) ;
当特征通知状态发生变化时,发出的characteristic.notify(...)
的结果。
characteristic . once ( 'notify' , callback ( state ) ) ;
descriptor = {
uuid : '<uuid>'
} ;
characteristic . once ( 'descriptorsDiscover' , callback ( descriptors ) ) ;
descriptor . once ( 'valueRead' , data ) ;
descriptor . once ( 'valueWrite' ) ;
运行以下命令:
sudo setcap cap_net_raw+eip $( eval readlink -f ` which node ` )
这会授予node
二进制cap_net_raw
特权,因此可以启动/停止广告。
注意:上面的命令需要安装setcap
,可以使用以下内容安装:
sudo apt-get install libcap2-bin
su -c 'yum install libcap2-bin'
默认情况下, hci0
用于覆盖将接口号设置为NOBLE_HCI_DEVICE_ID
环境变量。
例如,指定hci1
:
sudo NOBLE_HCI_DEVICE_ID=1 node < your file > .js
默认情况下,Noble等待每个蓝牙地址的广告数据和扫描响应数据。如果您的设备不使用扫描响应,则可以使用以下环境变量绕过它。
sudo NOBLE_REPORT_ALL_HCI_EVENTS=1 node < your file > .js
默认情况下,每当收到GATT请求消息时,Noble都会出现错误。如果您打算将Bleno与Noble同时使用,则可以使用以下环境变量绕过此功能。注意:这需要一个蓝牙4.1适配器。
sudo NOBLE_MULTI_ROLE=1 node < your file > .js
默认情况下,Noble将根据您的平台选择绑定以与蓝牙设备进行通信。如果您希望指定哪些绑定贵族应使用:
var noble = require ( 'noble/with-bindings' ) ( require ( './my-custom-bindings' ) ) ;
每月捐款支持我们,并帮助我们继续我们的活动。 [成为支持者]
成为赞助商,并在Github上获得徽标,并在Github上使用指向您网站的链接。 [成为赞助商]
版权(C)2015 Sandeep Mistry [email protected]
特此免费授予任何获得此软件副本和相关文档文件(“软件”)的人,以无限制处理该软件,包括无限制,使用,复制,修改,合并的权利,发布,分发,分布和/或出售该软件的副本,并允许提供该软件的人,但要遵守以下条件:
上述版权通知和此许可通知应包含在软件的所有副本或大量部分中。
该软件是“原样”提供的,没有任何形式的明示或暗示保证,包括但不限于适销性,特定目的的适用性和非侵权的保证。在任何情况下,作者或版权持有人均不应对任何索赔,损害赔偿或其他责任责任,无论是在合同,侵权或其他方面的诉讼中,与软件或与软件或使用或其他交易有关的诉讼或其他责任软件。