我查看了 BLE 规范,发现蓝牙 SIG 已经预定义了许多服务,比如心率。我只是想知道我是否可以自己定义服务?如果可以,有没有可用的例子?谢谢。
问问题
4587 次
2 回答
8
是的,完全可以自己定义服务。
服务和特征都由 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: onCBPeripheralManager
开始发布您的自定义服务。
使用 iOS 设备发布此服务后,您可以使用CBCentralManager类使用其他 iOS 设备或 Mac 扫描并连接到该服务。
于 2013-07-02T13:56:48.793 回答
3
这是一个演示应用程序,其中包含在 iOS 设备上设置您自己的蓝牙 LE 服务的示例:SimpleShare
您需要为您的应用服务生成一个唯一的 UUID。该站点将生成一个供您使用。
于 2014-01-14T08:48:45.790 回答