如何用Python获取蓝牙设备的Service UUID并读取电池电量
获取BLE设备Service UUID并读取电池电量
一、获取目标设备的Service UUID
既然已经能成功连接设备,最直接的方式是在连接后枚举设备的所有服务和特征,从中找到需要的UUID:
修改你的代码,添加遍历服务的逻辑:
import asyncio from bleak import BleakClient async def main(): address = "CB:07:9F:D6:58:BD" async with BleakClient(address) as client: print("已连接设备,正在枚举服务...") # 遍历所有服务 for service in client.services: print(f"\n服务UUID: {service.uuid}") print(" 特征列表:") # 遍历当前服务下的所有特征 for char in service.characteristics: print(f" - 特征UUID: {char.uuid}, 支持操作: {char.properties}") print(client.is_connected) asyncio.run(main())
运行这段代码后,控制台会输出设备所有的服务和对应的特征UUID,以及每个特征支持的操作(比如read、notify等)。你可以从中找到标注为“Battery Service”的服务(通常对应标准UUID 0000180f-0000-1000-8000-00805f9b34fb),以及它下面的电池电量特征(标准UUID 00002a19-0000-1000-8000-00805f9b34fb)。
二、读取电池电量数据
找到对应的特征UUID后,就可以用client.read_gatt_char()方法读取电量数据:
import asyncio from bleak import BleakClient # 电池服务的标准特征UUID,也可以替换成你扫描到的自定义UUID BATTERY_CHAR_UUID = "00002a19-0000-1000-8000-00805f9b34fb" async def main(): address = "CB:07:9F:D6:58:BD" async with BleakClient(address) as client: if client.is_connected: # 读取电池电量特征值 battery_data = await client.read_gatt_char(BATTERY_CHAR_UUID) # 转换为整数(电池电量通常是0-100的单字节值) battery_level = int.from_bytes(battery_data, byteorder="little") print(f"当前电池电量: {battery_level}%") print(client.is_connected) asyncio.run(main())
三、其他功能的UUID获取与数据交互
对于其他功能的Service UUID,同样可以通过第一步的枚举代码找到对应的服务和特征。根据特征支持的操作:
- 如果支持
read,用client.read_gatt_char(uuid)读取数据 - 如果支持
write,用client.write_gatt_char(uuid, data)写入数据(注意数据需要是字节格式) - 如果支持
notify,可以用client.start_notify(uuid, callback)注册回调函数,实时接收数据
内容的提问来源于stack exchange,提问作者Pradeesh R
相关产品推荐
相关产品推荐

