Espruino:Справочник по API/Класс NRF/setServices(): различия между версиями
Нет описания правки |
Myagkij (обсуждение | вклад) Нет описания правки |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 93: | Строка 93: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
{{Примечание1|В UUID характеристик и сервисов можно задавать целые числа в диапазоне от 0 до 0xFFFF, строки в формате "ABCD" или строки в формате "ABCDABCD-ABCD-ABCD-ABCD-ABCDABCDABCD".}} | |||
Аргумент options может иметь следующий формат: | Аргумент options может иметь следующий формат: | ||
Строка 110: | Строка 110: | ||
Чтобы включить BLE HID, в настройке hid нужно задать массив c дескриптором отчета HID. Проще всего это сделать с помощью модуля ble_hid_controls или ble_hid_keyboard. | Чтобы включить BLE HID, в настройке hid нужно задать массив c дескриптором отчета HID. Проще всего это сделать с помощью модуля ble_hid_controls или ble_hid_keyboard. | ||
{{Примечание1|Если просто создать сервис, это еще не значит, что данные о нем будут рассылаться в объявлениях. Во-первых, для этого устройство должно подключиться, а во-вторых, UUID, которые нужно разослать в объявлениях, нужно задать в поле advertise во втором аргументе options. К примеру, код ниже создаст и начнет рассылать в объявлениях данные о сервисе сердцебиения.}} | |||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
Строка 127: | Строка 127: | ||
Если вам обязательно нужно задать два или более 128-битных UUID, вам нужно будет задать собственные пакеты объявлений с неформатированными данными с помощью функции [https://www.espruino.com/Reference#l_NRF_setAdvertising NRF.setAdvertising()]. | Если вам обязательно нужно задать два или более 128-битных UUID, вам нужно будет задать собственные пакеты объявлений с неформатированными данными с помощью функции [https://www.espruino.com/Reference#l_NRF_setAdvertising NRF.setAdvertising()]. | ||
{{Примечание1|Сервисы на Espruino-устройстве можно модифицировать, только если к нему не подключено других устройств, т.к. это требует перезапуска стека Bluetooth. Кроме того, iOS-устройства кэшируют список сервисов, так что приложения вроде nRF Connect могут некорректно показывать старые сервисы даже после того, как вы их модифицировали. Чтобы исправить это, отключите и снова включите Bluetooth на своем iOS-устройстве или воспользуйтесь nRF Connect на Android-устройстве.}} | |||
{{Примечание1|Не все комбинации настроек безопасности корректны. Вот корректные варианты: encrypted, encrypted + mitm, lesc, signed, signed + mitm. Более подробно читайте в описании функции [https://www.espruino.com/Reference#l_NRF_setSecurity NRF.setSecurity()].}} | |||
== Примеры == | == Примеры == | ||
Строка 137: | Строка 137: | ||
=См.также= | =См.также= | ||
=Внешние ссылки= | =Внешние ссылки= | ||
Строка 143: | Строка 143: | ||
<references /> | <references /> | ||
{{Навигационная таблица/Espruino | {{Навигационная таблица/Портал/Espruino}} | ||
Текущая версия от 17:53, 12 июня 2023
Функция NRF.setServices()[1]
Синтаксис
NRF.setServices(data, options)
Параметры
- data – сервис (и характеристики), данные о которых будут рассылаться в объявлениях
- options – опциональный объект с настройками
Возвращаемое значение
Описание
Меняет названия и настройки сервисов и характеристик, которые Espruino рассылает в объявлениях.
Если вы хотите поменять значение характеристики, вам нужна не эта функция, а NRF.updateServices().
Чтобы показать информацию характеристики ABDC сервиса BCDE, можно сделать вот так:
NRF.setServices({
0xBCDE : {
0xABCD : {
value : "Привет",
readable : true
}
}
});
Или, например, чтобы управлять тремя светодиодами при помощи записи в характеристику чисел от 0 до 7, можно сделать вот так (evt.data – это ArrayBuffer):
NRF.setServices({
0xBCDE : {
0xABCD : {
writable : true,
onWrite : function(evt) {
digitalWrite([LED3,LED2,LED1], evt.data[0]);
}
}
}
});
Вы можете задать множество разных настроек:
NRF.setServices({
0xBCDE : {
0xABCD : {
value : "Привет", // опционально
maxLen : 5, // опционально (или размер исходного значения)
broadcast : false, // опционально (по умолчанию «false»)
readable : true, // опционально (по умолчанию «false»)
writable : true, // опционально (по умолчанию «false»)
notify : true, // опционально (по умолчанию «false»)
indicate : true, // опционально (по умолчанию «false»)
description: "My Characteristic", // опционально
// по умолчанию «null»
security: { // опционально, см. описание NRF.setSecurity()
read: { // опционально
encrypted: false, // опционально (по умолчанию «false»)
mitm: false, // опционально (по умолчанию «false»)
lesc: false, // опционально (по умолчанию «false»)
signed: false // опционально (по умолчанию «false»)
},
write: { // опционально
encrypted: true, // опционально (по умолчанию «false»)
mitm: false, // опционально (по умолчанию «false»)
lesc: false, // опционально (по умолчанию «false»)
signed: false // опционально (по умолчанию «false»)
}
},
onWrite : function(evt) { // опционально
console.log("Got ", evt.data); // объект ArrayBuffer
}
}
// можно задать больше характеристик
}
// можно задать больше сервисов
});
Аргумент options может иметь следующий формат:
NRF.setServices(undefined, {
hid : new Uint8Array(...), // опционально (по умолчанию «undefined»)
// включает поддержку BLE HID
uart : true, // опционально (по умолчанию «true»),
// включает поддержку BLE UART
advertise: [ '180D' ] // опционально; список UUID сервисов,
// которые надо разослать в объявлениях
});
Чтобы включить BLE HID, в настройке hid нужно задать массив c дескриптором отчета HID. Проще всего это сделать с помощью модуля ble_hid_controls или ble_hid_keyboard.
NRF.setServices({
0x180D: { // сердцебиение
0x2A37: { // измерение сердцебиения
notify: true,
value : [0x06, heartrate],
}
}
}, { advertise: [ '180D' ] });
В списке UUID для рассылки можно задавать 128-битные UUID, но это может выдать исключение DATA_SIZE, потому что в BLE-пакете объявления недостаточно места для 128-битного UART-идентификатора (и, соответственно, для заданного вами UUID). В этом случае вы можете задать в options настройку uart:false после поля advertise, чтобы отключить UART, но тогда вы не сможете подключиться к консоли Puck.js по Bluetooth.
Если вам обязательно нужно задать два или более 128-битных UUID, вам нужно будет задать собственные пакеты объявлений с неформатированными данными с помощью функции NRF.setAdvertising().
Примеры
См.также
Внешние ссылки