运行 在蓝牙配对请求上运行

Running functions on bluetooth pair request

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

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

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

我如何创建一个脚本,'listens' 用于蓝牙配对请求,运行 python 在监听时相应地编码?有了这个,我怎样才能连接到蓝牙接受配对请求?

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

谢谢 :)

您尝试过使用 this Python library 吗?它列出 Raspberry Pi 支持

此外,这里有一些关于监听传入蓝牙连接的信息:

Bluetooth programming in Python follows the socket programming model. This is a concept that should be familiar to almost all network programmers, and makes the transition from Internet programming to Bluetooth programming much simpler. Example 3-2 and Example 3-3 show how to establish a connection using an RFCOMM socket, transfer some data, and disconnect.

import bluetooth

server_sock=bluetooth.BluetoothSocket( bluetooth.RFCOMM )

port = 1
server_sock.bind(("",port))
server_sock.listen(1)

client_sock,address = server_sock.accept()
print "Accepted connection from ",address

data = client_sock.recv(1024)
print "received [%s]" % data

client_sock.close()
server_sock.close()

An RFCOMM BluetoothSocket used to accept incoming connections must be attached to operating system resources with the bind method. bind takes in a tuple specifying the address of the local Bluetooth adapter to use and a port number to listen on. Usually, there is only one local Bluetooth adapter or it doesn't matter which one to use, so the empty string indicates that any local Bluetooth adapter is acceptable. Once a socket is bound, a call to listen puts the socket into listening mode and it is then ready to accept incoming connections.

...

Source

您搜索的是蓝牙代理。您需要使用官方 linux 蓝牙协议栈 BlueZ. There is documentation describing the Agent API link。它使用 DBus 进行通信。您需要调用以下步骤:

  1. 创建一个用python编写的蓝牙代理并将其发布到特定的DBus 对象路径。您的代理必须实现 org.bluez.Agent1 接口,如代理 API doc.
  2. 中所述
  3. 然后您需要通过从代理 API 调用 RegisterAgent 方法来注册此代理。在这里,您将提供您的代理所在的 DBus 路径,并且您还将根据您的情况提供功能 "DisplayYesNo"(LED 作为配对请求的显示,按钮带有一些实施超时 Yes/No).
  4. 同时通过调用 RequestDefaultAgent

  5. 将您的代理注册为默认代理
  6. 现在,如果您尝试与您的设备配对,将调用代理中的相应函数(我认为对于您的用例,它将是 RequestAuthorization)如果你想接受配对,你只需从这个函数中 return,如果你想拒绝配对,你必须在这个函数中抛出一个 DBus 错误。

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

玩得开心:)