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

使用bluepy.btle库在Python中进行蓝牙通信

发布时间:2023-12-27 14:18:24

bluepy.btle是一个Python库,用于与蓝牙设备进行低功耗蓝牙(BLE)通信。它提供了一个简单易用的API,用于扫描设备、连接/断开连接设备、读取和写入设备的特征值等操作。下面是一个使用bluepy.btle库进行蓝牙通信的示例。

首先,我们需要安装bluepy库。在终端中运行以下命令:

pip install bluepy

接下来,我们可以创建一个Python脚本,并引入bluepy.btle库:

from bluepy import btle

在我们开始与蓝牙设备通信之前,我们需要进行设备扫描,并获取设备的MAC地址。下面是一个简单的设备扫描程序:

scanner = btle.Scanner()

devices = scanner.scan(10)  # 扫描10秒钟,获取设备信息

for device in devices:
    print("Device name:", device.getValueText(9))  # 获取设备名称
    print("Device MAC address:", device.addr)  # 获取设备MAC地址
    print("RSSI:", device.rssi)  # 获取设备信号强度
    print()

当我们获得设备的MAC地址后,我们可以使用btle.Peripheral类来连接设备,并进行通信。下面是一个连接设备并读取特征值的示例:

device_mac = "XX:XX:XX:XX:XX:XX"  # 替换为你要连接的设备的MAC地址

device = btle.Peripheral(device_mac)  # 连接设备

services = device.services  # 获取设备的所有服务

for service in services:
    print("Service UUID:", service.uuid)  # 打印服务的UUID
    print()

characteristics = device.getCharacteristics()  # 获取设备的所有特征值

for characteristic in characteristics:
    print("Characteristic UUID:", characteristic.uuid)  # 打印特征值的UUID
    print("Characteristic value:", characteristic.read())  # 读取特征值的值
    print()

通过characteristic.read()方法,我们可以读取特征值的值。我们还可以使用characteristic.write()方法向特征值写入数据。

此外,我们还可以使用btle.DefaultDelegate类来处理通知和指示的回调。下面是一个处理通知和指示的示例:

class NotificationDelegate(btle.DefaultDelegate):
    def handleNotification(self, cHandle, data):
        print("Notification received on handle:", cHandle)
        print("Data:", data)

device.setDelegate(NotificationDelegate())

while True:
    if device.waitForNotifications(1.0):
        continue

在这个示例中,我们定义了一个NotificationDelegate类来处理通知和指示。通过device.setDelegate()方法,我们将该委托类与设备关联起来。然后,我们使用device.waitForNotifications()方法来等待通知和指示的到来。

以上是一个简单的使用bluepy.btle库进行蓝牙通信的示例。通过该库,我们可以方便地与蓝牙设备进行连接、断开连接、读取和写入特征值等操作。您可以根据自己的需求进一步扩展该示例。