16

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

环境

外围设备设置

首要任务是通过配置 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. 这似乎已经根据bluetoothd -v.

会话设置

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

周边:

$ 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 示例中没有一项服务或特征可用。

问题

- 外围设备

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

--中央设备

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

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

4

1 回答 1

3

要将 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 方法。
于 2016-04-28T15:36:56.197 回答