Espruino:Справочник по API/Класс NRF/requestDevice(): различия между версиями
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Myagkij (обсуждение | вклад) (Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= ==Синтакс...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
(не показаны 4 промежуточные версии 2 участников) | |||
Строка 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 | <syntaxhighlight lang="javascript"> | ||
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: [ ... ] }) | |||
{{Примечание1|Поля 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"> | |||
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"> | |||
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"> | ||
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-соединения, когда закончите. | |||
{{Примечание1|Эта функция доступна только для [[NRF52]]-устройств (вроде [[Puck.js]], [[Pixl.js]], [[Bangle.js]] и [[MDBT42Q]]) и [[ESP32]]-плат.}} | |||
== Примеры == | == Примеры == | ||
Строка 29: | Строка 87: | ||
=См.также= | =См.также= | ||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 35: | Строка 93: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Espruino | {{Навигационная таблица/Портал/Espruino}} | ||
Текущая версия от 17:49, 12 июня 2023
Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.
Функция 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: [ ... ] })
Реализованы следующие фильтры:
- 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-соединения, когда закончите.
Примеры
См.также
Внешние ссылки