Python使用Bleak库蓝牙低能耗(BLE)设备进行通信

Bleak 是一个跨平台的 Python 库,用于与蓝牙低能耗(BLE)设备进行通信。它提供了简化的 API 来连接、读取和写入蓝牙设备的特性。Bleak 支持 Windows、Mac 和 Linux 等平台,并且可以与各种蓝牙设备进行交互。

以下是使用 Bleak 库的基本方法:

安装 Bleak

首先,确保安装了 bleak 库,可以通过 pip 安装:

pip install bleak

1. 扫描可用的蓝牙设备

你可以使用 BleakScanner 来扫描附近的 BLE 设备。

import asyncio
from bleak import BleakScanner

async def scan_devices():
    devices = await BleakScanner.discover()
    for device in devices:
        print(f"Device found: {device.name} ({device.address})")

# 启动扫描
asyncio.run(scan_devices())

2. 连接到 BLE 设备

连接到蓝牙设备时,需要使用 BleakClient。在连接之前,你需要获取设备的地址(通常是 MAC 地址)或设备名称。

import asyncio
from bleak import BleakClient

async def connect_device(address):
    async with BleakClient(address) as client:
        connected = await client.is_connected()
        print(f"Connected: {connected}")
        # 获取设备的所有特性
        services = await client.get_services()
        print(f"Services: {services}")

# 使用设备的地址来连接
device_address = "XX:XX:XX:XX:XX:XX"  # 替换为实际设备地址
asyncio.run(connect_device(device_address))

3. 读取蓝牙特性

每个蓝牙设备都有特性(Characteristics),你可以使用 BleakClient 读取设备的特性。

import asyncio
from bleak import BleakClient

async def read_characteristic(address, characteristic_uuid):
    async with BleakClient(address) as client:
        value = await client.read_gatt_char(characteristic_uuid)
        print(f"Value: {value}")

# 替换为设备地址和特性UUID
device_address = "XX:XX:XX:XX:XX:XX"
characteristic_uuid = "00002a37-0000-1000-8000-00805f9b34fb"  # 示例UUID
asyncio.run(read_characteristic(device_address, characteristic_uuid))

4. 写入蓝牙特性

可以通过 BleakClient 向蓝牙设备写入特性值。确保设备允许写操作。

import asyncio
from bleak import BleakClient

async def write_characteristic(address, characteristic_uuid, data):
    async with BleakClient(address) as client:
        await client.write_gatt_char(characteristic_uuid, data)
        print(f"Wrote {data} to characteristic {characteristic_uuid}")

# 替换为设备地址和特性UUID
device_address = "XX:XX:XX:XX:XX:XX"
characteristic_uuid = "00002a37-0000-1000-8000-00805f9b34fb"  # 示例UUID
data = bytearray([0x01, 0x02])  # 示例数据
asyncio.run(write_characteristic(device_address, characteristic_uuid, data))

5. 监听通知

Bleak 允许监听设备特性上的通知。通知通常用于蓝牙设备定期发送数据更新。

import asyncio
from bleak import BleakClient

async def notification_handler(sender: int, data: bytearray):
    print(f"Received data: {data}")

async def enable_notifications(address, characteristic_uuid):
    async with BleakClient(address) as client:
        await client.start_notify(characteristic_uuid, notification_handler)
        await asyncio.sleep(5)  # 接收通知的持续时间
        await client.stop_notify(characteristic_uuid)

# 替换为设备地址和特性UUID
device_address = "XX:XX:XX:XX:XX:XX"
characteristic_uuid = "00002a37-0000-1000-8000-00805f9b34fb"  # 示例UUID
asyncio.run(enable_notifications(device_address, characteristic_uuid))

6. 断开连接

BleakClientasync with 语句块结束时会自动断开连接。如果你不使用 async with,可以显式调用 client.disconnect() 来断开连接。

import asyncio
from bleak import BleakClient

async def disconnect_device(address):
    client = BleakClient(address)
    await client.connect()
    print(f"Connected: {await client.is_connected()}")
    await client.disconnect()
    print("Disconnected")

device_address = "XX:XX:XX:XX:XX:XX"
asyncio.run(disconnect_device(device_address))

总结

Bleak 提供了简化的接口来处理 BLE 设备的扫描、连接、读取和写入操作。上面的示例展示了如何与蓝牙设备进行基本的交互。你可以根据自己的需求,修改 UUID、设备地址等参数来与具体的蓝牙设备进行通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值