You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 00:52:55