Bluetooth 在Bluez5中自动进行蓝牙配对/信任

Bluetooth 在Bluez5中自动进行蓝牙配对/信任,bluetooth,debian,raspberry-pi,bluez,raspberry-pi2,Bluetooth,Debian,Raspberry Pi,Bluez,Raspberry Pi2,我一直在努力使我的RPi 2功能像汽车蓝牙接收器一样,一切都很好,只是我不知道如何在Bluez5中自动配对蓝牙设备。在过去,我会使用bluetooth代理和一个简单的脚本,但随着从4->5的移动,这似乎已经过时了。设置的性质意味着一旦RPi进入车内,我就没有kb/鼠标在RPi上,因此它需要是一个完全自动的设置,任何人都可以扫描RPi,如果可能的硬编码PIN是正确的,则需要自动完成对设备的信任,无需cli输入 我在网上搜索过,但每个人似乎都说使用bluetoothctl对他们有效,但在这个特殊的设

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


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

我不知道你为什么说在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-c NoInputNoOutput

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


请注意,这只是您可以做的一个示例。如果您想使用硬编码PIN而不是简单配对,请编辑相同
简单代理的相应部分。我将把它留给您作为练习。

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

(1) 首先测试如下线路,以确保bluetooth agent正常工作:

 bluez-5.43/test/simple-agent -c NoInputNoOutput
(2) 要自动配对,请将此代码放入shell文件(我将其命名为mine pairbot.sh):

(3) 转到crontab:

sudo cronetab -e
(4) 在底部添加:

@reboot sleep 20 &&  /home/pi/pairbot.sh > /home/pi/blelog.txt 2>&1
(5) 重新启动并测试它是否工作


对于其他面临同样问题的人,我的建议是查看您的bluez文件夹(或者,如果您没有安装最新版本的bluez),并搜索显示“test”的文件夹以查找“simple agent”以定位文件路径。从这里,您应该能够构造上面(1)所示的命令行。希望它也能对你起作用

我可能应该提一下,但在匆忙中我没有提。我尝试过做类似的事情,但效果很好,只是它不会“信任”与之配对的设备,这意味着该设备实际上无法连接。我会继续玩,但如果你有任何建议,我会非常感激。在上述代码中的
返回
之前,只需调用
set\u trusted(device)
。我已经尝试过了,但没有成功。在简单代理中有相当多的调用来设置_trusted,但它似乎不能正常工作。它可以工作。但不知何故,它需要相当多的dep,比如python、dbus、pythongi。
@reboot sleep 20 &&  /home/pi/pairbot.sh > /home/pi/blelog.txt 2>&1