1

我正在编写一个涉及使用蓝牙设备的 python 程序。现在我可以从 python 程序连接到蓝牙设备,但是每次我退出 python 程序时,我都必须将我的设备包带入配对模式(通过拉开关),然后再次配对。我希望你能展示任何我可以自动连接到配对设备的方法,而不是每次运行 python 程序时将其置于配对模式并再次连接。

这是我的蓝牙 python 模块的代码:

import bluetooth
from bluetooth.btcommon import BluetoothError
import time

class DeviceConnector:

TARGET_NAME = "Device name"
TARGET_ADDRESS = None
SOCKET = None

def __init__(self):
    pass

def getConnectionInstance(self):
    self.deviceDiscovery()
    if(DeviceConnector.TARGET_ADDRESS is not None):
        print('Device found!')
        self.connect_bluetooth_addr()
        return DeviceConnector.SOCKET
    else:
        print('Could not find target bluetooth device nearby')

def deviceDiscovery(self):
    try:
        nearby_devices = bluetooth.discover_devices(lookup_names = True, duration=5)
        while nearby_devices.__len__() == 0 and tries < 3:
            nearby_devices = bluetooth.discover_devices(lookup_names = True, duration=5)
            tries += 1
            time.sleep (200.0 / 1000.0)
            print ('couldnt connect! trying again...')
        for bdaddr, name in nearby_devices:
            if bdaddr and name == DeviceConnector.TARGET_NAME:
                DeviceConnector.TARGET_ADDRESS = bdaddr
                DeviceConnector.TARGET_NAME = name
    except BluetoothError as e:
        print ('bluetooth is off')

def connect_bluetooth_addr(self):
    for i in range(1,5):
        time.sleep(1)
        sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
        try:
            sock.connect((DeviceConnector.TARGET_ADDRESS, 1))
            sock.setblocking(False)
            DeviceConnector.SOCKET = sock
            return
        except BluetoothError as e:
            print('Could not connect to the device')
    return None

谢谢 :)

4

1 回答 1

0

嗨,我不确定这是否能解决您的问题,但这可能会为您指明正确的方向。以下是执行 python 程序后将自动连接到目标蓝牙设备的代码。这是通过硬编码蓝牙设备的地址来完成的

import bluetooth


target_name = "enter your Bluetooth device name"
target_address = None

nearby_devices = bluetooth.discover_devices()

for bdaddr in nearby_devices:
    if target_name == bluetooth.lookup_name( bdaddr ):
        target_address = bdaddr
        break

if target_address is not None:
    print("found target bluetooth device with address ", target_address)
else:
    print("could not find target bluetooth device nearby")


bd_addr = target_address
print(bd_addr)

port = 1
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
于 2021-05-28T01:40:00.923 回答