我正在开发一款带有蓝牙LE外设的iOS应用程序。我似乎无法解决的一个步骤是如何实际将数据从我的应用程序传输到外围设备,反之亦然。
我到目前为止构建的是一个测试应用程序,可以连接到我的示例蓝牙外设,并阅读其所有服务/特征/描述符。它可以切换给定特征的通知,并写入给定的特征。这只是“向外设发送n个字节,从外设接收m个字节”的最后一步,我似乎无法弄清楚。
查看外部附件框架(如果Apple实际上会给我MFi批准该项目,我会使用它),它们会在给定会话中为您提供输入和输出流以与附件进行通信,但不存在此类对象CoreBluetooth。
这只是对Apple在CoreBluetooth功能方面的疏忽吗?或者我只是需要开发自己的蓝牙服务配置文件来处理来自外设的数据流入/流出?
答案 0 :(得分:3)
LE基本上设计用于处理这些基于GATT的配置文件,这些配置文件适用于监控传感器,而不适用于数据流。虽然LE允许为自定义协议打开额外的L2CAP流,但Apple的CoreBluetooth无法提供访问权限。
答案 1 :(得分:3)
您可以构建具有私有服务和特征的自定义配置文件,并使其与SSP类似;这就是我使用BLE模块从一些传感器获取数据到我的应用程序的方式。我购买的模块(Microchip的RN-4020)已经有专门为此而设计的定制配置文件MLDP(Microchip低能耗数据配置文件)。
我在iOS应用程序中获取数据的方式是订阅私有特征,从而在更新值时得到通知。到目前为止它一直运行良好,根据Microchip的数据速率可以达到20 kbps(我没有测试它的限制,因为我不需要太快的速度)。以下是Microchip产品页面的链接:http://www.microchip.com/wwwproducts/Devices.aspx?product=RN4020
祝你好运!答案 2 :(得分:2)
您可以使用bluetooth.org的“立即警报服务”uuid = 1802,其特性为uuid = 2A06,其属性为= write_no_response,可以通过iPhone向您的外围设备发送一个字节值。必须对外围设备进行编程以对发送的数据进行操作。例如,您可以使用iPhone应用程序上的按钮发送十六进制地址,该地址会导致一个或多个端口引脚在外设上打开或关闭。虽然这不是按预期使用警报服务,但它确实提供了一种测试数据传输到外围设备的简便方法。可以使用相同的过程来发送类似于串行数据流的顺序数据字节。我还没有尝试过发送更复杂的数据流。 write_no_response不会向应用程序提供有关外围设备是否收到数据的任何反馈。
IOS TemperatureSensor.xproj是用于从外设读取温度数据的代码示例。 OSX HealthThermometerClient.xproj具有解码稍微复杂的温度计数据结构所需的代码。 IOS TI-BLE-Demo.xproj TIBLECBKeyfob.m具有读取和写入特征值的代码,例如,从外围设备读取温度或电池电量。