node.js ble (Bluetooth 저에너지) 중앙 모듈.
주변 장치를 구현하고 싶습니까? 체크 아웃 블레노
참고 : MacOS / Mac OS X, Linux, FreeBSD 및 Windows는 현재 유일하게 지원되는 OS입니다. 다른 플랫폼은 나중에 개발 될 수 있습니다.
libbluetooth-dev
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
node
경로에 있는지 확인하십시오. 그렇지 않은 경우 몇 가지 옵션이 있습니다.
nodejs
to node
: sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo yum install bluez bluez-libs bluez-libs-devel
Bluetooth LE (SMART) 개발을위한 Intel Edison 구성을 참조하십시오
GNU를 만들 수 있는지 확인하십시오.
sudo pkg install gmake
no-ubt.conf를 /usr/local/etc/devd/no-ubt.conf
에 넣고 Devd를 다시 시작하여 기본 Bluetooth 스택의 자동로드를 비활성화합니다 ( sudo service devd restart
).
이미로드 된 경우 ng_ubt
커널 모듈을 언로드하십시오.
sudo kldunload ng_ubt
Bluetooth 어댑터에 해당하는 /dev/usb/*
장치에 대한 읽기 및 쓰기 권한이 있는지 확인하십시오.
Windows의 노드 집합 요구 사항
높은 PowerShell 또는 CMD.Exe (관리자로 실행)에서 Microsoft의 Windows-Build-Tools를 사용하여 필요한 도구 및 구성을 설치하십시오.
npm install --global --production windows-build-tools
Node-Bluetooth-Hci-Socket 전제 조건
node.js와 함께 Bluetooth Le에서 @Don의 설정 가이드 및 Windows의 Noble 참조
이 한도는 Bluetooth 어댑터 하드웨어 및 펌웨어에 의해 부과됩니다.
플랫폼 | |
---|---|
OS X 10.11 (El Capitan) | 6 |
Linux/Windows- 어댑터 종속 | 5 (CSR 기반 어댑터) |
일부 BLE 어댑터는 스캔하는 동안 주변 장치에 연결할 수 없습니다 (아래 예제). 연결하려고 할 때 다음과 같은 메시지를 받게됩니다.
Sena UD-100 (Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI Mode)) : Error: Command disallowed
인텔 듀얼 밴드 무선 -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은 광고 데이터와 각 Bluetooth 주소에 대한 응답 데이터를 모두 기다립니다. 장치가 스캔 응답을 사용하지 않으면 다음 환경 변수를 사용하여 우회 할 수 있습니다.
sudo NOBLE_REPORT_ALL_HCI_EVENTS=1 node < your file > .js
기본적으로 Noble은 GATT 요청 메시지가 수신 될 때마다 오류로 응답합니다. Noble과 함께 Bleno를 사용하려는 의도가 있다면 다음 환경 변수를 사용 하여이 기능을 우회 할 수 있습니다. 참고 : 여기에는 Bluetooth 4.1 어댑터가 필요합니다.
sudo NOBLE_MULTI_ROLE=1 node < your file > .js
기본적으로 Noble은 플랫폼에 따라 Bluetooth 장치와 통신하기 위해 바인딩을 선택합니다. Noble을 사용해야 할 바인딩을 지정하는 것을 선호하는 경우 :
var noble = require ( 'noble/with-bindings' ) ( require ( './my-custom-bindings' ) ) ;
매월 기부금으로 우리를 지원하고 활동을 계속할 수 있도록 도와주세요. [후원자가되기]
귀하의 사이트에 대한 링크를 통해 스폰서가되어 Github의 README에 로고를 받으십시오. [후원자가되기]
저작권 (C) 2015 Sandeep Mistry [email protected]
이에 따라이 소프트웨어 및 관련 문서 파일 ( "소프트웨어")의 사본을 얻는 사람에게 허가는 제한없이 소프트웨어를 처리 할 수있는 사람에게 무료로 제공됩니다. , 소프트웨어의 사본을 게시, 배포, 서브 리센스 및/또는 판매하고, 소프트웨어가 제공하도록하는 사람을 다음과 같은 조건에 따라 할 수 있도록합니다.
위의 저작권 통지 및이 권한 통지는 소프트웨어의 모든 사본 또는 실질적인 부분에 포함되어야합니다.
이 소프트웨어는 상업성, 특정 목적에 대한 적합성 및 비 침해에 대한 보증을 포함하여 명시 적 또는 묵시적 보증없이 "그대로"제공됩니다. 어떠한 경우에도 저자 또는 저작권 보유자는 계약, 불법 행위 또는 기타, 소프트웨어 또는 사용 또는 기타 거래와 관련하여 계약, 불법 행위 또는 기타의 행동에 관계없이 청구, 손해 또는 기타 책임에 대해 책임을지지 않아야합니다. 소프트웨어.