Bleak库使用指南:BLE设备连接与数据交互
前言
Bleak是一个基于Python的异步BLE(蓝牙低功耗)客户端库,它提供了简洁的API来与蓝牙设备进行交互。本文将详细介绍如何使用Bleak库连接BLE设备并进行数据读写操作。
基本概念
在开始使用前,需要了解几个关键概念:
- BLE设备地址:每个BLE设备都有一个唯一的MAC地址,格式通常为"XX:XX:XX:XX:XX:XX"
- GATT特性(UUID):BLE设备通过GATT协议提供服务,每个服务包含多个特性,每个特性都有唯一的UUID标识
- 特性操作:可以读取(read)、写入(write)特性值,或订阅(notify)特性值变化
连接BLE设备
Bleak提供了两种连接设备的方式:
方式一:使用异步上下文管理器(推荐)
import asyncio
from bleak import BleakClient
address = "24:71:89:cc:09:05"
MODEL_NBR_UUID = "2A24"
async def main(address):
async with BleakClient(address) as client:
model_number = await client.read_gatt_char(MODEL_NBR_UUID)
print("Model Number: {0}".format("".join(map(chr, model_number))))
asyncio.run(main(address))
这种方式会自动管理连接的生命周期,在退出上下文时自动断开连接。
方式二:手动管理连接
import asyncio
from bleak import BleakClient
address = "24:71:89:cc:09:05"
MODEL_NBR_UUID = "2A24"
async def main(address):
client = BleakClient(address)
try:
await client.connect()
model_number = await client.read_gatt_char(MODEL_NBR_UUID)
print("Model Number: {0}".format("".join(map(chr, model_number))))
except Exception as e:
print(e)
finally:
await client.disconnect()
asyncio.run(main(address))
这种方式需要手动调用connect()和disconnect()方法,适合需要更精细控制连接流程的场景。
特性操作注意事项
在Bleak 0.7.0及以上版本中,需要注意以下事项:
- 一个BLE外设可能有多个具有相同UUID的特性
- 现在可以通过以下方式指定特性:
- 特性UUID(字符串形式)
- 特性句柄(handle)
- BleakGATTCharacteristic对象本身
这些方式适用于以下方法:
- read_gatt_char
- write_gatt_char
- start_notify
- stop_notify
最佳实践
- 脚本命名:不要将脚本命名为
bleak.py
,这会导致循环导入错误 - 连接管理:确保在使用完客户端后总是调用disconnect方法,操作系统蓝牙栈可能需要清除缓存在BleakClient中的残留数据
- 错误处理:使用try-except块捕获可能的异常,确保资源被正确释放
- 长连接:如果需要保持长时间连接,需要实现心跳机制或重连逻辑
进阶使用
除了基本的读取特性值外,Bleak还支持:
- 写入特性值
- 订阅特性通知
- 发现服务和特性
- 读取RSSI值
- 设备配对等高级功能
建议参考官方示例代码学习这些高级用法。
总结
Bleak库提供了简洁而强大的API来与BLE设备交互。通过本文介绍的基本用法,开发者可以快速上手实现BLE设备的连接和数据读写。在实际开发中,应根据具体需求选择合适的连接管理方式,并注意资源释放和错误处理,以确保应用的稳定性和可靠性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考