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

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


=<ref>[ www.espruino.com - ]</ref>=
=Функция NRF.findDevices()<ref>[https://www.espruino.com/Reference#t_l_NRF_findDevices www.espruino.com - NRF.findDevices]</ref>=


==Синтаксис==
==Синтаксис==


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript" enclose="div">
 
NRF.findDevices(callback, options)
</syntaxhighlight>
</syntaxhighlight>


==Параметры==
==Параметры==


 
* '''callback''' – функция, которая будет вызвана с получением пакетов объявлений (в виде объектов [https://www.espruino.com/Reference#BluetoothDevice BluetoothDevice]), или undefined, чтобы прекратить сканирование.
* '''options''' – время сканирования в миллисекундах (по умолчанию – 2000) или опциональный объект в формате {filters: ..., timeout : ..., active: bool} (такой передается функции [https://www.espruino.com/Reference#l_NRF_requestDevice NRF.requestDevice()]) для фильтрации устройств.


==Возвращаемое значение==
==Возвращаемое значение==
Строка 21: Строка 22:
==Описание==
==Описание==


Это вспомогательная функция, возвращающая список BLE-устройств, обнаруженных в диапазоне сканирования. Эта функция неявно использует NRF.setScan() и сопоставляет результаты.
Например, если написать следующее...
<syntaxhighlight lang="javascript" enclose="div">
NRF.findDevices(function(devices) {
  console.log(devices);
}, 1000);
</syntaxhighlight>
...то в консоли будет напечатано следующее:
<syntaxhighlight lang="javascript" enclose="div">
[
  BluetoothDevice {
    "id": "e7:e0:57:ad:36:a2 random",
    "rssi": -45,
    "services": [ "4567" ],
    "serviceData" : { "0123" : [ 1 ] },
    "manufacturerData" : [...],
    "data": new ArrayBuffer([ ... ]),
    "name": "Puck.js 36a2"
  },
  BluetoothDevice {
    "id": "c0:52:3f:50:42:c9 random",
    "rssi": -65,
    "data": new ArrayBuffer([ ... ]),
    "name": "Puck.js 8f57"
  }
]
</syntaxhighlight>
Более подробно о структуре возвращаемых данных читайте в описании функции [https://www.espruino.com/Reference#l_NRF_setScan NRF.setScan()].
Если вам нужно просканировать какие-то специфические устройства, то таймаут можно заменить на объект в формате {filters: ..., timeout : ..., active: bool} при помощи фильтров, о которых рассказывается в описании функции [https://www.espruino.com/Reference#l_NRF_requestDevice NRF.requestDevice()]. Например, для поиска Espruino-устройств по manufacturerData напишите следующее:
<syntaxhighlight lang="javascript" enclose="div">
NRF.findDevices(function(devices) {
  ...
}, {timeout : 2000, filters : [{ manufacturerData:{0x0590:{}} }] });
</syntaxhighlight>
Затем вы можете воспользоваться [https://www.espruino.com/Reference#l_BluetoothRemoteGATTServer_connect BluetoothDevice.gatt.connect()] на возвращенном устройстве, чтобы создать соединение.
Вы также можете воспользоваться [https://www.espruino.com/Reference#l_NRF_connect NRF.connect()], задав в аргументе лишь возвращенную строку id, что может пригодиться, если вам надо подключиться к конкретному устройству.
'''Примечание:''' При использовании findDevices() режим приема данных включится на 2000 миллисекунд (или даже дольше – в зависимости от того, какое значение вы укажете). Это очень энергоемкий процесс (12 мА или вроде того), так что используйте его с умом или рискуете очень быстро разрядить батарею.


'''Примечание:''' Поле '''data''' содержит данные последнего присланного пакета. Но пакетов может быть больше одного. Чтобы извлечь данные каждого пакета по отдельности, используйте вместо findDevices() функцию [https://www.espruino.com/Reference#l_NRF_setScan NRF.setScan()].


== Примеры ==
== Примеры ==

Версия от 16:21, 7 февраля 2021

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


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

Синтаксис

NRF.findDevices(callback, options)

Параметры

  • callback – функция, которая будет вызвана с получением пакетов объявлений (в виде объектов BluetoothDevice), или undefined, чтобы прекратить сканирование.
  • options – время сканирования в миллисекундах (по умолчанию – 2000) или опциональный объект в формате {filters: ..., timeout : ..., active: bool} (такой передается функции NRF.requestDevice()) для фильтрации устройств.

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

Описание

Это вспомогательная функция, возвращающая список BLE-устройств, обнаруженных в диапазоне сканирования. Эта функция неявно использует NRF.setScan() и сопоставляет результаты.

Например, если написать следующее...

NRF.findDevices(function(devices) {
  console.log(devices);
}, 1000);

...то в консоли будет напечатано следующее:

[
  BluetoothDevice {
    "id": "e7:e0:57:ad:36:a2 random",
    "rssi": -45,
    "services": [ "4567" ],
    "serviceData" : { "0123" : [ 1 ] },
    "manufacturerData" : [...],
    "data": new ArrayBuffer([ ... ]),
    "name": "Puck.js 36a2"
   },
  BluetoothDevice {
    "id": "c0:52:3f:50:42:c9 random",
    "rssi": -65,
    "data": new ArrayBuffer([ ... ]),
    "name": "Puck.js 8f57"
   }
 ]

Более подробно о структуре возвращаемых данных читайте в описании функции NRF.setScan().

Если вам нужно просканировать какие-то специфические устройства, то таймаут можно заменить на объект в формате {filters: ..., timeout : ..., active: bool} при помощи фильтров, о которых рассказывается в описании функции NRF.requestDevice(). Например, для поиска Espruino-устройств по manufacturerData напишите следующее:

NRF.findDevices(function(devices) {
  ...
}, {timeout : 2000, filters : [{ manufacturerData:{0x0590:{}} }] });

Затем вы можете воспользоваться BluetoothDevice.gatt.connect() на возвращенном устройстве, чтобы создать соединение.

Вы также можете воспользоваться NRF.connect(), задав в аргументе лишь возвращенную строку id, что может пригодиться, если вам надо подключиться к конкретному устройству.

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

Примечание: Поле data содержит данные последнего присланного пакета. Но пакетов может быть больше одного. Чтобы извлечь данные каждого пакета по отдельности, используйте вместо findDevices() функцию NRF.setScan().

Примеры

См.также

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