iOS蓝牙低功耗技术 - 发送/接收十六进制数据

7

我正在创建一个iOS应用程序,应该连接到自定义BLE设备。我需要让iOS应用程序发送两个十六进制命令,一个是启用设备的某个部分,另一个是请求数据。

除了使用服务和特性之外,在iOS中是否有其他方法可以发送/接收自定义HEX数据?


你解决了这个问题吗?请分享一下。 - Harsh Thakur
3个回答

4

不,这是不可能的,但原因并不是iOS的问题,而是“服务”和“特征”只是BLE协议定义的一部分。

官方规范: https://developer.bluetooth.org/TechnologyOverview/Pages/BLE.aspx

通用属性配置文件

最新的蓝牙规范使用基于服务的体系结构,基于属性协议(ATT)。所有低功耗通信都在通用属性配置文件(GATT)上进行。应用程序或另一个配置文件使用GATT配置文件,以便客户端和服务器可以以结构化方式交互。

服务器包含多个属性,GATT配置文件定义了如何使用属性协议进行发现、读取、写入和获取指示。这些功能支持基于服务的体系结构。服务按照配置文件规范中定义的方式使用。GATT使您能够公开在配置文件规范中定义的服务和特征。


1
你的答案不正确:你可以在GATT范式之外通过BLE发送数据。 - Bogdan Alexandru

1
另一个答案偶然地是正确的,但原因错误。
当然,在BLE中发送任何类型的数据都是可能的,不仅限于GATT。只是,iOS强制你使用GATT。没有其他iOS API可供使用。所以,是iOS阻止你这样做。
如果你不被迫使用GATT,还有其他选择:
- L2CAP基于信用的通道——你可以创建一个通道,允许你每个数据包发送23个八位字节(在BLE 4.0和4.1中,4.2允许更多),以任何你选择的格式。 - 如果有HCI的访问权限,你可以发送自定义ACL数据包以避免L2CAP头。但你还需要修改另一侧,以确保它正确解析。

0

是的,您可以通过蓝牙设备发送数据。我已经实现了。通过实现外围对象的writevalue方法,在给定的蓝牙设备特征上发送数据。而且,要从BLE设备获取数据,您可以使用外围对象的readValue方法。数据将在蓝牙框架的更新委托方法中开始。


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