【问题标题】:BluetoothCtl pairing with pin using python subprocess on Raspberry Pi在Raspberry Pi上使用python子进程与pin配对的BluetoothCtl
【发布时间】:2021-01-18 17:07:30
【问题描述】:

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

我尝试过的:

  1. PyBluez 库,但无法配对。
  2. 子进程,但我无法响应 pin 请求(代码如下),但这会导致错误 参数过多(对于 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,但这里也没有 pin 选项。

可以通过 python 配对吗?

【问题讨论】:

    标签: bluetooth subprocess raspberry-pi3 hc-05


    【解决方案1】:

    Bluez 期望使用 D-Bus 代理 API 来完成此操作,该 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 只需调用连接命令,因为这两个设备已经配对和信任。

    【讨论】:

    • 目标是创建一个微控制器和树莓派的远程农场。随着农场将种植新的 arduino(配备 hc-05)将随着时间的推移添加,我希望我们可以在新设备进入时配对。如果这不可能,我想我们会被限制在“手动”过程。大部分交互是通过我们开发的网络应用程序处理的,用户在大多数情况下可以使用 UI 来控制不同的设备。
    • 代理 API 为您提供实现所需的所有灵活性。如果我推测,我希望您的 RPi 不会不断扫描附近的新设备。我假设扫描是通过您的 Web 应用程序控制的,因此您也没有理由无法通过 UI 输入 pin。搜索“BlueZ 代理示例”发现了一些有趣的链接,例如:kynetics.com/docs/2018/pairing_agents_bluezraspberrypi.org/forums/viewtopic.php?t=170271
    • 谢谢@ukBaz。您带领我走上了正确的道路,但我最终找到了另一个不需要那么多变量的解决方案。您的链接提供了正确的搜索词,我发现 pexpect 非常适合这种情况。我的解决方案:github.com/NerdboyQ/2020_Arduino_Pi_IOT_Project/blob/master/…
    猜你喜欢
    • 2018-03-24
    • 2016-03-13
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多