
โมดูลกลาง node.js (บลูทู ธ พลังงานต่ำ) โมดูลกลาง
ต้องการใช้อุปกรณ์ต่อพ่วงหรือไม่? ชำระเงิน Bleno
หมายเหตุ: MacOS / Mac OS X, Linux, FreeBSD และ Windows ปัจจุบันเป็น OSE ที่รองรับเท่านั้น แพลตฟอร์มอื่น ๆ อาจได้รับการพัฒนาในภายหลัง
libbluetooth-devsudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev ตรวจสอบให้แน่ใจว่า node อยู่บนเส้นทางของคุณหากไม่ใช่ตัวเลือกบางอย่าง:
nodejs ถึง node : sudo ln -s /usr/bin/nodejs /usr/bin/nodesudo yum install bluez bluez-libs bluez-libs-develดูกำหนดค่า Intel Edison สำหรับการพัฒนา Bluetooth LE (Smart)
ตรวจสอบให้แน่ใจว่าคุณมี gnu make:
sudo pkg install gmake ปิดใช้งานการโหลดอัตโนมัติของสแต็กบลูทู ธ เริ่มต้นโดยใส่ no-ubt.conf ลงใน /usr/local/etc/devd/no-ubt.conf และรีสตาร์ท devd ( sudo service devd restart )
ยกเลิกการโหลดโมดูลเคอร์เนล ng_ubt หากโหลดแล้ว:
sudo kldunload ng_ubt ตรวจสอบให้แน่ใจว่าคุณได้อ่านและเขียนสิทธิ์ในอุปกรณ์ /dev/usb/* ที่สอดคล้องกับอะแดปเตอร์บลูทู ธ ของคุณ
ข้อกำหนดของโหนด Gyp สำหรับ Windows
ติดตั้งเครื่องมือและการกำหนดค่าที่จำเป็นโดยใช้เครื่องมือสร้าง Windows-Build ของ Microsoft จาก PowerShell หรือ CMD.exe (เรียกใช้เป็นผู้ดูแลระบบ)
npm install --global --production windows-build-toolsข้อกำหนดเบื้องต้นของ Node-Bluetooth-HCI-Socket
ดูคู่มือการตั้งค่า @Don's บน Bluetooth le ด้วย node.js และ Noble บน Windows
ขีด จำกัด นี้ถูกกำหนดโดยฮาร์ดแวร์อะแดปเตอร์บลูทู ธ รวมถึงเฟิร์มแวร์
| แพลตฟอร์ม | |
|---|---|
| OS X 10.11 (El Capitan) | 6 |
| Linux/Windows - ขึ้นอยู่กับอะแดปเตอร์ | 5 (อะแดปเตอร์ที่ใช้ CSR) |
อะแดปเตอร์ BLE บางตัวไม่สามารถเชื่อมต่อกับอุปกรณ์ต่อพ่วงในขณะที่พวกเขากำลังสแกน (ตัวอย่างด้านล่าง) คุณจะได้รับข้อความต่อไปนี้เมื่อพยายามเชื่อมต่อ:
Sena UD-100 (Cambridge Silicon Radio, Ltd Bluetooth Dongle (โหมด 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|falsewithoutResponse :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 ) ) ;ดูเอกสาร eventemitter node.js สำหรับข้อมูลเพิ่มเติม บน 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 Binary cap_net_raw ดังนั้นจึงสามารถเริ่ม/หยุดโฆษณา BLE ได้
หมายเหตุ: คำสั่งด้านบนต้องติดตั้ง setcap สามารถติดตั้งได้โดยใช้ข้อมูลต่อไปนี้:
sudo apt-get install libcap2-binsu -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 หากความตั้งใจของคุณคือการใช้ Bleno ควบคู่กับ Noble ตัวแปรสภาพแวดล้อมต่อไปนี้สามารถใช้เพื่อข้ามฟังก์ชั่นนี้ หมายเหตุ: สิ่งนี้ต้องใช้อะแดปเตอร์บลูทู ธ 4.1
sudo NOBLE_MULTI_ROLE=1 node < your file > .jsโดยค่าเริ่มต้น Noble จะเลือกการเชื่อมโยงเพื่อสื่อสารกับอุปกรณ์บลูทู ธ ขึ้นอยู่กับแพลตฟอร์มของคุณ หากคุณต้องการระบุสิ่งที่การเชื่อมโยง Noble ควรใช้:
var noble = require ( 'noble/with-bindings' ) ( require ( './my-custom-bindings' ) ) ; สนับสนุนเราด้วยการบริจาครายเดือนและช่วยให้เราดำเนินกิจกรรมต่อไป [เป็นผู้สนับสนุน]
เป็นสปอนเซอร์และรับโลโก้ของคุณบน readme ของเราบน GitHub พร้อมลิงค์ไปยังเว็บไซต์ของคุณ [เป็นสปอนเซอร์]
ลิขสิทธิ์ (c) 2015 Sandeep Mistry [email protected]
ได้รับอนุญาตโดยไม่เสียค่าใช้จ่ายสำหรับบุคคลใด ๆ ที่ได้รับสำเนาซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") เพื่อจัดการในซอฟต์แวร์โดยไม่มีการ จำกัด รวมถึง แต่ไม่ จำกัด เฉพาะสิทธิ์ในการใช้คัดลอกแก้ไขผสาน เผยแพร่แจกจ่าย sublicense และ/หรือขายสำเนาของซอฟต์แวร์และอนุญาตให้บุคคลที่ซอฟต์แวร์ได้รับการตกแต่งให้ทำเช่นนั้นภายใต้เงื่อนไขดังต่อไปนี้:
ประกาศลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์มีให้ "ตามสภาพ" โดยไม่มีการรับประกันใด ๆ ไม่ว่าโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เฉพาะการรับประกันความสามารถในการค้าการออกกำลังกายสำหรับวัตถุประสงค์เฉพาะและการไม่เข้าร่วม ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดชอบต่อการเรียกร้องความเสียหายหรือความรับผิดอื่น ๆ ไม่ว่าจะเป็นการกระทำของสัญญาการละเมิดหรืออื่น ๆ ซอฟต์แวร์.