欢迎访问宙启技术站
智能推送

在Python中使用bluepy.btle库实现蓝牙数据传输

发布时间:2023-12-27 14:19:34

在Python中使用bluepy.btle库实现蓝牙数据传输的示例代码如下:

from bluepy import btle

class MyDelegate(btle.DefaultDelegate):
    def __init__(self):
        btle.DefaultDelegate.__init__(self)

    def handleNotification(self, cHandle, data):
        print("Received notification: {}".format(data))

class BluetoothDevice:
    def __init__(self, addr):
        self.addr = addr
        self.peripheral = None
        self.delegate = MyDelegate()

    def connect(self):
        self.peripheral = btle.Peripheral(self.addr)
        self.peripheral.withDelegate(self.delegate)

    def disconnect(self):
        if self.peripheral:
            self.peripheral.disconnect()

    def send_data(self, handle, data):
        self.peripheral.writeCharacteristic(handle, data)

    def listen_notifications(self):
        while True:
            if self.peripheral.waitForNotifications(1.0):
                continue

    def scan_devices(self, duration):
        scanner = btle.Scanner()
        devices = scanner.scan(duration)

        for dev in devices:
            if dev.addr == self.addr:
                return dev

# 示例用法
if __name__ == '__main__':
    addr = '00:00:00:00:00:00'  # 替换为你的蓝牙设备地址
    dev = BluetoothDevice(addr)

    try:
        dev.connect()

        dev_info = dev.scan_devices(5)  # 在指定时间内搜索并返回设备信息
        print("Device name: {}".format(dev_info.getValueText(9)))
        print("Device address: {}".format(dev_info.addr))

        handle = 0x0011  # 根据蓝牙设备的服务和特征的UUID获取对应的Handle
        data = b'\x01\x02\x03\x04'  # 要发送的数据

        dev.send_data(handle, data)  # 发送数据

        dev.listen_notifications()  # 监听数据通知

    except btle.BTLEException as e:
        print("Error: {}".format(str(e)))

    finally:
        dev.disconnect()

在示例代码中:

- MyDelegate继承自btle.DefaultDelegate,用于处理数据通知的回调;

- BluetoothDevice类封装了蓝牙设备的连接、断开、发送数据、监听数据通知等功能;

- scan_devices方法可以在指定时间内搜索蓝牙设备并返回设备信息;

- send_data方法用于发送数据到指定的handle;

- listen_notifications方法用于不断监听数据通知。

在使用时,需要将addr替换为实际的蓝牙设备地址,handle替换为实际的服务和特征的UUID对应的handle,data为要发送的数据。

以上代码仅为示例,实际使用中可能需要根据具体需求进行修改和扩展。