Espruino:Справочник по API/Класс NRF/requestDevice(): различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= ==Синтакс...»)
 
Нет описания правки
Строка 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-плат.

Примеры

См.также

Внешние ссылки