iPhone核心蓝牙中央管理器向外设发送数据

14
我想将数据从iPhone发送到一个被发现并连接的蓝牙设备。 我参考了这个教程进行连接。 我不能像使用External Accessory框架那样向已连接的外部蓝牙设备发送数据。 我使用iPhone5,它拥有蓝牙4.0。
3个回答

22

在Core Bluetooth中,您需要使用特征进行通信。没有像外部配件框架中那样的标准基于流的API,我也不知道是否有任何开源库实现了这样的功能。

基本操作

周边设备 -> 中心设备:

  1. 中心设备订阅特征(使用通知或指示器)
  2. 当周边设备收到订阅回调时,就知道中心设备正在监听
  3. 周边设备更新特征
  4. 中心设备接收到特征更新通知

中心设备 -> 周边设备:

  1. 中心设备写入特征
  2. 周边设备接收到写入请求更新

实际可达到的速度取决于各种因素。使用指示器数据永远不会丢失(像TCP),但通知没有这样的保证(像UDP)。

更多信息

我建议您查看官方的Core Bluetooth编程指南并关注以下内容:

但更好的学习方法是全面阅读该指南。另外,还可以查看Apple的BTLE Transfer示例。


1
我已经检查了BTLE传输,但是没有从中央到外围设备发送数据的示例。 - TechFanatic
中央通过在外设上写特性来发送数据。 - allprog
@TechFanatic 更新了答案,描述了双向操作的基本方案。 - allprog
我在这里遇到了很大的问题。我无法让外围设备读取数据。我可以从P->C发送数据,但反之则不行。 - Julian F. Weinert
@Julian 你需要写下你发现的特征。有什么问题没有解决? - allprog
请查看我的问题:https://dev59.com/D3nZa4cB1Zd3GeqPnj6Q#20036688?noredirect=1#20036688 - Julian F. Weinert

5

如果我理解正确,您想让中央设备向您的外围设备发送数据。

为此,您可以使用以下方法:

[peripheral writeValue:dataPacket forCharacteristic:writeChar type:CBCharacteristicWithResponse]

CBPeripheralManager类中没有这样的API。 - thatzprem
1
Gilli 没有在 CBPeripheralManager 上调用 writeValue 方法,而是在具有该 API 的 CBPeripheral 上进行了调用。 - Tulsi Leathers
什么是writeChar? - Taimur Ajmal

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接