如何重新启动/释放 rfcomm 以进行蓝牙通信?

Posted

技术标签:

【中文标题】如何重新启动/释放 rfcomm 以进行蓝牙通信?【英文标题】:How to restart/release rfcomm for bluetooth communication? 【发布时间】:2022-01-17 13:33:27 【问题描述】:

我正在尝试将树莓派连接到我的 Galaxy Note 以将其用于串行通信。我在这方面取得了一定的成功。

首先我通过bluetoothctl 配对并信任它。然后我运行sudo rfcomm watch hci0 并以cat /dev/rfcomm 打开。我能够使用蓝牙终端连接到树莓派(只有这个应用程序,其他所有应用程序都失败了)并且从银河发送的字符串将显示在cat 窗口中。

我后来不知何故搞砸了,现在运行sudo rfcomm watch hci0 给了我Can't bind RFCOMM socket: Address already in use。我不能用sudo rfcomm release hci0sudo rfcomm release 0 释放它,因为它给了我不能释放设备:没有这样的设备。同样cat /dev/rfcomm0 现在也给我没有这样的文件或目录。

我杀死了sudo lsof | grep /dev/rfcomm0 列出的进程,这对我使用RFCOMM 的能力没有影响。使用systemctl daemon-reload 重新加载并使用service bluetooth restart 重新启动也没有效果。

我仍然可以扫描其他蓝牙设备,并且可以使用蓝牙终端连接到树莓派,但似乎rfcomm 不见了。我知道重新启动可以解决这个问题,但如果可能的话,我想以编程方式执行此操作,而不必诉诸电源循环。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

将设备与树莓派配对..

bluetoothctl

scan on

pair XX:XX:XX:XX:XX:XX

trust XX:XX:XX:XX:XX:XX

agent-on

配置蓝牙设备

hciconfig

在 pi 上创建串行,/dev/rfcomm

sudo rfcomm watch hci0

sudo hciconfig hci0 piscan

sudo sdptool add sp

sudo rfcomm watch hci0

【讨论】:

以上是关于如何重新启动/释放 rfcomm 以进行蓝牙通信?的主要内容,如果未能解决你的问题,请参考以下文章

手机通过蓝牙传文件用的啥协议?

如何让蓝牙 RFCOMM 始终如一地工作?

如何防止Android蓝牙RFCOMM连接在.connect()之后立即死亡?

如何将 Android 应用程序正确连接到支持蓝牙的 Arduino 微控制器上的 RFCOMM 插座?

使用不安全的 RFCOMM 蓝牙套接字时,android 何时显示配对对话框?

蓝牙的rfcomm和spp都是串口的协议,他们之间有啥区别呢?