Узел.
Хотите внедрить периферийные устройства? Оформление Блено
Примечание. MacOS / Mac OS X, Linux, FreeBSD и Windows в настоящее время являются единственным поддерживаемым OSES. Другие платформы могут быть разработаны позже.
libbluetooth-dev
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
Убедитесь, что node
находится на вашем пути, если это не так, некоторые варианты:
nodejs
к 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
).
Разгрузить модуль ядра ng_ubt
, если уже загружен:
sudo kldunload ng_ubt
Убедитесь, что у вас есть разрешения для чтения и записи на устройстве /dev/usb/*
, которое соответствует вашему адаптеру Bluetooth.
Требования к гипам узла для Windows
Установите требуемые инструменты и конфигурации, используя Tools Microsoft-Build-Build из повышенного PowerShell или Cmd.exe (запустите в качестве администратора).
npm install --global --production windows-build-tools
Узел Bluetooth-HCI-Socket Speciesties
Смотрите @Don's Guide на 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 (режим HCI)): Error: Command disallowed
Intel Dual-полос 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 ` )
Это предоставляет бинарные привилегии node
cap_net_raw
, поэтому он может запустить/остановить рекламу.
Примечание. Приведенная выше команда требует установки 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
По умолчанию Noble ожидает как данных о рекламе, так и данных отклика сканирования для каждого адреса Bluetooth. Если ваше устройство не использует отклик сканирования, для обхода его можно использовать следующую переменную среды.
sudo NOBLE_REPORT_ALL_HCI_EVENTS=1 node < your file > .js
По умолчанию Noble ответит ошибкой всякий раз, когда будет получено сообщение запроса GATT. Если ваше намерение состоит в том, чтобы использовать Bleno в тандеме с благородным, для обхода этой функциональности можно использовать следующую переменную среды. Примечание. Это требует адаптера Bluetooth 4.1.
sudo NOBLE_MULTI_ROLE=1 node < your file > .js
По умолчанию Noble выберет привязки для связи с устройствами Bluetooth в зависимости от вашей платформы. Если вы предпочитаете указать, какие привязки должны использовать Noble:
var noble = require ( 'noble/with-bindings' ) ( require ( './my-custom-bindings' ) ) ;
Поддержите нас ежемесячным пожертвованием и помогите нам продолжить нашу деятельность. [Станьте покровителем]
Станьте спонсором и получите свой логотип на нашем Readme на GitHub по ссылке на ваш сайт. [Станьте спонсором]
Copyright (C) 2015 Sandeep Mistry [email protected]
Настоящее разрешение предоставляется бесплатно любому лицу, получающему копию этого программного обеспечения и связанные с ними файлы документации («Программное обеспечение»), для работы в программном обеспечении без ограничений, включая, помимо прочего, права на использование, копирование, изменение, объединение , публиковать, распространять, сублиценс и/или продавать копии программного обеспечения и разрешить лицам, которым предоставлено программное обеспечение, при условии следующих условий:
Вышеуказанное уведомление об авторском праве и это уведомление о разрешении должно быть включено во все копии или существенные части программного обеспечения.
Программное обеспечение предоставляется «как есть», без гарантии любого рода, явного или подразумеваемого, включая, помимо прочего, гарантии товарной пригодности, пригодности для определенной цели и несоответствия. Ни в коем случае не будут нести ответственность авторов или владельцев авторских прав за любые претензии, ущерб или другую ответственность, будь то в действии контракта, деликте или иным образом, возникающим из или в связи с программным обеспечением или использования или других сделок в ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ.