C中的轻量级蓝牙LE库

Posted

技术标签:

【中文标题】C中的轻量级蓝牙LE库【英文标题】:Light Weight Bluetooth LE library in C 【发布时间】:2021-07-14 14:48:35 【问题描述】:

我一直在寻找一个简单的 C 语言蓝牙 LE 库,它允许我扫描 BLE 设备、连接并接收来自 BLE 设备的给定服务 UUID 的定期通知。直接与蓝牙套接字和 libbluetooth(从 BlueZ 创建)一起使用而不使用 DBUS 的东西。不需要配对和安全功能。

遇到https://github.com/labapart/gattlib。看起来不错,但使用 dbus API 并且依赖于 libdbus、glib 等。要使用这个库,需要额外的 5MB 库,因此决定不使用 dbus。我们的设备上没有空间来支持压缩 rootfs 映像上的 5MB 蓝牙堆栈。我们的 rootfs 映像的总大小为 9 MB。带有 dbus 的蓝牙堆栈本身似乎是我们 rootfs 大小的 50% 以上。

还有 - https://github.com/edrosten/libblepp 是 c++ 语言,不使用 dbus。这将需要编写用于 C 程序的 C 包装器以及 C++ 构造的开销,例如编译器生成的复制构造函数、赋值运算符等。还有交叉编译的问题。

目标板是运行 Linux 的 Xilinx Zynq,构建系统是 buildroot。

请提出建议。

谢谢

【问题讨论】:

【参考方案1】:

如果您想使用 BlueZ 进行 BLE 通信,唯一支持的 API 是 D-Bus API。不鼓励或弃用其他所有内容。

如果您想要更简单的东西和/或根本不使用 BlueZ,您可以使用 Linux 中的 HCI_CHANNEL_USER 功能来获取对内核中 HCI 连接的原始访问。有了它,您可以使用任何蓝牙主机堆栈软件,或者如果您只需要极小的子集,您可以编写自己的最小软件。

Stack Overflow 上不允许提出软件库推荐的问题,因为可能会出现基于意见的结果。

【讨论】:

【参考方案2】:

找到了解决方案,可能对某人有帮助...

在 youtube 上搜索并浏览 Linux 会议和 IOT 会议视频后,发现 Bluez 具有轻量级的可执行文件,并且代码存在于 Bluez 的 src/shared 文件夹中。对于 btgattclient.c 在编译时生成“gatt-client”可执行文件,其功能与“gatttool”相同,并且不依赖于 bluetoothd 或 dbus。它唯一的依赖是 glib-2.0。

如果我们在操作系统没有运行蓝牙或没有安装 dbus 库时需要轻量级工具,这将很有帮助。

谢谢

【讨论】:

以上是关于C中的轻量级蓝牙LE库的主要内容,如果未能解决你的问题,请参考以下文章

C++plog库,轻量级日志框架(日志库)

一款只有1300 行代码的轻量级 C 语言网络库

一款只有1300 行代码的轻量级 C 语言网络库

调试利器!一款轻量级日志库 log.c

调试利器!一款轻量级日志库 log.c

分享一个简单且轻量级的日志库:log.c