你能在BLE中提供自己的服务吗



我查看了BLE规范,发现蓝牙SIG预定义了许多服务,如心率。我只是想知道我是否可以自己定义服务?如果可以,有什么可用的例子吗?谢谢

是的,完全可以自己定义服务。

服务和特性都由UUID标识。例如,BLE服务页面列出了所有标准化服务和分配的UUID。

如您所见,心率服务使用0x180D,这是一个仅为标准化服务保留的16位缩写。定义自己的服务时,唯一的要求是使用128位长的UUID。

使用uuidgen(可在Mac OS X上使用)自行生成随机(唯一)UUID:

uuidgen
# example result: 94B01578-5603-4D5A-8DFF-9365A1C4AC93

您可以使用它来发布和标识自己的服务。这可以在你自己的自定义硬件上完成,也可以通过iOS上的软件完成(因为你提到了核心蓝牙)。

创建您的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设备发布此服务后,您可以使用CBCentralManager类,使用另一台iOS设备或Mac扫描并连接到该服务。

以下是演示应用程序,其中包含在iOS设备上设置自己的蓝牙LE服务的示例:SimpleShare

您需要生成一个UUID,该UUID对于您的应用程序的服务是唯一的。此网站将生成一个供您使用。

最新更新