GATT 数据传输

数据传输模式

模式 ATT Opcode 确认 适用场景
Read 0x0A/0x0B 需要 配置读取、状态查询
Write 0x12/0x13 需要 控制指令、写入确认
Write Without Response 0x52 不需要 大数据流、按键事件
Notify 0x1B 不需要 传感器数据、心率
Indicate 0x1D 需要 重要告警、OTA 升级

📊 MTU 协商

// MTU: 默认 23 bytes, BLE 5.0 最大 512 bytes
// 性能对比:
// MTU=23: 每次传输 20 字节
// MTU=512: 每次传输 509 字节 (提升 25 倍)

📊 常用 UUID

服务/特征 UUID
电池服务 180f
电池电量 2a19
心率服务 180d
心率测量 2a37
设备信息 180a

跨平台代码示例

Python - bleak 库

import asyncio
from bleak import BleakClient

async def ble_demo():
    client = BleakClient("AA:BB:CC:DD:EE:FF")
    await client.connect()
    # 读取
    data = await client.read_gatt_char("2a19")
    # 通知
    await client.start_notify("2a37", callback)
    await asyncio.sleep(10)

Go - go-ble 库

import "github.com/go-ble/ble"

cln, err := ble.Connect(ctx, addr)
chars, _ := cln.DiscoverCharacteristics(nil, svc)
cln.Read(chars[0])

微信小程序

// 微信小程序
wx.createBLEConnection({ deviceId })
wx.getBLEDeviceServices({ deviceId })
wx.notifyBLECharacteristicValueChange({ ... })
wx.onBLECharacteristicValueChange(cb)