在python中将蓝牙设备与Passkey / Password配对-RFCOMM(Linux)

发布于 2021-01-29 15:21:30

我正在研究Python脚本,以搜索蓝牙设备并使用 RFCOMM
连接它们。该设备具有密码/密码。我正在使用PyBlueZ,据我所知,该库无法处理密码/密码连接(Python
PyBluez连接到密码受保护的设备
)。

我能够发现设备并检索其名称和地址:

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)'

我使用 hcitoolbluetooth-agent
尝试了一些bash命令,但是我需要以编程方式进行连接。我能够使用此处描述的步骤连接到我的设备:如何在Linux上从命令行配对蓝牙设备

我想问问是否有人使用Python使用Passkey /
Password连接到蓝牙设备。我正在考虑使用Python在bash命令中使用bash命令subprocess.call(),但是我不确定这是否是一个好主意。

谢谢你的帮助。

关注者
0
被浏览
161
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    最后,我能够使用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文档可在此处获得



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看