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

Col*_*son 9 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
Run Code Online (Sandbox Code Playgroud)

接下来,我可以使用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
Run Code Online (Sandbox Code Playgroud)

最后,我能够使用适当的句柄进行读写

[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
Run Code Online (Sandbox Code Playgroud)

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

Oli*_*erM 7

Bluez(Linux 官方蓝牙堆栈)已将其 API转移到DBUS。虽然在过去,“分叉”bluez 代码以在 Linux 上访问 BLE 支持是“被接受的”,但现在的方法是使用 DBUS。Bluez DBUS API 记录在此处:https : //git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc

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

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

  • 当 Bluez DBUS LEAdvertisement1 仍处于实验阶段时,我已经完成了导出。我不记得它有多复杂,但我设法做到了。但这也是为什么在 DBUS 上创建前端对于降低复杂性有意义的原因。我不一定不同意套接字 API。但重新实现 Bluez 并添加套接字传输布局(除了 DBUS 之外)是有区别的。您可能知道,编写基于 HCI 的库也并非易事。 (2认同)

kay*_*lum 5

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