首页 > 解决方案 > 在蓝牙对请求上运行功能

问题描述

我最近一直在学习使用 arduino 的电路,并希望对我的 Raspberry Pi 应用程序进行一些更改。

几年前我使用这个过时的教程来创建我的 pi 蓝牙接收器,它目前运行良好(https://www.instructables.com/id/Turn-your-Raspberry-Pi-into-a-Portable-Bluetooth -A/)但是这个过时的教程的一个缺点是必须通过屏幕接受蓝牙连接(这是关闭的,因为蓝牙扬声器没有屏幕)。

我的计划:使用按钮接受蓝牙连接并使用闪烁的绿色 LED 指示连接请求。

如何创建一个“侦听”蓝牙配对请求的脚本并在侦听时相应地运行 python 代码?有了这个,我怎样才能连接到蓝牙来接受配对请求?

我不太熟悉 Raspberry Pi 脚本放置,但熟悉 Python 并且知道如何连接到 GPIO。

谢谢 :)

标签: pythonlinuxbluetoothraspberry-piraspberry-pi3

解决方案


您正在搜索的内容称为蓝牙代理。您需要使用官方的 linux 蓝牙协议栈BlueZ。有描述代理 API链接的文档。它使用 DBus 进行通信。您需要调用以下步骤:

  1. 创建一个用 python 编写的蓝牙代理并将其发布到特定的 DBus 对象路径。您的代理必须实现 org.bluez.Agent1 接口,如代理 API 文档中所述。
  2. 然后您需要通过从代理 API调用RegisterAgent方法来注册此代理。在这里,您将提供您的代理所在的 DBus 路径,并且您将在您的案例中提供“DisplayYesNo”的功能(LED 作为配对请求的显示,以及用于实现是/否的超时按钮)。
  3. 还可以通过调用RequestDefaultAgent将您的代理注册为默认代理

  4. 现在,如果您尝试与您的设备配对,将调用代理中的相应功能(我认为对于您的用例,它将是RequestAuthorization)如果您想接受配对,您只需从此功能返回,如果您想拒绝配对时,您必须在此函数内引发 DBus 错误。

作为您的起点,我建议您查看这个简单的 python 代理:https ://github.com/pauloborges/bluez/blob/master/test/simple-agent 它实现了您需要的所有功能,所以只需更新它根据您的需要。

玩得开心 :)


推荐阅读