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

我正在为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插件构建成蓝牙.而且我已经从〜/ bluez-5.23 / plugins目录中验证了post-build,那里有一个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.

会话设置

连接过程应该是相当简单的.我设置外设进行广告,然后与中央设备连接:

外围:

$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 value handle: 0x0008,uuid: 00002a01-0000-1000-8000-00805f9b34fb

而且我们看到没有一个可以从gatt-example获得的服务或特性.

问题

– 外围设备

>我将如何创建我自己的定制GATT服务器?它可以是一个独立的C应用程序,还是需要像蓝牙一样插入像gatt-example这样的插件?这个问题的答案(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 v4.x插件方法.

如果您的中央设备没有看到新出口的GATT服务可能是周围的问题,而不是中央设备上的问题.
当您需要在中央设备上实施GATT客户端时,您仍然有两种情况:

Bluez v4.x:Bluez不公开GATT API.您可以使用shell脚本启动gatttool命令,或者使用GATT库(如gattlib)与BLE设备进行交互> Bluez v5.x:同样的事情,如果您不能迁移到Bluez v5.39,那么最好使用Bluez v4.x方法.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


查找全部容器的日志文件 $ sudo find /var/lib/docker/containers -name *.log 查看日志位置 $ docker inspect --format='{{.LogPath}}' <container_name> 实时查询内容 $
Linux日志文件中列属性的详细解析
在Linux系统中没有duf命令,如何有效地管理磁盘空间?
深入探讨EncryptPad在Linux操作系统中的功能和优势
原理和应用场景:Linux中ttyload工具的工作原理和实际用途
深度解析SELinux的三种策略类型
评估Linux系统性能的ttyload工具使用效果
分享在Linux系统中检测SSH版本的方法
介绍Linux平台上的数据加密工具EncryptPad
在Linux系统中,如何查看和诊断块设备信息?
在Linux环境下如何查看块设备信息?
探索Linux操作系统下的数据加密工具EncryptPad
学会在Linux系统中查看硬盘信息
分析SELinux:原理与实践
掌握SELinux策略类别
技巧:有效解读和管理Linux日志文件
查看Linux系统中的所有用户
了解Linux系统中各种不同类型的日志文件
深入理解Linux PS命令
方法:在Linux操作系统中查看用户