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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Функция 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 мА или вроде того), так что используйте эту функцию с умом или рискуете очень быстро разрядить батарею.

Примеры

См.также

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