Node.js ble (Bluetooth Low Energy) وحدة مركزية.
تريد تنفيذ طرفي؟ الخروج بلينو
ملاحظة: تعد MacOS / MAC OS X و Linux و FreeBSD و Windows حاليًا من العناصر المدعومة الوحيدة. قد يتم تطوير منصات أخرى لاحقًا.
libbluetooth-dev
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
تأكد من أن node
في طريقك ، إذا لم يكن كذلك ، بعض الخيارات:
nodejs
symlink إلى node
: sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo yum install bluez bluez-libs bluez-libs-devel
انظر تكوين Intel Edison لتطوير Bluetooth LE (Smart)
تأكد من أن لديك GNU:
sudo pkg install gmake
تعطيل التحميل التلقائي لمكدس Bluetooth الافتراضي عن طريق وضع no-ubt.conf في /usr/local/etc/devd/no-ubt.conf
وإعادة تشغيل devd ( sudo service devd restart
).
قم بإلغاء تحميل وحدة kernel ng_ubt
إذا تم تحميلها بالفعل:
sudo kldunload ng_ubt
تأكد من أنك قد قمت بقراءة وكتابة أذونات على جهاز /dev/usb/*
الذي يتوافق مع محول Bluetooth الخاص بك.
متطلبات Node-GYP لنظام التشغيل Windows
قم بتثبيت الأدوات والتكوينات المطلوبة باستخدام أدوات Microsoft Windows-Build من PowerShell المرتفع أو cmd.exe (تشغيل كمسؤول).
npm install --global --production windows-build-tools
Node-Bluetooth-HCI Socket المتطلبات
انظر دليل إعداد @Don's على Bluetooth LE مع Node.js و Noble على Windows
يتم فرض هذا الحد على أجهزة محول Bluetooth وكذلك البرامج الثابتة.
منصة | |
---|---|
OS X 10.11 (El Capitan) | 6 |
Linux/Windows - يعتمد المحول | 5 (محول قائم على المسؤولية الاجتماعية للشركات) |
لا يمكن لبعض محولات BLE الاتصال بمحيطية أثناء المسح (أمثلة أدناه). ستحصل على الرسائل التالية عند محاولة الاتصال:
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)
تحتاج إلى إيقاف المسح قبل محاولة الاتصال من أجل حل هذه المشكلة.
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 ` )
هذا يمنح امتيازات cap_net_raw
node
، بحيث يمكن أن تبدأ/إيقاف الإعلان.
ملاحظة: يتطلب الأمر أعلاه تثبيت 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
بشكل افتراضي ، ينتظر نوبل لكل من بيانات الإعلان وفحص بيانات الاستجابة لكل عنوان Bluetooth. إذا لم يستخدم جهازك استجابة المسح الضوئي ، فيمكن استخدام متغير البيئة التالي لتجاوزه.
sudo NOBLE_REPORT_ALL_HCI_EVENTS=1 node < your file > .js
بشكل افتراضي ، سوف يستجيب نوبل بخطأ عند استلام رسالة طلب GATT. إذا كانت نيتك هي استخدام Bleno بالترادف مع Noble ، فيمكن استخدام متغير البيئة التالي لتجاوز هذه الوظيفة. ملاحظة: يتطلب هذا محول Bluetooth 4.1.
sudo NOBLE_MULTI_ROLE=1 node < your file > .js
بشكل افتراضي ، سيختار نوبل روابط للتواصل مع أجهزة Bluetooth اعتمادًا على النظام الأساسي الخاص بك. إذا كنت تفضل تحديد الروابط التي يجب أن تستخدمها نوبل:
var noble = require ( 'noble/with-bindings' ) ( require ( './my-custom-bindings' ) ) ;
دعمنا بتبرع شهري ومساعدتنا على مواصلة أنشطتنا. [كن مؤيدًا]
كن راعياً واحصل على شعارك على ReadMe على Github مع رابط لموقعك. [كن راعياً]
حقوق الطبع والنشر (C) 2015 Sandeep Mistry [email protected]
يتم منح الإذن بموجب هذا ، مجانًا ، لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة ("البرنامج") ، للتعامل في البرنامج دون تقييد ، بما في ذلك على سبيل المثال لا الحصر حقوق استخدام ، نسخ ، تعديل ، دمج أو نشر نسخ وتوزيعها و/أو بيعها و/أو بيع نسخ من البرامج ، والسماح للأشخاص الذين يتم تقديم البرنامج لهم للقيام بذلك ، مع مراعاة الشروط التالية:
يجب إدراج إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو" ، دون أي ضمان من أي نوع ، صريح أو ضمني ، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق واللياقة لغرض معين وعدم الانفجار. لا يجوز بأي حال من الأحوال أن يتحمل المؤلفون أو حاملي حقوق الطبع والنشر مسؤولية أي مطالبة أو أضرار أو مسؤولية أخرى ، سواء في إجراء عقد أو أضرار أو غير ذلك ، ناشئة عن البرامج أو خارجها أو الاستخدام أو غيرها برمجة.