Espruino:Справочник по API/Класс NRF/requestDevice(): различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= ==Синтакс...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[ www.espruino.com - ]</ref>= | =Функция NRF.requestDevice()<ref>[https://www.espruino.com/Reference#t_l_NRF_requestDevice www.espruino.com - NRF.requestDevice]</ref>= | ||
==Синтаксис== | ==Синтаксис== | ||
<syntaxhighlight lang="javascript" enclose="div"> | <syntaxhighlight lang="javascript" enclose="div"> | ||
NRF.requestDevice(options) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Параметры== | ==Параметры== | ||
* '''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:{}}). Совпасть должны все. Совпадение по самим данным о производителе пока не поддерживается. | |||
== | <syntaxhighlight lang="javascript" enclose="div"> | ||
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) { ... }); | |||
</syntaxhighlight> | |||
Ниже – более полный пример, демонстрирующий как отправить данные другому Puck.js, чтобы включить его светодиод: | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
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("Готово!"); | |||
}); | |||
</syntaxhighlight> | |||
== | Или в чуть более сжатой форме с использованием стрелочных ES6-функций: | ||
<syntaxhighlight lang="javascript" enclose="div"> | |||
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("Готово!"); } ); | |||
</syntaxhighlight> | |||
Обратите внимание, что вам нужно будет отслеживать переменную gatt, чтобы вы могли отключиться от Bluetooth-соединения, когда закончите. | |||
'''Примечание:''' Эта функция доступна только для NRF52-устройств (вроде Puck.js, Pixl.js, Bangle.js и MDBT42Q) и ESP32-плат. | |||
== Примеры == | == Примеры == |
Версия от 16:43, 7 февраля 2021
Функция 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-плат.
Примеры
См.также
Внешние ссылки