我正在尝试通过蓝牙发送和接收串行命令。我已经安装了 pyBluez 库。问题是,虽然 rfcomm.conf 存在,但 /dev/ 目录中没有 rfcomm0。我重新启动但没有任何变化。
如果我运行以下命令,我会收到“权限被拒绝”错误。
sudo echo "This is a test" > /dev/rfcomm0
为什么usb蓝牙模块连接后rfcomm没有自动添加到/dev中?蓝牙模块兼容,我可以通过命令行扫描和查找设备。 Bluez 和 bluez-utils 已经安装。
答案1
即使启动了蓝牙服务,该/dev/rfcomm0
设备也不会自动出现。
至少,蓝牙子系统需要知道蓝牙设备的地址及其通道,以便特定的/dev/rfcomm*
设备名称可以绑定到特定的蓝牙设备+通道组合。
您可以使用rfcomm bind 0 <bdaddr> [channel]
来进行绑定/dev/rfcomm0
。如果不指定通道号,则默认使用通道1。如果您的版本rfcomm
仍然支持该/etc/bluetooth/rfcomm.conf
文件,并且您有要写入该文件的地址和通道信息/dev/rfcomm0
,那么您可以从命令中省略地址和通道信息 - 但您仍然需要使用该命令进行绑定。
新版本的 BlueZ 工具似乎不再记录该/etc/bluetooth/rfcomm.conf
文件。您可能必须始终使用命令的完整形式rfcomm bind
来设置绑定。您可能需要将这些命令添加到/etc/rc.local
某些自定义启动脚本中,以使它们在启动时自动执行,因为关联不会在重新启动后持续存在。
看来 BlueZ 内部的最后一次重大重建使我们损失了一些与 RFCOMM 相关的功能,例如文件/etc/bluetooth/rfcomm.conf
。但至少该rfcomm
命令仍然可用并且可以完成这项工作。
答案2
为什么这不自动完成?首先,蓝牙服务需要启动一个守护进程,如果它不在初始化列表中,您必须进入终端并手动启动它,直到您重新配置初始化列表以包含它。
这样做的原因是为了让您可以在承诺在计算机上将其全部自动化之前测试您的配置。其背后的推理基于 Unix 的操作系统应如何工作、用户和组如何分配通信权限等概念。