【问题标题】:BlueZ 5.30: D-Bus GATT API - Simply Discover and Connect to a BLE device in CBlueZ 5.30:D-Bus GATT API - 用 C 语言轻松发现并连接到 BLE 设备
【发布时间】:2015-08-28 18:45:18
【问题描述】:

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

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

BlueZ 社区强烈建议使用 GATT-Dbus api 来完成此操作。经过多次搜索和挠头后,我没有成功找到通过 GATT-DBUs api 执行此操作的正确方法或示例。这似乎比直接使用 GATT 层更复杂。不幸的是,BlueZ 删除了调用 gatt 的直接访问权限。

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

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

提前谢谢你!

【问题讨论】:

    标签: bluetooth-lowenergy dbus bluez gatt gdbus


    【解决方案1】:

    开始使用 DBUS GATT API 的最佳方式是在此处查看源代码:http://git.kernel.org/cgit/bluetooth/bluez.git/tree/

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

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

    【讨论】:

    【解决方案2】:

    我遇到了类似的问题,即使用 GATT C/C++ API 与 BLE 设备交互。

    就我而言,我必须使用 Bluez v4.101 - Ubuntu 14.04 LTS (read my story) 中可用的最新 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 之前)。

    【讨论】:

    • 您能否描述一下您在 BlueZ 5 5.39 之前的版本中遇到的问题? Ubuntu 16.04 LTS 恰好附带 5.37...
    • "我刚刚为 gattlib 添加了 DBus 支持" 太好了。
    • @ArtoBendiken:实际上,5.39 之前的问题仅与 Bluez DBus GATT Server 支持有关。它不应该影响 DBus GATT 客户端。
    • @OlivierM:你能用 DBUS 做所有事情吗?
    • 你能回答这个问题吗:stackoverflow.com/questions/43475751/…
    猜你喜欢
    • 2018-11-13
    • 2016-08-25
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2016-05-27
    相关资源
    最近更新 更多