Bluez中现已弃用的rfcomm二进制文件的替代品


10

从bluez 5.44开始,bluez-utils(包括hcitool等)中的rfcomm二进制文件被认为已弃用,并且从现在开始仅包含在AUR提供的bluez-utils-compat软件包中。

是否有类似的命令行应用程序使用rfcomm内核模块将蓝牙设备绑定到串行端口,或者从现在开始我是否必须使用PyBluez或类似的库?

如果碰巧是后者,那么您会推荐哪个Python 3库?

如果有人知道,请告诉我为什么这么多的bluez-utils突然被认为不推荐使用。我什么都找不到。

ArchWiki建议使用新的执行RFCOMM功能d-Bus的配置文件1 API

Answers:


2

我最近找到了bluez-tools项目,该项目旨在使用Bluez当前的D-Bus api实现丢失的功能。

可从社区存储库在ArchLinux上使用Bluez-tools。我还没有测试过它,而github页面指出,它仍处于测试阶段。但是根据文档,bt-serial应该能够代替旧的bluez rfcomm,并且bt-adapter + bt-agent + bt-device具有hcitool的功能。

编辑:当查看问题列表和最后提交时,bluez-tools似乎不再被积极维护。


1

我找到了另一种可能的解决方案。我通过挖掘某人的git hub存储库发现了这一点。这使用内置的python3套接字模块。

先决条件:

  1. 您在地址<适配器地址>上有一个正常工作的适配器。
  2. 您的目标蓝牙设备位于<设备地址>。
  3. 设备已固定。

也就是说,可以使用rfcomm。


$python3
>>> import socket
>>> sock = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
>>> adapter = '00:11:22:33:44:55' #<adapter address>
>>> device = '55:44:33:22:11:00' #<device address>
>>> sock.bind((adapter, 1))
>>> sock.connect((device, 1))
## If not pinned it will ask you. You can use/adapt the bluez simple-agent for headless pinning
>>> sock.send(b'hello\n')
>>> sock.recv(100)
>>> sock.close()

很高兴知道Python本身支持蓝牙串行通信。感谢您回答这个相对较旧的问题。
eike

0

我想注意这个问题:

  1. 这个项目的GitHub包含了一些RFCOMM功能。(基于bluez测试文件)。
  2. bluez项目本身仍然包含rfcomm.c文件,可以使用以下命令轻松编译该文件:

    gcc -lbluetooth rfcomm.c -orfcomm -DVERSION = xyz

...只需一个文件,无需编译整个bluez项目。其中xyz是下载的bluez tar.xz源代码的版本(现在为5.46)。在下载之前,应先检查自己的内容bluetoothd -v并下载匹配的源。bluez-libs仅是编译成功的依赖项。

我需要用于armv7(raspberry 2)的rfcomm,并且没有用于rfcomm的aur软件包,这只是一种方法,但是效果很好。

仍然不确定为什么不推荐使用rfcomm,没有很好的选择,以及如何与蓝牙进行通讯,因为它是串行端口。因为即使您是python专家加上DBUS专家...(像上面提到的项目的所有者可能是...)...仍然只以这种方式提供了fifo,/ dev / ...中没有真正的字符设备,所有其他程序(例如arduino) )可以查看并使用。


2
1.项目页面显示“只是避免重新使用这些工具的旧代码”,这意味着作者建议在将bluez用于新项目时采用其他方法。2.有很多方法可以自己编译rfcomm,我正在寻找的原因是弃用rfcomm的原因以及受支持的替代方法。
eike
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.