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

环境


2个Ubuntu 14.04系统
2个可插拔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插件强制构建为蓝牙。然后我从~/bluez-5.23/plugins目录验证了构建后是否存在bluetoothd-gat-example.o文件。这告诉我gatt示例至少已成功构建。

然后,我修改了配置文件以启用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。

会话设置

连接过程应该非常简单。我将外围设备设置为做广告,然后与中央设备连接:

外围设备:

$ 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一样作为插件内置到蓝牙中?该问题的答案(Creating a Gatt Server?)意味着您执行以下操作:“首先初始化GATT库和其他模块”,然后“注册您的GATT数据库”。但是,没有一个如何实现这些通用语句的示例,并且提供的链接只是指向Bluetooth网站的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 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实现Bluetooth LE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25797354/

10-13 04:55