Espruino:Справочник по API/Класс NRF/setAdvertising()
Функция NRF.setAdvertising()[1]
Синтаксис
NRF.setAdvertising(data, options)
Параметры
- data – данные, которые будут рассылаться в объявлениях (в виде объекта). Более подробно см. ниже
- options – опциональный объект с настройками
Возвращаемое значение
Описание
Меняет данные, которые Espruino рассылает в объявлениях.
Эти данные могут быть в формате { UUID : data_as_byte_array }. В UUID должен быть задан ID Bluetooth-сервиса.
К примеру, чтобы вернуть данные о том, что заряд батареи составляет 95%, задайте следующее:
NRF.setAdvertising({
0x180F : [95]
});
Или же можно сообщить текущую температуру:
setInterval(function() {
NRF.setAdvertising({
0x1809 : [Math.round(E.getTemperature())]
});
}, 30000);
Кроме того, в аргументе data можно задать неформатированные данные объявления в виде массива. К примеру, чтобы разослать объявление о том, что вы являетесь маяком Eddystone, задайте следующее:
NRF.setAdvertising([0x03, // размер списка сервисов
0x03, // Параметр: список сервисов
0xAA, 0xFE, // ID маяка Eddystone
0x13, // размер данных сервиса
0x16, // данные сервиса
0xAA, 0xFE, // ID маяка Eddystone
0x10, // тип фрейма: URL
0xF8, // мощность сигнала
0x03, // https://
'g','o','o','.','g','l','/','B','3','J','0','O','c'],
{interval:100});
(Впрочем, для Eddystone мы посоветовали бы Espruino-библиотеку Eddystone).
Вы даже можете задать массив из массивов или объектов – в этом случае каждый пакет объявления будет использоваться по очереди. Например, чтобы ваше устройство рассылало в объявлении уровень заряда батареи и названия (одновременно Eddystone и iBeacon), задайте следующее:
NRF.setAdvertising([
{0x180F : [Puck.getBatteryPercentage()]}, // обычная рассылка,
// с процентным
// зарядом батареи
require("ble_ibeacon").get(...), // iBeacon
require("ble_eddystone").get(...), // Eddystone
], {interval:300});
Данные в аргументе options – это объект, содержащий следующее:
{
name: "Hello" // название устройства
showName: true/false // показывать ли полное название или ничего
discoverable: true/false // обычная обнаруживаемость
// или ограниченная
// (по умолчанию – ограниченная)
connectable: true/false // можно ли подключиться к устройству
// (по умолчанию – можно, т.е. «true»)
scannable : true/false // может ли устройство быть просканировано
// на предмет ответных пакетов сканирования
// (по умолчанию – может, т.е. «true»)
interval: 600 // интервал рассылки объявлений
// между 20 и 10000 миллисекундами
// (по умолчанию – 375 миллисекунд)
manufacturer: 0x0590 // если отправляются данные о производителе
// то здесь будет ID производителя
manufacturerData: [...] // если отправляются данные о производителе
// то здесь будет массив данных
}
Если задать в connectable и scannable значение false, это снизит энергопотребление до минимума, т.к. BLE-соединение уже не нужно будет прослушивать после отправки объявлений.
Например, чтобы задать название Puck.js без рассылки каких-либо других данных, можно просто воспользоваться следующей командой:
NRF.setAdvertising({},{name:"Hello"});
Вы также можете задать «данные о производителе», которые являются еще одной формой данных объявления. Официальные Espruino-устройства зарегистрированы под ID производителя 0x0590 (Pur3 Ltd) – вы можете использовать его для рассылки каких угодно данных, но мы рекомендуем JSON.
Например, если не задать в объявлении название устройства, вы можете задать в ID производителя Espruino до 24 байтов в JSON-формате:
var data = {a:1,b:2};
NRF.setAdvertising({},{
showName:false,
manufacturer:0x0590,
manufacturerData:JSON.stringify(data)
});
Если вы используете EspruinoHub, он автоматически расшифрует это в следующие MQTT-топики:
- /ble/advertise/ma:c_:_a:dd:re:ss/espruino -> {"a":10,"b":15}
- /ble/advertise/ma:c_:_a:dd:re:ss/a -> 1
- /ble/advertise/ma:c_:_a:dd:re:ss/b -> 2
Помните, что использование JSON ограничено 24 символами, так что старайтесь использовать максимально короткие названия полей и избегать чисел с плавающей точкой, которые могут стать очень большими после конвертации в строку.
Примеры
См.также
Внешние ссылки