Un módulo central de nodo.js ble (Bluetooth bajo energía).
¿Quieres implementar un periférico? Vista de Bleno
Nota: MacOS / Mac OS X, Linux, FreeBSD y Windows son actualmente los únicos sistemas operativos compatibles. Se pueden desarrollar otras plataformas más adelante.
libbluetooth-dev
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
Asegúrese de que node
esté en su camino, si no es así, algunas opciones:
nodejs
al node
: sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo yum install bluez bluez-libs bluez-libs-devel
Consulte Configurar Intel Edison para el desarrollo Bluetooth LE (Smart)
Asegúrate de que GNU haga:
sudo pkg install gmake
Desactive la carga automática de la pila Bluetooth predeterminada colocando no-ubt.conf en /usr/local/etc/devd/no-ubt.conf
y reiniciando devd ( sudo service devd restart
).
Descargar módulo ng_ubt
kernel si ya ya está cargado:
sudo kldunload ng_ubt
Asegúrese de tener permisos de lectura y escritura en el dispositivo /dev/usb/*
que corresponde a su adaptador Bluetooth.
Requisitos de nodo-ging para Windows
Instale las herramientas y configuraciones requeridas utilizando las herramientas de Windows-Build de Microsoft desde un elevado PowerShell o CMD.exe (ejecute como administrador).
npm install --global --production windows-build-tools
Requisitos previos de nódico-bluetooth-hci-socket
Consulte la guía de configuración de @Don en Bluetooth LE con Node.js y Noble en Windows
Este límite es impuesto por el hardware del adaptador Bluetooth, así como su firmware.
Plataforma | |
---|---|
OS X 10.11 (El Capitan) | 6 |
Linux/Windows - Dependiente del adaptador | 5 (adaptador basado en CSR) |
Algunos adaptadores BLE no pueden conectarse a un periférico mientras están escaneando (ejemplos a continuación). Recibirá los siguientes mensajes al intentar conectarse:
Sena UD-100 (Cambridge Silicon Radio, Ltd Bluetooth Dongle (modo HCI)): Error: Command disallowed
Intel Dual Band Wireless-AC 7260 (Intel Corporation Wireless 7260 (Rev 73)): Error: Connection Rejected due to Limited Resources (0xd)
Debe dejar de escanear antes de intentar conectarse para resolver este problema.
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
Nota: noble.state
debe ser poweredOn
antes de que se inicie el escaneo. noble.on('stateChange', callback(state));
Se puede utilizar Registro para eventos de cambio de estado.
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
: Envíe una solicitud de escritura, utilizada con propiedad característica de "escribir"true
: Envíe un comando de escritura, utilizado con una propiedad característica "Escribir sin respuesta" 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 ) ) ;
Consulte Node.js EventMitter Docs para obtener más información. en API's.
state = < "unknown" | "resetting" | "unsupported" | "unauthorized" | "poweredOff" | "poweredOn" >
noble . on ( 'stateChange' , callback ( state ) ) ;
noble . on ( 'scanStart' , callback ) ;
El evento se emite cuando se inicia el escaneo o si otra aplicación permite escanear o cambiar la configuración de escaneo.
noble . on ( 'scanStop' , callback ) ;
El evento se emite cuando se detiene el escaneo o si otra aplicación detiene el escaneo.
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));
Nota: En OS X, la dirección se establecerá en 'Desconocido' si el dispositivo no se ha conectado previamente.
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 ) ) ;
Emitido cuando se ha completado la lectura característica, el resultado de characteristic.read(...)
o el valor característico ha sido actualizado por periférico mediante notificación o indicación, después de haber sido habilitado con notify(true[, callback(error)])
.
characteristic . on ( 'data' , callback ( data , isNotification ) ) ;
characteristic . once ( 'read' , callback ( data , isNotification ) ) ; // legacy
NOTA: El valor del parámetro del evento isNotification
puede estar undefined
según el soporte de la plataforma. El parámetro está en desuso después de la versión 1.8.1, y no es compatible cuando se encuentra en MacOS High Sierra y más tarde.
Emitido cuando la escritura característica se ha completado, resultado de characteristic.write(...)
.
characteristic . once ( 'write' , withoutResponse , callback ( ) ) ;
Emitido cuando el estado de transmisión característica cambia, resultado de characteristic.broadcast(...)
.
characteristic . once ( 'broadcast' , callback ( state ) ) ;
Emitido cuando el estado de notificación característica cambia, el resultado de characteristic.notify(...)
.
characteristic . once ( 'notify' , callback ( state ) ) ;
descriptor = {
uuid : '<uuid>'
} ;
characteristic . once ( 'descriptorsDiscover' , callback ( descriptors ) ) ;
descriptor . once ( 'valueRead' , data ) ;
descriptor . once ( 'valueWrite' ) ;
Ejecute el siguiente comando:
sudo setcap cap_net_raw+eip $( eval readlink -f ` which node ` )
Esto otorga los privilegios cap_net_raw
binarios node
, para que pueda iniciar/detener la publicidad BLE.
Nota: El comando anterior requiere que se instale setcap
, se puede instalar utilizando lo siguiente:
sudo apt-get install libcap2-bin
su -c 'yum install libcap2-bin'
hci0
se utiliza de forma predeterminada para anular Establecer la variable de entorno NOBLE_HCI_DEVICE_ID
en el número de interfaz.
Ejemplo, especifique hci1
:
sudo NOBLE_HCI_DEVICE_ID=1 node < your file > .js
Por defecto, Noble espera tanto los datos de la publicidad como los datos de respuesta de escaneo para cada dirección Bluetooth. Si su dispositivo no utiliza la respuesta de escaneo, la siguiente variable de entorno se puede usar para evitarlo.
sudo NOBLE_REPORT_ALL_HCI_EVENTS=1 node < your file > .js
Por defecto, Noble responderá con un error cada vez que se reciba un mensaje de solicitud de GATT. Si su intención es usar Bleno en conjunto con Noble, la siguiente variable de entorno se puede usar para evitar esta funcionalidad. Nota: Esto requiere un adaptador Bluetooth 4.1.
sudo NOBLE_MULTI_ROLE=1 node < your file > .js
Por defecto, Noble seleccionará enlaces para comunicarse con dispositivos Bluetooth dependiendo de su plataforma. Si prefiere especificar qué enlaces Noble debe usar:
var noble = require ( 'noble/with-bindings' ) ( require ( './my-custom-bindings' ) ) ;
Apóyanos con una donación mensual y ayúdanos a continuar nuestras actividades. [Conviértete en un patrocinador]
Conviértase en patrocinador y obtenga su logotipo en nuestro Readme en GitHub con un enlace a su sitio. [Convertirse en patrocinador]
Copyright (c) 2015 Sandeep Mistry [email protected]
El permiso se otorga, de forma gratuita, a cualquier persona que obtenga una copia de este software y archivos de documentación asociados (el "software"), para tratar el software sin restricción, incluidos los derechos de usar, copiar, modificar, modificar, modificar, fusionar , publique, distribuya, sublicence y venda copias del software, y para permitir a las personas a las que se proporciona el software para hacerlo, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o porciones sustanciales del software.
El software se proporciona "tal cual", sin garantía de ningún tipo, expresa o implícita, incluidas, entre otros, las garantías de comerciabilidad, idoneidad para un propósito particular y no infracción. En ningún caso los autores o titulares de derechos de autor serán responsables de cualquier reclamo, daños u otra responsabilidad, ya sea en una acción de contrato, agravio o de otro tipo, derivado de o en relación con el software o el uso u otros tratos en el SOFTWARE.