使用Bluez的C / C ++ BLE读/写示例

时间:2015-05-22 00:31:19

标签: c++ c bluetooth raspberry-pi bluez

我开始建立一个简单的BLE网络,带有微控制器和覆盆子pi(tardis BLE加密狗)。作为一个起点,我正在寻找一个简单的C或C ++示例来读/写一个BLE设备,类似于我在命令行上可以做的事情。到目前为止,我发现的例子非常复杂。作为一名BLE初学者,我需要一些非常简单的例子来构建,然后再采用更复杂的设计。我可以像在下面的gatttool示例中那样对BLE设备名称进行硬编码。

以下是我目前使用Bluez命令行选项的方法。

从命令行我可以使用:

$ sudo hcitool lescan
LE Scan ...
BB:A0:50:02:18:07 MyDevice

接下来,我可以使用gatttool

在命令行上连接到设备
$ sudo gatttol -b BB:A0:50:02:18:07 -I
[BB:A0:50:02:18:07][LE]> connect
Attempting to connect to BB:A0:50:02:18:07
Connection successful

最后,我能够使用适当的句柄

进行读写
[BB:A0:50:02:18:07][LE]> char-write-req 000f 0100
Characteristic value was written successfully
[BB:A0:50:02:18:07][LE]> char-write-cmd 0011 4C467A

我用于初步研究并开始使用的一些网站:
http://people.csail.mit.edu/albert/bluez-intro/c404.html
https://github.com/carsonmcdonald/bluez-experiments/blob/master/experiments/scantest.c

2 个答案:

答案 0 :(得分:4)

简单吗?一根绳子有多短?我个人认为gatttool代码本身很简单,可以根据自己的目的进行跟踪和提取(我最近已经完成了)。但如果那真的不适合你,那么另一种选择就是libgatt。它与gatttool使用的代码基本相同,但已更方便地捆绑到公共库API中。看看gatt.h哪个有连接/读/写等等。希望如何使用它是不言而喻的。

答案 1 :(得分:-1)

Bluez(Linux官方蓝牙协议栈)的API已移至DBUS。过去,“派生” bluez代码在Linux上访问BLE支持已被“接受”,而现在的方法是使用DBUS。此处记录了Bluez DBUS API:https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc

或者直接为您的蓝牙C / C ++应用程序与DBUS对话,或者将GATT库用作帮助程序。第二种可能是适合初学者的最佳方法(对于非初学者,他们也希望使其程序与Bluez无关,例如,以支持其他操作系统或Bluez pre-DBUS API或使其源更具可读性)。

gattlib是支持现代D-BUS API的GATT库之一(请注意:我是该库的作者)。 这是一个基于此库的简单示例,用于读取/写入BLE设备:https://github.com/labapart/gattlib/blob/master/examples/read_write/read_write.c