Modul pusat node.js ble (Bluetooth Low Energy).
Ingin menerapkan periferal? Checkout Bleno
Catatan: MacOS / Mac OS X, Linux, FreeBSD dan Windows saat ini satu -satunya OS yang didukung. Platform lain dapat dikembangkan nanti.
libbluetooth-dev
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
Pastikan node
ada di jalur Anda, jika tidak, beberapa opsi:
nodejs
to node
: sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo yum install bluez bluez-libs bluez-libs-devel
Lihat Konfigurasi Pengembangan Intel Edison for Bluetooth LE (SMART)
Pastikan Anda memiliki GNU Make:
sudo pkg install gmake
Nonaktifkan pemuatan otomatis tumpukan Bluetooth default dengan memasukkan no-ubt.conf ke /usr/local/etc/devd/no-ubt.conf
dan restart devd ( sudo service devd restart
).
Bongkar modul kernel ng_ubt
jika sudah dimuat:
sudo kldunload ng_ubt
Pastikan Anda telah membaca dan menulis izin pada perangkat /dev/usb/*
yang sesuai dengan adaptor Bluetooth Anda.
Persyaratan Node-Gyp untuk Windows
Instal alat dan konfigurasi yang diperlukan menggunakan alat-alat Windows-Build Microsoft dari PowerShell atau CMD.exe yang ditinggikan (jalankan sebagai administrator).
npm install --global --production windows-build-tools
Prasyarat Node-Bluetooth-HCI-Socket
Lihat Panduan Pengaturan @Don di Bluetooth Le dengan Node.js dan Noble di Windows
Batas ini dikenakan oleh perangkat keras adaptor Bluetooth serta firmware.
Platform | |
---|---|
OS X 10.11 (El Capitan) | 6 |
Linux/Windows - Ketergantungan Adaptor | 5 (adaptor berbasis CSR) |
Beberapa adaptor tidak dapat terhubung ke periferal saat mereka sedang memindai (contoh di bawah). Anda akan mendapatkan pesan berikut saat mencoba untuk terhubung:
SENA UD-100 (Cambridge Silicon Radio, Ltd Bluetooth Dongle (Mode HCI)): Error: Command disallowed
Intel Dual Band Wireless-AC 7260 (Intel Corporation Wireless 7260 (Rev 73)): Error: Connection Rejected due to Limited Resources (0xd)
Anda harus berhenti memindai sebelum mencoba terhubung untuk menyelesaikan masalah ini.
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
Catatan: noble.state
harus poweredOn
sebelum pemindaian dimulai. noble.on('stateChange', callback(state));
dapat digunakan register untuk acara perubahan negara.
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
: Kirim Permintaan Tulis, Digunakan dengan Properti Karakteristik "Tulis"true
: Kirim Perintah Tulis, Digunakan dengan Properti Karakteristik "Tulis Tanpa Respons" characteristic . broadcast ( broadcast [ , callback ( error ) ] ) ; // broadcast is true|false
characteristic . subscribe ( [ callback ( error ) ] ) ;
'data'
saat periferal mengirimkan pemberitahuan atau indikasi 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 ) ) ;
Lihat dokumen Eventemitter Node.js untuk info lebih lanjut. di API.
state = < "unknown" | "resetting" | "unsupported" | "unauthorized" | "poweredOff" | "poweredOn" >
noble . on ( 'stateChange' , callback ( state ) ) ;
noble . on ( 'scanStart' , callback ) ;
Acara ini dipancarkan saat pemindaian dimulai atau jika aplikasi lain memungkinkan pemindaian atau mengubah pengaturan pemindaian.
noble . on ( 'scanStop' , callback ) ;
Acara ini dipancarkan saat pemindaian dihentikan atau jika aplikasi lain berhenti memindai.
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));
Catatan: Pada OS X alamat akan diatur ke 'tidak diketahui' jika perangkat belum terhubung sebelumnya.
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 ) ) ;
Dipancarkan ketika bacaan karakteristik telah selesai, hasil characteristic.read(...)
atau nilai karakteristik telah diperbarui oleh periferal melalui pemberitahuan atau indikasi - setelah diaktifkan dengan notify(true[, callback(error)])
.
characteristic . on ( 'data' , callback ( data , isNotification ) ) ;
characteristic . once ( 'read' , callback ( data , isNotification ) ) ; // legacy
Catatan: Nilai parameter Acara isNotification
mungkin undefined
tergantung pada dukungan platform. Parameter sudah usang setelah versi 1.8.1, dan tidak didukung saat di MacOS High Sierra dan kemudian.
Dipancarkan ketika penulisan karakteristik telah selesai, hasil dari characteristic.write(...)
.
characteristic . once ( 'write' , withoutResponse , callback ( ) ) ;
Dipancarkan ketika status siaran karakteristik berubah, hasil dari characteristic.broadcast(...)
.
characteristic . once ( 'broadcast' , callback ( state ) ) ;
Dipancarkan ketika status pemberitahuan karakteristik berubah, hasil dari characteristic.notify(...)
.
characteristic . once ( 'notify' , callback ( state ) ) ;
descriptor = {
uuid : '<uuid>'
} ;
characteristic . once ( 'descriptorsDiscover' , callback ( descriptors ) ) ;
descriptor . once ( 'valueRead' , data ) ;
descriptor . once ( 'valueWrite' ) ;
Jalankan perintah berikut:
sudo setcap cap_net_raw+eip $( eval readlink -f ` which node ` )
Ini memberikan hak istimewa node
biner cap_net_raw
, sehingga dapat memulai/menghentikan iklan ble.
Catatan: Perintah di atas mengharuskan setcap
untuk diinstal, dapat diinstal menggunakan yang berikut:
sudo apt-get install libcap2-bin
su -c 'yum install libcap2-bin'
hci0
digunakan secara default untuk menggantikan setel variabel lingkungan NOBLE_HCI_DEVICE_ID
ke nomor antarmuka.
Contoh, tentukan hci1
:
sudo NOBLE_HCI_DEVICE_ID=1 node < your file > .js
Secara default Noble menunggu untuk data iklan dan memindai data respons untuk setiap alamat Bluetooth. Jika perangkat Anda tidak menggunakan respons pemindaian, variabel lingkungan berikut dapat digunakan untuk memotongnya.
sudo NOBLE_REPORT_ALL_HCI_EVENTS=1 node < your file > .js
Secara default Noble akan merespons dengan kesalahan setiap kali pesan permintaan GATT diterima. Jika niat Anda adalah menggunakan bleno seiring dengan mulia, variabel lingkungan berikut dapat digunakan untuk memotong fungsionalitas ini. Catatan: Ini membutuhkan adaptor Bluetooth 4.1.
sudo NOBLE_MULTI_ROLE=1 node < your file > .js
Secara default, Noble akan memilih binding untuk berkomunikasi dengan perangkat Bluetooth tergantung pada platform Anda. Jika Anda lebih suka menentukan binding apa yang harus digunakan Noble:
var noble = require ( 'noble/with-bindings' ) ( require ( './my-custom-bindings' ) ) ;
Dukung kami dengan sumbangan bulanan dan bantu kami melanjutkan kegiatan kami. [Menjadi pendukung]
Jadilah sponsor dan dapatkan logo Anda di readme kami di GitHub dengan tautan ke situs Anda. [Menjadi sponsor]
Hak Cipta (C) 2015 Sandeep Mistry [email protected]
Izin dengan ini diberikan, gratis, kepada siapa pun yang mendapatkan salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menangani perangkat lunak tanpa pembatasan, termasuk tanpa batasan hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , menerbitkan, mendistribusikan, sublisense, dan/atau menjual salinan perangkat lunak, dan untuk mengizinkan orang -orang yang dilengkapi dengan perangkat lunak untuk melakukannya, tunduk pada kondisi berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus dimasukkan dalam semua salinan atau bagian substansial dari perangkat lunak.
Perangkat lunak ini disediakan "sebagaimana adanya", tanpa jaminan apa pun, tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan dapat diperjualbelikan, kebugaran untuk tujuan tertentu dan nonpringement. Dalam hal apa pun penulis atau pemegang hak cipta tidak akan bertanggung jawab atas klaim, kerusakan atau tanggung jawab lainnya, baik dalam tindakan kontrak, gugatan atau sebaliknya, timbul dari, di luar atau sehubungan dengan perangkat lunak atau penggunaan atau transaksi lain dalam PERANGKAT LUNAK.