Espruino:Справочник по API/Класс NRF/setScan(): различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{Espruino/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[ www.espruino.com - ]</ref>= ==Синтакс...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[ www.espruino.com - ]</ref>= | =Функция NRF.setScan()<ref>[https://www.espruino.com/Reference#t_l_NRF_setScan www.espruino.com - NRF.setScan]</ref>= | ||
==Синтаксис== | ==Синтаксис== | ||
<syntaxhighlight lang="javascript" enclose="div"> | <syntaxhighlight lang="javascript" enclose="div"> | ||
NRF.setScan(callback, options) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Параметры== | ==Параметры== | ||
* '''callback''' – функция обратного вызова, где аргументом будет полученный пакет объявления, или undefined, чтобы остановить прослушку BLE-пакетов объявлений | |||
* '''options''' – опциональный объект в формате {filters: ...} (такой передается в качестве аргумента, например, функции [https://www.espruino.com/Reference#l_NRF_requestDevice NRF.requestDevice()]) для фильтрации устройств | |||
==Возвращаемое значение== | ==Возвращаемое значение== | ||
Строка 21: | Строка 22: | ||
==Описание== | ==Описание== | ||
Останавливает/запускает прослушку BLE-пакетов объявлений в ближайшем диапазоне. Возвращает [https://www.espruino.com/Reference#BluetoothDevice BluetoothDevice] для каждого присланного пакета. По умолчанию это неактивное сканирование, так что пакеты с ответом на сканирование возвращены не будут (см. ниже). | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
// запускаем сканирование: | |||
packets=10; | |||
NRF.setScan(function(d) { | |||
packets--; | |||
if (packets<=0) | |||
NRF.setScan(); // останавливаем сканирование | |||
else | |||
console.log(d); // печатаем данные пакета в консоли | |||
}); | |||
</syntaxhighlight> | |||
Каждый возвращенный объект [https://www.espruino.com/Reference#BluetoothDevice BluetoothDevice] будет выглядеть примерно вот так: | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
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" // название устройства, | |||
// рассылаемое в объявлениях | |||
} | |||
</syntaxhighlight> | |||
Во втором аргументе options можно задать набор фильтров (более подробно о них читайте в описании функции [https://www.espruino.com/Reference#l_NRF_requestDevice NRF.requestDevice()]), что позволит отфильтровать устройства, от которых вы хотите получить пакеты объявлений. Это позволяет сократить время обработки JavaScript-кода в местах, где много Bluetooth-объявлений. Например, чтобы искать лишь устройства с ID производителя 0x0590 (это ID устройств Espruino), можно воспользоваться вот таким кодом: | |||
<syntaxhighlight lang="javascript" enclose="div"> | |||
NRF.setScan(function(d) { | |||
console.log(d.manufacturerData); | |||
}, { filters: [{ manufacturerData:{0x0590:{}} }] }); | |||
</syntaxhighlight> | |||
Кроме того, во втором аргументе можно задать '''active:true''', чтобы сканирование было активным (у найденных устройств будет запрашиваться ответ на сканирование). | |||
'''Примечание:''' BLE-пакеты объявлений могут прибывать очень быстро – даже быстрее, чем вы будете успевать печатать их в консоли. Лучше напечатать лишь несколько или воспользоваться функцией вроде NRF.findDevices(), которая будет сопоставлять список доступных устройств. | |||
'''Примечание:''' При использовании setScan() режим приема данных будет включен постоянно. Это значительно увеличивает энергопотребление (12 мА или вроде того), так что используйте эту функцию с умом или рискуете очень быстро разрядить батарею. | |||
== Примеры == | == Примеры == |
Версия от 17:27, 7 февраля 2021
Функция 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 мА или вроде того), так что используйте эту функцию с умом или рискуете очень быстро разрядить батарею.
Примеры
См.также
Внешние ссылки