gpt4 book ai didi

bluetooth - 如何在 Linux 中使用 Bluez 实现蓝牙 LE

转载 作者:行者123 更新时间:2023-12-03 23:58:13 25 4
gpt4 key购买 nike

我正在为 BLE 演示设置两个 Linux 系统。显然,一个系统将是外围设备,而一个系统将是中央设备。我对这两种配置都有几个问题。

环境

  • 2x Ubuntu 14.04 系统
  • 2x 可插拔 USB-BT4LE 加密狗 ( http://plugable.com/products/usb-bt4le )

  • 外围设备设置

    首要任务是通过配置 GATT 服务器进行外围系统设置和广告。目前,似乎无法从命令行配置 GATT 服务器。因此,虽然启动 USB 加密狗并对其进行宣传是一项简单的任务,但这并不允许创建自定义服务和特性。我能找到的 GATT 服务器的唯一示例是 Bluez 包中的 gatt-example.c 文件。所以我下载并构建了最新的 bluez-5.23 源代码。 ( http://www.linuxfromscratch.org/blfs/view/svn/general/bluez.html)。另外使用 --enable-maintainer-mode 标志配置以强制将 gatt-example.c 插件构建到 bluetoothd。我验证了 ~/bluez-5.23/plugins 的后期构建有一个 bluetoothd-gat-example.o 的目录文件。这告诉我 gatt-example 至少是成功构建的。

    然后我修改了配置文件以启用 LE 和属性服务器。
    $ sudo vi /etc/bluetooth/main.conf
    EnableLE = true // Enable Low Energy support. Default is false.
    AttributeServer = true // Enable the GATT attribute server. Default is false.

    然后只需重新启动或重新启动蓝牙守护程序...

    中央设备设置

    由于中央设备不需要像外围设备那样构建任何特殊插件,我只是使用 apt-get 安装了 bluez .这似乎已经根据 bluetoothd -v 安装了 v4.101 .

    session 设置

    那么连接过程应该相当简单。我将外围设备设置为广告,然后与中央设备连接:

    周边:
    $ sudo hciconfig hci0 up        // Make sure the interface is up
    $ sudo hciconfig hci0 leadv // Set the interface to advertise

    中央:
    $ sudo hcitool -i hci0 lescan   // Scan for nearby devices advertising
    LE Scan ...
    00:02:72:C9:5E:0F (unknown) // Not sure why two of the same MAC are found?
    00:02:72:C9:5E:0F (unknown) // but I know this is my device...

    $ sudo gatttool -i hci0 -b 00:02:72:C9:5E:0F -m 48 --interactive // Connect interactively
    [ ][00:02:72:C9:5E:0F][LE]> connect
    [CON][00:02:72:C9:5E:0F][LE]> primary
    attr handle: 0x0001, end grp handle: 0x0008 uuid: 00001800-0000-1000-8000-00805f9b34fb
    attr handle: 0x0010, end grp handle: 0x0010 uuid: 00001801-0000-1000-8000-00805f9b34fb
    [CON][00:02:72:C9:5E:0F][LE]> characteristics
    handle: 0x0004, char properties: 0x02, char value handle: 0x0006, uuid: 00002a00-0000-1000-8000-00805f9b34fb
    handle: 0x0007, char properties: 0x02, char value handle: 0x0008, uuid: 00002a01-0000-1000-8000-00805f9b34fb

    而且我们看到 gatt 示例中没有一项服务或特征可用。

    问题

    - 外围设备
  • 我将如何创建自己的自定义 GATT 服务器?它可以是独立的 C 应用程序,还是需要像 gatt-example 那样作为插件内置到 bluetoothd 中?这个问题的答案 (Creating a Gatt Server?) 意味着您执行以下操作:“首先初始化 GATT 库和其他模块”,然后“注册您的 GATT 数据库”。但是没有一个如何实现这些通用语句的示例,并且提供的链接只是蓝牙网站的 URL。
  • GATT 规范 (https://developer.bluetooth.org/gatt/Pages/default.aspx) 提供了许多“采用”的服务和特征,这些服务和特征可以 XML 格式下载。但是没有关于如何使用它们的说明?!
  • 如何验证我的 GATT 服务器是否正在运行?

  • --中央设备
  • 为什么我的中央设备看不到外围设备上运行的 GATT 服务器的服务和特征?

  • 我可以提供任何必要的额外信息。谢谢。

    最佳答案

    要将 GATT 服务器创建到单独的进程中,您(至少)有两种情况:

  • Bluez v4.x:您的 GATT 服务必须是 Bluez 插件
  • Bluez v5.x:您的 GATT 服务应使用新的 GATT DBus API(但建议至少使用 Bluez v5.39(自 2016 年 4 月起)。否则使用 Bluez GATT Server API 更安全(就 Bluez GATT Server API 而言) Bluez v4.x 插件方法。

  • 如果您的中央设备没有看到新导出的 GATT 服务,则可能是外围设备的问题,而不是中央设备的问题。
    当您需要在中央设备上实现 GATT 客户端时,您仍然有两种情况:
  • Bluez v4.x:Bluez 不公开 GATT API。要么使用 shell 脚本启动 gatttool命令,或者您使用 GATT 库,例如 gattlib与 BLE 设备交互
  • Bluez v5.x:同样,如果您无法迁移到 Bluez v5.39,那么最好使用 Bluez v4.x 方法。
  • 关于bluetooth - 如何在 Linux 中使用 Bluez 实现蓝牙 LE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25797354/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com