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]
特此免費授予任何獲得此軟件副本和相關文檔文件(“軟件”)的人,以無限制處理該軟件,包括無限制,使用,複製,修改,合併的權利,發布,分發,分佈和/或出售該軟件的副本,並允許提供該軟件的人,但要遵守以下條件:
上述版權通知和此許可通知應包含在軟件的所有副本或大量部分中。
該軟件是“原樣”提供的,沒有任何形式的明示或暗示保證,包括但不限於適銷性,特定目的的適用性和非侵權的保證。 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE軟體.