python - 在蓝牙对请求上运行功能
问题描述
我最近一直在学习使用 arduino 的电路,并希望对我的 Raspberry Pi 应用程序进行一些更改。
几年前我使用这个过时的教程来创建我的 pi 蓝牙接收器,它目前运行良好(https://www.instructables.com/id/Turn-your-Raspberry-Pi-into-a-Portable-Bluetooth -A/)但是这个过时的教程的一个缺点是必须通过屏幕接受蓝牙连接(这是关闭的,因为蓝牙扬声器没有屏幕)。
我的计划:使用按钮接受蓝牙连接并使用闪烁的绿色 LED 指示连接请求。
如何创建一个“侦听”蓝牙配对请求的脚本并在侦听时相应地运行 python 代码?有了这个,我怎样才能连接到蓝牙来接受配对请求?
我不太熟悉 Raspberry Pi 脚本放置,但熟悉 Python 并且知道如何连接到 GPIO。
谢谢 :)
解决方案
您正在搜索的内容称为蓝牙代理。您需要使用官方的 linux 蓝牙协议栈BlueZ。有描述代理 API链接的文档。它使用 DBus 进行通信。您需要调用以下步骤:
- 创建一个用 python 编写的蓝牙代理并将其发布到特定的 DBus 对象路径。您的代理必须实现 org.bluez.Agent1 接口,如代理 API 文档中所述。
- 然后您需要通过从代理 API调用RegisterAgent方法来注册此代理。在这里,您将提供您的代理所在的 DBus 路径,并且您将在您的案例中提供“DisplayYesNo”的功能(LED 作为配对请求的显示,以及用于实现是/否的超时按钮)。
还可以通过调用RequestDefaultAgent将您的代理注册为默认代理
现在,如果您尝试与您的设备配对,将调用代理中的相应功能(我认为对于您的用例,它将是RequestAuthorization)如果您想接受配对,您只需从此功能返回,如果您想拒绝配对时,您必须在此函数内引发 DBus 错误。
作为您的起点,我建议您查看这个简单的 python 代理:https ://github.com/pauloborges/bluez/blob/master/test/simple-agent 它实现了您需要的所有功能,所以只需更新它根据您的需要。
玩得开心 :)
推荐阅读
- node.js - VsCode远程连接在远程服务器上创建节点进程?
- python - 如何创建组列
- reactjs - 我需要导入什么才能在 FullCalendar 中使用主题?
- iframe - 为什么 iframe 中的 unqork 应用程序无法从 Chrome 隐身模式启动
- android - 为每个 Recyclerview 独立添加 Shimmer
- powershell - MSI 安装命令在本地工作,但不能通过 PowerShell 远程处理
- sql - 选择 case when then 有多个值
- json - 是否可以向 django rest api 发送请求以运行脚本?
- opencv - 从 SuperPixels 获取多边形顶点(轮廓)
- kubernetes - 如何更改 Kubernetes pod tcp_keepalive