Espruino:Справочник по API/Класс NRF/setScan()

Материал из Онлайн справочника
Версия от 17:51, 12 июня 2023; Myagkij (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Функция NRF.setScan()[1]

Синтаксис

NRF.setScan(callback, options)

Параметры

  • callback – функция обратного вызова, где аргументом будет полученный пакет объявления, или undefined, чтобы остановить прослушку BLE-пакетов объявлений
  • options – опциональный объект в формате {filters: ...} (такой передается в качестве аргумента, например, функции NRF.requestDevice()) для фильтрации устройств

Возвращаемое значение

Описание

Останавливает/запускает прослушку BLE-пакетов объявлений в ближайшем диапазоне. Возвращает BluetoothDevice для каждого присланного пакета. По умолчанию это неактивное сканирование, так что пакеты с ответом на сканирование возвращены не будут (см. ниже).

// запускаем сканирование:
packets=10;
NRF.setScan(function(d) {
  packets--;
  if (packets<=0)
    NRF.setScan(); // останавливаем сканирование
  else
    console.log(d); // печатаем данные пакета в консоли
});

Каждый возвращенный объект BluetoothDevice будет выглядеть примерно вот так:

BluetoothDevice {
  "id": "aa:bb:cc:dd:ee:ff",           // адрес
  "rssi": -89,                         // мощность сигнала
  "services": [ "128bit-uuid", ... ],  // UUID сервисов 
                                       // (возможно, будет пусто)
  "data": new Uint8Array([ ... ]).buffer,  // объект ArrayBuffer 
                                           // с возвращенными данными
  "serviceData" : { "0123" : [ 1 ] }, // если в «data» данные сервиса, 
                                      // они будут находиться здесь
  "manufacturer" : 0x1234,  // если в «data» данные производителя,
                            // здесь будет 16-битный ID производителя 
  "manufacturerData" : [...],  // если в «data» данные производителя,
                               // они будут находиться здесь
  "name": "DeviceName"         // название устройства,
                               // рассылаемое в объявлениях
 }

Во втором аргументе options можно задать набор фильтров (более подробно о них читайте в описании функции NRF.requestDevice()), что позволит отфильтровать устройства, от которых вы хотите получить пакеты объявлений. Это позволяет сократить время обработки JavaScript-кода в местах, где много Bluetooth-объявлений. Например, чтобы искать лишь устройства с ID производителя 0x0590 (это ID устройств Espruino), можно воспользоваться вот таким кодом:

NRF.setScan(function(d) {
  console.log(d.manufacturerData);
}, { filters: [{ manufacturerData:{0x0590:{}} }] });

Кроме того, во втором аргументе можно задать active:true, чтобы сканирование было активным (у найденных устройств будет запрашиваться ответ на сканирование).

Примечание

BLE-пакеты объявлений могут прибывать очень быстро – даже быстрее, чем вы будете успевать печатать их в консоли. Лучше напечатать лишь несколько или воспользоваться функцией вроде NRF.findDevices(), которая будет сопоставлять список доступных устройств.

Примечание

При использовании setScan() режим приема данных будет включен постоянно. Это значительно увеличивает энергопотребление (12 мА или вроде того), так что используйте эту функцию с умом или рискуете очень быстро разрядить батарею.

Примеры

См.также

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