在Raspberry Pi上使用python子进程与Pin配对BluetoothCtl

问题描述

我正在研究一个项目,该项目使用HC-05蓝牙模块通过蓝牙连接在树莓派和一系列Arduino之间进行通信。我可以使用bluetoothctl配对arduino,并使用python脚本进行通讯,但是我也想在脚本中包含配对过程,但是我没有找到在脚本中包含蓝牙配对销的解决方案。

我尝试过的事情:

  1. PyBluez库,但无法配对。
  2. 子流程,但我无法响应固定请求(下面的代码,但这会导致错误 (对于bluetoothctl)的参数过多。
import subprocess,shlex
addr = "00:14:03:06:12:84"
pinCode = "1234"

args = ["bluetoothctl",f"pair {addr}",pinCode]
args = shlex(args)
subprocess.Popen(args)
  1. 我也尝试使用bluetoothctl wrapper,但这里也没有引脚选项。

是否可以通过python配对?

解决方法

Bluez希望通过D-Bus Agent API来做到这一点,该文档记录在https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/doc/agent-api.txt

Bluez源代码树中还有一个Python示例:https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/test/simple-agent

由于配对通常是一次性的设置/安全性步骤,在该步骤中交换密钥并建立一个受信任的设备,因此我质疑自动配对过程的价值。您真的要与随机打开且在范围内的设备配对吗?

RPi和HC-05之间的后续连接不需要先进行配对步骤。只需要求Raspberry Pi调用连接命令,因为两个设备已经配对并受到信任。