A node.js ble (Bluetooth niedriger Energie) zentrales Modul.
Möchten Sie einen Peripherieur implementieren? Kasse Bleno
Hinweis: MacOS / Mac OS X, Linux, FreeBSD und Windows sind derzeit die einzigen unterstützten OSS. Andere Plattformen können später entwickelt werden.
libbluetooth-dev
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
Stellen Sie sicher, dass node
auf Ihrem Weg ist, wenn dies nicht der Fall ist, einige Optionen:
nodejs
zum node
: sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo yum install bluez bluez-libs bluez-libs-devel
Siehe Intel Edison für die Entwicklung von Bluetooth LE (Smart) konfigurieren
Stellen Sie sicher, dass Sie GNU machen:
sudo pkg install gmake
Deaktivieren Sie die automatische Belastung des Standard-Bluetooth-Stacks, indem Sie no-ubr.conf in /usr/local/etc/devd/no-ubt.conf
eingeben und Devd ( sudo service devd restart
) neu starten.
Entladen Sie ng_ubt
-Kernel -Modul, falls bereits geladen:
sudo kldunload ng_ubt
Stellen Sie sicher, dass Sie Berechtigungen auf dem /dev/usb/*
-Gerät gelesen und schreiben, das Ihrem Bluetooth -Adapter entspricht.
Node-GYP-Anforderungen für Windows
Installieren Sie die erforderlichen Tools und Konfigurationen mithilfe der Windows-Build-Tools von Microsoft aus einem erhöhten PowerShell oder CMD.exe (als Administrator ausgeführt).
npm install --global --production windows-build-tools
Node-Bluetooth-Hci-Socket-Voraussetzungen
Siehe @Dons Setup -Handbuch auf Bluetooth LE mit Node.js und Noble unter Windows
Diese Grenze wird von der Bluetooth -Adapter -Hardware sowie der Firmware auferlegt.
Plattform | |
---|---|
OS X 10.11 (El Capitan) | 6 |
Linux/Windows - Adapterabhängig | 5 (CSR -basierter Adapter) |
Einige BLE -Adapter können während des Scannens nicht mit einem Peripheriegeräten verbunden werden (Beispiele unten). Sie erhalten die folgenden Nachrichten, wenn Sie versuchen, eine Verbindung herzustellen:
Sena UD-100 (Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI-Modus)): Error: Command disallowed
Intel Dual Band Wireless-AC 7260 (Intel Corporation Wireless 7260 (Offb 73)): Error: Connection Rejected due to Limited Resources (0xd)
Sie müssen aufhören zu scannen, bevor Sie versuchen, eine Verbindung herzustellen, um dieses Problem zu lösen.
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
Hinweis: noble.state
muss poweredOn
sein, bevor das Scannen begonnen wird. noble.on('stateChange', callback(state));
Kann verwendet werden, Register für staatliche Änderungsereignisse.
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
: Senden Sie eine Schreibanforderung, die mit der charakteristischen Eigenschaft "Schreiben" verwendet wirdtrue
: Senden Sie einen Schreibbefehl, der mit der charakteristischen Eigenschaft "Schreiben ohne Antwort" verwendet wird characteristic . broadcast ( broadcast [ , callback ( error ) ] ) ; // broadcast is true|false
characteristic . subscribe ( [ callback ( error ) ] ) ;
'data'
aus, wenn periphere Benachrichtigung oder Anzeige sendet 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 ) ) ;
Weitere Informationen finden Sie unter node.js eventemitter -Dokumenten. auf APIs.
state = < "unknown" | "resetting" | "unsupported" | "unauthorized" | "poweredOff" | "poweredOn" >
noble . on ( 'stateChange' , callback ( state ) ) ;
noble . on ( 'scanStart' , callback ) ;
Das Ereignis wird beim Starten des Scannens ausgestrahlt oder wenn eine andere Anwendung das Scannen oder Änderungen der Scaneinstellungen ermöglicht.
noble . on ( 'scanStop' , callback ) ;
Das Ereignis wird beim Absetzen des Scannens oder wenn eine andere Anwendung eingestellt wird, wenn eine andere Anwendung eingestellt wird.
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));
Hinweis: Auf OS X wird die Adresse auf "Unbekannt" gesetzt, wenn das Gerät zuvor nicht angeschlossen wurde.
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 ) ) ;
Emittiert, wenn die charakteristische Lektüre abgeschlossen ist, das Ergebnis von characteristic.read(...)
oder charakteristischer Wert wurde durch Peripherie durch Benachrichtigung oder Anzeige aktualisiert - nachdem er mit notify(true[, callback(error)])
.
characteristic . on ( 'data' , callback ( data , isNotification ) ) ;
characteristic . once ( 'read' , callback ( data , isNotification ) ) ; // legacy
HINWEIS: Der Parameterwert isNotification
-Ereignisses kann je nach Plattformunterstützung undefined
sein. Der Parameter ist nach Version 1.8.1 veraltet und wird bei MacOS High Sierra und später nicht unterstützt.
Emittiert, wenn die charakteristische Schreiben abgeschlossen ist, Ergebnis von characteristic.write(...)
.
characteristic . once ( 'write' , withoutResponse , callback ( ) ) ;
Emittiert, wenn charakteristische Sendungszustand ändert, Ergebnis von characteristic.broadcast(...)
.
characteristic . once ( 'broadcast' , callback ( state ) ) ;
Emittiert, wenn sich der charakteristische Benachrichtigungszustand ändert, Ergebnis von characteristic.notify(...)
.
characteristic . once ( 'notify' , callback ( state ) ) ;
descriptor = {
uuid : '<uuid>'
} ;
characteristic . once ( 'descriptorsDiscover' , callback ( descriptors ) ) ;
descriptor . once ( 'valueRead' , data ) ;
descriptor . once ( 'valueWrite' ) ;
Führen Sie den folgenden Befehl aus:
sudo setcap cap_net_raw+eip $( eval readlink -f ` which node ` )
Dies gewährt die node
Binary cap_net_raw
-Privilegien, sodass die Werbung starten/stoppen kann.
HINWEIS: Der obige Befehl muss setcap
installiert werden. Er kann mit Folgendem installiert werden:
sudo apt-get install libcap2-bin
su -c 'yum install libcap2-bin'
hci0
wird standardmäßig verwendet, um die Umgebungsvariable NOBLE_HCI_DEVICE_ID
auf die Schnittstellennummer zu überschreiben.
Beispiel geben hci1
an:
sudo NOBLE_HCI_DEVICE_ID=1 node < your file > .js
Standardmäßig wartet Noble für jede Bluetooth -Adresse sowohl auf die Anzeigendaten als auch auf Scan -Antwortdaten. Wenn Ihr Gerät keine Scanantwort verwendet, kann die folgende Umgebungsvariable verwendet werden, um es zu umgehen.
sudo NOBLE_REPORT_ALL_HCI_EVENTS=1 node < your file > .js
Standardmäßig antwortet Noble mit einem Fehler, wenn eine GATT -Anforderungsnachricht empfangen wird. Wenn Sie beabsichtigt sind, Bleno zusammen mit Noble zu verwenden, kann die folgende Umgebungsvariable verwendet werden, um diese Funktionalität zu umgehen. Hinweis: Dies erfordert einen Bluetooth 4.1 -Adapter.
sudo NOBLE_MULTI_ROLE=1 node < your file > .js
Standardmäßig wählt Noble Bindungen aus, um je nach Plattform mit Bluetooth -Geräten zu kommunizieren. Wenn Sie es vorziehen, angeben, welche Bindungen, die Edle verwenden sollten, verwenden sollen:
var noble = require ( 'noble/with-bindings' ) ( require ( './my-custom-bindings' ) ) ;
Unterstützen Sie uns mit einer monatlichen Spende und helfen Sie uns, unsere Aktivitäten fortzusetzen. [Backer werden]
Werden Sie Sponsor und holen Sie sich Ihr Logo auf unserem Readme auf GitHub mit einem Link zu Ihrer Website. [Sponsor werden]
Copyright (c) 2015 Sandeep Mistry [email protected]
Die Erlaubnis wird hiermit kostenlos an eine Person erteilt, die eine Kopie dieser Software und zugehörigen Dokumentationsdateien ("Software") erhält, um die Software ohne Einschränkung zu behandeln, einschließlich ohne Einschränkung der Rechte zu verwenden, zu kopieren, zu modifizieren, zu verschmelzen, verschmelzen , veröffentlichen, vertreiben, unterlizenzieren und/oder Kopien der Software verkaufen und Personen, denen die Software dazu bereitgestellt wird, unter den folgenden Bedingungen ermöglicht:
Die oben genannte Copyright -Mitteilung und diese Erlaubnisbekanntmachung müssen in alle Kopien oder wesentlichen Teile der Software enthalten sein.
Die Software wird "wie es ist" ohne Garantie jeglicher Art, ausdrücklich oder stillschweigend bereitgestellt, einschließlich, aber nicht beschränkt auf die Gewährleistung der Handelsfähigkeit, die Eignung für einen bestimmten Zweck und die Nichtverletzung. In keinem Fall haftet die Autoren oder Urheberrechtsinhaber für Ansprüche, Schäden oder andere Haftungen, sei es in einer Vertragsklage, unerlaubter Handlung oder anderweitig, aus oder im Zusammenhang mit der Software oder anderen Geschäften in der SOFTWARE.