低功耗蓝牙 - BlueZ 5.30:D-Bus GATT API - 只需发现并连接到 C 语言中的 BLE 设备



在BlueZ(5.30)的最后一个版本中,亮点是GATT D-BusAPI的完成。我的目标是以编程方式(用 C 语言),作为 BLE 客户端:

  1. 扫描BLE设备(我可以使用HCI层)
  2. 连接到广告 BLE 设备
  3. 获取 UUID
  4. 执行读取和写入句柄

BlueZ社区强烈建议使用GATT-Dbus api来实现这一点。 经过多次搜索和挠头,我没有成功找到通过 GATT-DBU s API 执行此操作的正确方法或示例。 这似乎比直接使用 GATT 层更复杂。 不幸的是,BlueZ删除了直接访问以拨打关贸总协定。

我非常接近从Bluez中提取GATT源文件,将其编译为自己的独立库,并直接使用GATT层和调用来连接和执行对ble设备服务器的读/写。 我知道与 DBUS-GATT API 相比,这不是建议的方式,但我别无选择。

如果有人对此有任何意见或建议(带有一些示例代码),请告知。

提前谢谢你!

从 DBUS GATT API 开始的最好方法是在这里查看源代码: http://git.kernel.org/cgit/bluetooth/bluez.git/tree/

client文件夹下,您可以找到如何使用 DBUS GATT API 的完整示例。实际上,这就是蓝牙CTL工具的来源。

请注意,DBUS GATT API 仍处于实验阶段,但您可以使用-E标志启用它运行蓝牙服务。

我有一个类似的问题,那就是使用 GATT C/C++ API 与 BLE 设备进行交互。

就我而言,我不得不使用 Bluez v4.101 - Ubuntu 14.04 LTS 中提供的最新 Bluez 版本(阅读我的故事)。在Bluez v4.x中,没有DBus API。
实际上,我最近使用Bluez v5 DBus API,我发现如果您至少不使用Bluez v5.39(从2016年4月开始),则可能会遇到DBus API问题。如前所述,DBus API 仍处于实验阶段。

因此,为了解决我的Bluez v4.x依赖问题,我不得不从Bluez中提取GATT源文件并创建我自己的库"gattlib"。该项目是开源的,以鼓励反馈和贡献。我在自己的 GATT 客户端项目中使用此库。我写了几个例子来帮助人们开始使用它,查看项目的文件夹/examples

编辑2017年3月:我刚刚将DBus支持添加到gattlib(https://github.com/labapart/gattlib/)。从 Bluez v5.42 开始,gattlib 自动使用 DBus API(在构建库时也可以强制使用 DBus gattlib 后端在 v5.42 之前使用)。

最新更新