5

我正在开发一个带有蓝牙 LE 外围设备的 iOS 应用程序。我似乎无法解决的一个步骤是如何将数据从我的应用程序实际传输到外围设备,反之亦然。

到目前为止,我构建的是一个测试应用程序,它可以连接到我的示例蓝牙外围设备,并读取它的所有服务/特征/描述符。它可以切换给定特征的通知,并写入给定特征。这只是“向外围设备发送 n 个字节,并从外围设备接收 m 个字节”的最后一步,我似乎无法弄清楚。

查看外部附件框架(如果 Apple 真的给我这个项目的 MFi 批准,我会使用它),它们在给定会话上为您提供输入和输出流以与附件通信,但 CoreBluetooth 不存在这样的对象。

这仅仅是 Apple 对 CoreBluetooth 功能的疏忽吗?还是我只需要开发自己的蓝牙服务配置文件来处理进出外围设备的数据流入/流出?

4

3 回答 3

3

LE 从根本上设计为与这些基于 GATT 的配置文件一起工作,这些配置文件适用于监控传感器,而不是数据流。虽然 LE 确实允许为自定义协议打开额外的 L2CAP 流,但 Apple 的 CoreBluetooth 不提供这样做的访问权限。

于 2012-09-08T05:46:36.567 回答
3

您可以构建具有私有服务和特性的自定义配置文件,并让它像 SSP 一样工作;这就是我使用 BLE 模块从某些传感器获取数据到我的应用程序的方式。我购买的模块(Microchip 的 RN-4020)已经有一个专门为此定制的配置文件,称为 MLDP(Microchip 低能耗数据配置文件)。

我在我的 iOS 应用程序中获取数据的方式是订阅私有特征,从而在值更新时得到通知。到目前为止,它运行良好,根据 Microchip 的说法,数据速率可以高达 20 kbps(我没有测试它的极限,因为我不需要太多的速度)。这是 Microchip 产品页面的链接:http: //www.microchip.com/wwwproducts/Devices.aspx? product=RN4020

祝你好运!

于 2015-01-30T17:17:58.157 回答
2

您可以使用 bluetooth.org 'Immediate Alert Service' uuid=1802 和特性 uuid=2A06 和 property=write_no_response 从 iPhone 向外围设备发送一个字节值。外围设备必须经过编程才能对发送的数据进行操作。例如,您可以使用 iPhone 应用程序上的按钮发送一个十六进制地址,该地址会导致外围设备上的一个或多个端口引脚打开或关闭。虽然这没有按预期使用警报服务,但它确实提供了一种简单的方法来测试到外围设备的数据传输。可以使用相同的过程来发送类似于串行数据流的顺序数据字节。我还没有尝试发送更复杂的数据流。write_no_response 不会向应用程序提供关于外设是否接收到数据的任何反馈。

IOS TemperatureSensor.xproj 是用于从外围设备读取温度数据的代码示例。OSX HealthThermometerClient.xproj 具有解码有些复杂的温度计数据结构所需的代码。IOS TI-BLE-Demo.xproj TIBLECBKeyfob.m 具有用于读取和写入特征值的代码,例如从外围设备读取温度或电池电量。

于 2012-10-13T02:12:06.513 回答