如何通过 BlueZ C 库执行蓝牙低功耗扫描

Posted

技术标签:

【中文标题】如何通过 BlueZ C 库执行蓝牙低功耗扫描【英文标题】:How to perform a bluetooth low-energy scan via BlueZ C library 【发布时间】:2014-12-30 06:14:27 【问题描述】:

我是使用 BlueZ 编程低功耗蓝牙的新手。

我想开发一个本地代码 c,以使用英特尔 Edison 上的蓝牙低功耗 BlueZ API 扫描附近的设备。 我见过this question,但答案并没有真正帮助。有什么建议吗?

【问题讨论】:

【参考方案1】:

另一个答案的示例对我不起作用,它在扫描中停止...

下一个链接适用于 c 语言,但在转换包含 de rssi 信号信息的字节时出错。 https://github.com/glock45/intel-edison-playground/blob/master/scan.c

第 121 行:

printf("%s - RSSI %d\n", addr, (**char**)info->data[info->length]);

应该是:

printf("%s - RSSI %d\n", addr, (**int8_t**)info->data[info->length]);

我通过查看 btmon 程序所在的 bluez-version/monitor/*.c 内部找到了这些。你可以看到数据类型和结构,hcidump.c 非常有用,packets.cmain.c 也有,但是关于 hci 套接字还有很多要了解

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。【参考方案2】:

在 Galileo 或 Edison 上使用 BlueZ 进行 BLE 编程类似于任何其他 x86 平台。

Edison(和 Galileo)通常预装了 BlueZ 库。你只需要用你的C代码把它们链接起来,就可以像其他x86平台一样编程了。

完整的C code example bluetooth scan with BlueZ, see this link。

Please see this example for BLE scan

还有 HCI API here。

【讨论】:

我看过这个代码示例。它可以工作,但它不扫描 BLE 设备 - 只扫描普通设备。 @Longes 对于 BLE,您需要设置 hci_le_set_scan_parameter、please see this example for BLE scan BLE 示例依赖于 ncurses,为了测试,我将其更改为纯控制台应用程序。此外,您必须使用 sudo 运行它。【参考方案3】:

GattLib library(在提出此问题后创建)具有使用 C 扫描/连接到 BLE 设备的工具。

【讨论】:

【参考方案4】:

intel-edison scan.c 代码也适用于 Raspberry Pi。

它可以扫描连接到 arduino Uno 的 Adafruit BLE UART 朋友模块。

在 Pi 上,需要下载 bluez-5.33.tar.gz、libncurses-dev 和 libbluetooth-dev。

要编译scan.c,请使用

gcc scan.c -lbluetooth -o 扫描

【讨论】:

以上是关于如何通过 BlueZ C 库执行蓝牙低功耗扫描的主要内容,如果未能解决你的问题,请参考以下文章

bluetoothctl 不显示蓝牙低功耗 (BLE) 设备

Bluez 自动重新连接设备

BLE低功耗蓝牙的广播内容

低功耗蓝牙:在 linux 中监听通知/指示

Qt低功耗蓝牙系列三(低功耗蓝牙客户端的程序设计纯Android代码)

Qt低功耗蓝牙系列三(低功耗蓝牙客户端的程序设计纯Android代码)