0

我目前正在从事一个涉及与低功耗蓝牙标签和 iPhone 交互的项目。我想知道如何在 iPhone 上的蓝牙标签上注册一个按键。即当用户按下标签上的某个键时,iPhone 上的应用程序应该能够识别并执行某个功能(比如发出声音)。

我使用的是德州仪器 2540 标签,并参考了他们的示例代码。在他们的代码中,

必须启用按键通知。当在标签上按下一个键时,相应的服务和特征 UUID 值会更新。在应用程序中,“didUpdateValueForCharacteristic”委托方法被调用并且可以调用适当的函数。

然而,设计蓝牙标签的公司坚持要在 iPhone 应用程序上创建一个服务(iPhone 充当蓝牙服务器),并且蓝牙标签会提醒充当客户端的 iPhone。

我的代码摘录是

定义 Key_Press_Notification_Service 0xFFE0
定义 Key_Press_Notification_Characterisitc 0xFFEA

-(void) enableButtons:(CBPeripheral *)p
{
[自我通知:Key_Press_Notification_Service characteristicUUID:Key_Press_Notification_CharacterisitcUUID p:p on:YES];
}

// -(void) notification... 方法

// - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic.. 方法


你能帮我看看这是否可能吗?以及如何注册从蓝牙标签按下的键以在 iPhone 上识别?

4

2 回答 2

3

曼茹阿,

拥有外围设备和 forCharacteristic:characteristic 后,您只需要启用通知:

// begin notification for the characteristic.
[peripheral setNotifyValue:YES forCharacteristic:characteristic];

然后,您使用您的 CBPeripheralDelegate 接收更新:

- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
于 2012-05-22T19:56:13.253 回答
1

这看起来像http://developer.bluetooth.org/gatt/profiles/Pages/ProfileViewer.aspx?u=org.bluetooth.profile.find_me.xml中描述的“FindMe 配置文件”场景。“Find me locator”(蓝牙标签)和“Find me target”(iPhone)每个都应该有一个“Immediate Alert”服务。http://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.immediate_alert.xml中描述了即时警报服务行为。

当在您的标签上按下一个键时,它应该对驻留在 iPhone 上的警报级别特性执行写入操作。

或者,您可以制作自己的自定义配置文件。即,标签上的某些特性会在按下某个键时发出通知。然后,您的 iPhone 应用程序将订阅此特性并收到任何按键通知。自定义配置文件当然意味着您的标签不会与蓝牙智能就绪设备开箱即用兼容。

于 2012-05-16T07:17:52.040 回答