将蓝牙设备与 python 中的 Passkey/Password 配对 - RFCOMM (Linux)
Pairing bluetooth devices with Passkey/Password in python - RFCOMM (Linux)
我正在编写 Python 脚本来搜索蓝牙设备并使用 RFCOMM 连接它们。此设备有 Passkey/Password。我正在使用 PyBlueZ,据我所知,该库无法处理 Passkey/Password 个连接 (Python PyBluez connecting to passkey protected device)。
我能够发现设备并检索它们的名称和地址:
nearby_devices = bluetooth.discover_devices(duration=4,lookup_names=True,
flush_cache=True, lookup_class=False)
但如果尝试使用以下方式连接到特定设备:
s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
s.connect((addr,port))
我收到一个错误 'Device or resource busy (16)'
。
我使用 hcitool 和 bluetooth-agent 尝试了一些 bash 命令,但我需要以编程方式进行连接.我能够使用此处描述的步骤连接到我的设备:How to pair a bluetooth device from command line on Linux.
我想问一下是否有人使用 Python 连接到 Passkey/Password 的蓝牙设备。我正在考虑使用 subprocess.call()
在 Python 中使用 bash 命令,但我不确定这是否是个好主意。
感谢您的帮助。
我终于可以使用 PyBlueZ 连接到设备了。我希望这个答案将来能对其他人有所帮助。我尝试了以下方法:
首先,导入模块并发现设备。
import bluetooth, subprocess
nearby_devices = bluetooth.discover_devices(duration=4,lookup_names=True,
flush_cache=True, lookup_class=False)
当您发现要连接的设备时,您需要知道端口、地址和密钥。使用该信息执行下一步:
name = name # Device name
addr = addr # Device Address
port = 1 # RFCOMM port
passkey = "1111" # passkey of the device you want to connect
# kill any "bluetooth-agent" process that is already running
subprocess.call("kill -9 `pidof bluetooth-agent`",shell=True)
# Start a new "bluetooth-agent" process where XXXX is the passkey
status = subprocess.call("bluetooth-agent " + passkey + " &",shell=True)
# Now, connect in the same way as always with PyBlueZ
try:
s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
s.connect((addr,port))
except bluetooth.btcommon.BluetoothError as err:
# Error handler
pass
现在,您已连接!!您可以使用您的套接字来完成您需要的任务:
s.recv(1024) # Buffer size
s.send("Hello World!")
PyBlueZ 官方文档可用here
我正在编写 Python 脚本来搜索蓝牙设备并使用 RFCOMM 连接它们。此设备有 Passkey/Password。我正在使用 PyBlueZ,据我所知,该库无法处理 Passkey/Password 个连接 (Python PyBluez connecting to passkey protected device)。
我能够发现设备并检索它们的名称和地址:
nearby_devices = bluetooth.discover_devices(duration=4,lookup_names=True,
flush_cache=True, lookup_class=False)
但如果尝试使用以下方式连接到特定设备:
s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
s.connect((addr,port))
我收到一个错误 'Device or resource busy (16)'
。
我使用 hcitool 和 bluetooth-agent 尝试了一些 bash 命令,但我需要以编程方式进行连接.我能够使用此处描述的步骤连接到我的设备:How to pair a bluetooth device from command line on Linux.
我想问一下是否有人使用 Python 连接到 Passkey/Password 的蓝牙设备。我正在考虑使用 subprocess.call()
在 Python 中使用 bash 命令,但我不确定这是否是个好主意。
感谢您的帮助。
我终于可以使用 PyBlueZ 连接到设备了。我希望这个答案将来能对其他人有所帮助。我尝试了以下方法:
首先,导入模块并发现设备。
import bluetooth, subprocess
nearby_devices = bluetooth.discover_devices(duration=4,lookup_names=True,
flush_cache=True, lookup_class=False)
当您发现要连接的设备时,您需要知道端口、地址和密钥。使用该信息执行下一步:
name = name # Device name
addr = addr # Device Address
port = 1 # RFCOMM port
passkey = "1111" # passkey of the device you want to connect
# kill any "bluetooth-agent" process that is already running
subprocess.call("kill -9 `pidof bluetooth-agent`",shell=True)
# Start a new "bluetooth-agent" process where XXXX is the passkey
status = subprocess.call("bluetooth-agent " + passkey + " &",shell=True)
# Now, connect in the same way as always with PyBlueZ
try:
s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
s.connect((addr,port))
except bluetooth.btcommon.BluetoothError as err:
# Error handler
pass
现在,您已连接!!您可以使用您的套接字来完成您需要的任务:
s.recv(1024) # Buffer size
s.send("Hello World!")
PyBlueZ 官方文档可用here