【问题标题】:Automate Bluetooth Pairing/Trusting in Bluez5在 Bluez5 中自动进行蓝牙配对/信任
【发布时间】:2015-07-25 20:09:22
【问题描述】:

我一直在努力使我的 RPi 2 像汽车蓝牙接收器一样工作,一切都很好,除了我不知道如何在 Bluez5 中自动配对蓝牙设备。在过去,我会使用蓝牙代理和一个简单的脚本,但从 4 -> 5 的移动似乎已经消失了。设置的性质意味着我曾经在 RPi 上没有 kb/鼠标它在车里,所以它需要是一个完全自动化的设置,任何人都可以扫描 RPi,如果可能硬编码的 PIN 是正确的,则需要自动完成对设备的信任,无需 cli 输入。

我在网上搜索过,但似乎每个人都说使用 bluetoothctl 对他们有用,但在这个特殊的设置中,我希望能够让朋友配对他们自己的手机,而必须信任具有车外的 RPi 并不理想。

【问题讨论】:

    标签: bluetooth debian raspberry-pi bluez raspberry-pi2


    【解决方案1】:

    我已经安装了 bluez-5.43。这是如何在树莓派上自动化配对过程。

    (1) 首先测试这样一行以确保蓝牙代理正常工作:

     bluez-5.43/test/simple-agent -c NoInputNoOutput
    

    (2) 要自动配对,请将这段代码放入一个shell文件(我命名为pairbot.sh):

    if [ "$(id -un)" != "pi" ]; then
            exec sudo -u pi $0 "$@"
        fi
    
        export XAUTHORITY=/home/pi/.Xauthority
        export DISPLAY=:0
    
         lxterminal --command="/bin/bash -c '/home/pi/bluez-5.43/test/simple-agent -c NoInputNoOutput &; read'"
    

    (3) 进入crontab:

    sudo cronetab -e
    

    (4) 在底部添加:

    @reboot sleep 20 &&  /home/pi/pairbot.sh > /home/pi/blelog.txt 2>&1
    

    (5) 重启并测试是否正常。

    我对面临相同问题的其他人的建议是查看您的 bluez 文件夹(或者如果您没有安装最新版本的 bluez)并搜索“简单代理”的“test”文件夹找到文件路径。从这里,您应该能够构建如上所示的命令行 (1)。希望它也对你有用。

    【讨论】:

      【解决方案2】:

      我不确定你为什么说 bluez5 无法使用简单的脚本。我认为你可以做到。下面是一个例子。

      下载 bluez5 源代码并编辑 test/simple-agent。注释掉如下所示的代码行:

      def RequestAuthorization(self, device):
              print("RequestAuthorization (%s)" % (device))
              #auth = ask("Authorize? (yes/no): ")
              #if (auth == "yes"):
              return
              #raise Rejected("Pairing rejected")
      

      它的作用是消除授权提示并始终接受配对请求。

      现在可以使用 NoInputNoOutput 功能启动 simple-agent,以便它使用简单配对并通过上述代码路径:

      ./simple-agent -c NoInputNoOutput

      之后,您应该能够在没有任何用户提示或 PIN 的情况下与 RPi 配对。

      请注意,这只是您可以执行的操作的一个示例。如果说您想要一个硬编码的 PIN 码而不是简单的配对,那么编辑相同 simple-agent 代码的相应部分来执行此操作。我会把它留给你做练习。

      【讨论】:

      • 我可能应该提到它,但我匆忙中没有。我尝试做类似的事情,它工作得很好,除了它不会“信任”它配对的设备,这意味着设备实际上无法连接。我会继续玩,但如果您有任何建议,我将不胜感激。
      • 在上述代码中,在return之前调用set_trusted(device)即可。
      • 我试过了,但没有用。在 simple-agent 中有很多对 set_trusted 的调用,但它似乎无法正常运行。
      • 它有效。但不知何故,它需要相当多的 deps,比如 python、dbus、python-gi。
      猜你喜欢
      • 2020-06-14
      • 1970-01-01
      • 2011-11-24
      • 2011-02-14
      • 1970-01-01
      • 2019-08-09
      • 2011-12-15
      • 2015-10-26
      • 1970-01-01
      相关资源
      最近更新 更多