Espruino:Справочник по API/Класс NRF/requestDevice(): различия между версиями
Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки |
Myagkij (обсуждение | вклад) Нет описания правки |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 28: | Строка 28: | ||
* '''active''' – здесь задается, выполнить ли активное сканирование (с запросом пакетов-ответов на сканирование от всех найденных устройств) или нет. Например, NRF.requestDevice({ active:true, filters: [ ... ] }) | * '''active''' – здесь задается, выполнить ли активное сканирование (с запросом пакетов-ответов на сканирование от всех найденных устройств) или нет. Например, NRF.requestDevice({ active:true, filters: [ ... ] }) | ||
{{Примечание1|Поля timeout и active не входят в стандарт Web Bluetooth.}} | |||
Реализованы следующие фильтры: | Реализованы следующие фильтры: | ||
Строка 79: | Строка 79: | ||
Обратите внимание, что вам нужно будет отслеживать переменную gatt, чтобы вы могли отключиться от Bluetooth-соединения, когда закончите. | Обратите внимание, что вам нужно будет отслеживать переменную gatt, чтобы вы могли отключиться от Bluetooth-соединения, когда закончите. | ||
{{Примечание1|Эта функция доступна только для [[NRF52]]-устройств (вроде [[Puck.js]], [[Pixl.js]], [[Bangle.js]] и [[MDBT42Q]]) и [[ESP32]]-плат.}} | |||
== Примеры == | == Примеры == | ||
Строка 87: | Строка 87: | ||
=См.также= | =См.также= | ||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 93: | Строка 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-соединения, когда закончите.
Примеры
См.также
Внешние ссылки