Я просмотрел спецификацию BLE и обнаружил, что Bluetooth SIG предопределил ряд служб, таких как частота сердечных сокращений. Мне просто интересно, могу ли я сам определить службу? Если можно, есть ли какой-нибудь пример? Спасибо.
Можете ли вы придумать свой собственный сервис в BLE?
Ответы (2)
да, вполне возможно определить службы самостоятельно.
Услуги и характеристики идентифицируются UUID. Например, на странице BLE Services перечислены все стандартизированные службы и назначенные UUID.
Как видите, сервисы сердечного ритма используют 0x180D
, 16-битную короткую форму, зарезервированную только для стандартизированных сервисов. Единственным требованием при определении собственной службы является использование 128-битного длинного UUID.
Используйте uuidgen
(доступно в Mac OS X), чтобы самостоятельно сгенерировать случайный (уникальный) UUID:
uuidgen
# example result: 94B01578-5603-4D5A-8DFF-9365A1C4AC93
Вы можете использовать это для публикации и идентификации вашего собственного сервиса. Это можно сделать либо на собственном оборудовании, либо с помощью программного обеспечения на iOS (поскольку вы упоминаете core-bluetooth).
Создайте свой CBMutableService
:
CBUUID *serviceUUID = [CBUUID UUIDWithString:@"94B01578-5603-4D5A-8DFF-9365A1C4AC93"];
CBMutableService *myService = [[CBMutableService alloc] initWithType:serviceUUID primary:YES];
// add some characteristics, also identified by your own custom UUIDs.
Наконец, см. addService: & startAdvertising: в CBPeripheralManager
, чтобы начать публикацию вашего пользовательского сервиса.
После публикации этой службы с помощью устройства iOS вы можете сканировать и подключаться к этой службе с помощью другого устройства iOS или Mac, используя CBCentralManager.
Вот демонстрационное приложение с примером настройки собственной службы Bluetooth LE на устройстве iOS: SimpleShare
Вам необходимо сгенерировать UUID, уникальный для службы вашего приложения. Этот сайт создаст его для вас.