如何通过dbus API扫描蓝牙LE设备?

6

我正在尝试使用bluez DBus API扫描蓝牙LE设备。我已经安装了bluez-5.25。

--enable-experimental 

配置选项。我可以在构建中看到已编译支持。 像HeartBeat、ThermoMeter等接口出现在DBus中,但不包括

org.bluez.ProximityMonitor1 

接口。据我的理解,此接口需要用于对蓝牙LE设备进行永久扫描并获取其距离信息。但我刚开始接触bluez,所以不确定。

DBus API中是否有必要的所有内容?为永久扫描LE设备需要什么条件?

1个回答

4

您需要注册org.bluez.Device1代理对象的DBUS创建。然后可以使用org.bluez.Adapter1接口来启动发现。这将扫描经典和LE设备。当检测到设备时,将创建Device1对象并调用您注册的回调函数。


我现在是这样做的。似乎需要主动扫描才能看到设备。被动扫描不会发出DBus消息。我试图跟踪LE设备。只有在第一次发现时才会发出InterfacesAdded。如果我想知道设备是否仍然靠近我,应该如何实现?我以为可以使用接近度来实现,但它并不存在。不知道是bluez没有工作还是设备不支持该配置文件。 - Norbert Hartl
接近度监视器配置文件与扫描不同。 在使用此配置文件(或任何配置文件)之前,您需要先进行扫描。扫描=发现附近的设备(获取其BT地址和服务)。接近度监视器=在发现后,如果远程设备支持该服务,则使用该服务读取rssi值,并根据接近度选择性地发出警报。 - kaylum
1
我表述不够清晰。我扫描了设备,然后检查了每个找到的设备。我本来期望能找到一个提供ProximityMonitor接口的设备。但是我发现没有。我已经使用--enable-experimental编译了bluez,并使用-E启动了守护进程。但是我不确定是否只有在宣布接口的情况下才能看到接口,而我的信标可能不支持它。 - Norbert Hartl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接