Espruino:Справочник по API/Класс NRF/requestDevice()
Функция NRF.requestDevice()[1]
Синтаксис
NRF.requestDevice(options)
Параметры
- options – настройки для фильтрации устройства, которым надо воспользоваться
Возвращаемое значение
Промис (Promise) с состоянием «выполнено успешно» (или «выполнено с ошибкой») после попытки соединения.
Описание
Ищет устройства, подходящие под фильтры, заданные в аргументе options. Поскольку UI среди фильтров нет, Espruino выберет ПЕРВОЕ найденное устройство или вызовет catch().
В объекте options могут быть следующие поля:
- filters – список фильтров, которым должно соответствовать искомое устройство (см. ниже)
- timeout – максимальная продолжительность сканирования в миллисекундах (при обнаружении совпадения сканирование будет остановлено). Например, NRF.requestDevice({ timeout:2000, filters: [ ... ] })
- active – здесь задается, выполнить ли активное сканирование (с запросом пакетов-ответов на сканирование от всех найденных устройств) или нет. Например, NRF.requestDevice({ active:true, filters: [ ... ] })
Примечание: Поля timeout и active не входят в стандарт Web Bluetooth.
Реализованы следующие фильтры:
- services – список сервисов в виде строк (совпасть должны все). 128-битные сервисы должны иметь формат '01230123-0123-0123-0123-012301230123'.
- name – точное название устройства.
- namePrefix – начальные символы в названии устройства.
- id – точный адрес устройства (id:"e9:53:86:09:89:99 random"). Этот фильтр специфичен для Espruino и не является частью стандарта Web Bluetooth.
- serviceData – объект, содержащий характеристики сервиса (serviceData:{"1809":{}}). Совпасть должны все характеристики. Совпадение по самим данным сервиса пока не поддерживается.
- manufacturerData – объект, содержащий UUID производителя (manufacturerData:{0x0590:{}}). Совпасть должны все. Совпадение по самим данным о производителе пока не поддерживается.
NRF.requestDevice({ filters: [{ namePrefix: 'Puck.js' }] }).then(function(device) { ... });
// или
NRF.requestDevice({ filters: [{ services: ['1823'] }] }).then(function(device) { ... });
// или
NRF.requestDevice({ filters: [{ manufacturerData:{0x0590:{}} }] }).then(function(device) { ... });
Ниже – более полный пример, демонстрирующий как отправить данные другому Puck.js, чтобы включить его светодиод:
var gatt;
NRF.requestDevice({ filters: [{ namePrefix: 'Puck.js' }] }).then(function(device) {
return device.gatt.connect();
}).then(function(g) {
gatt = g;
return gatt.getPrimaryService("6e400001-b5a3-f393-e0a9-e50e24dcca9e");
}).then(function(service) {
return service.getCharacteristic("6e400002-b5a3-f393-e0a9-e50e24dcca9e");
}).then(function(characteristic) {
return characteristic.writeValue("LED1.set()\n");
}).then(function() {
gatt.disconnect();
console.log("Готово!");
});
Или в чуть более сжатой форме с использованием стрелочных ES6-функций:
var gatt;
NRF.requestDevice({ filters: [{ namePrefix: 'Puck.js' }]}).then(
device => device.gatt.connect()).then(
g => (gatt=g).getPrimaryService("6e400001-b5a3-f393-e0a9-e50e24dcca9e")).then(
service => service.getCharacteristic("6e400002-b5a3-f393-e0a9-e50e24dcca9e")).then(
characteristic => characteristic.writeValue("LED1.reset()\n")).then(
() => { gatt.disconnect(); console.log("Готово!"); } );
Обратите внимание, что вам нужно будет отслеживать переменную gatt, чтобы вы могли отключиться от Bluetooth-соединения, когда закончите.
Примечание: Эта функция доступна только для NRF52-устройств (вроде Puck.js, Pixl.js, Bangle.js и MDBT42Q) и ESP32-плат.
Примеры
См.также
Внешние ссылки