在 bluetoothctl
工具中,menu gatt
是用于切换到 GATT(Generic Attribute Profile)菜单模式 的指令,专门用于管理低功耗蓝牙(BLE)设备的服务和特征值(Characteristics)。以下是详细用法和常见操作:
1. 进入 GATT 菜单
[bluetooth]# connect <MAC地址> # 先连接目标BLE设备
[bluetooth]# menu gatt # 切换到GATT菜单
[bluetooth][gatt]# # 提示符变为[gatt]表示进入成功
2. GATT 菜单下的关键指令
(1) 列出所有服务/特征值
- 查看所有服务:
输出示例: “` Service /org/bluez/hci0/dev_AA_BB_CC_DD_EE_FF/service0010 UUID: 0000180a-0000-1000-8000-00805f9b34fb (Device Information) …[bluetooth][gatt]# list-attributes
Characteristic /org/bluez/hci0/dev_AA_BB_CC_DD_EE_FF/service0010/char0011
UUID: 00002a29-0000-1000-8000-00805f9b34fb (Manufacturer Name String)
Flags: read
...
#### **(2) 读取特征值数据**
```bash
[bluetooth][gatt]# select-attribute <属性路径> # e.g., /org/bluez/.../char0011
[bluetooth][gatt]# read # 读取当前选中的特征值
输出示例:
Attempting to read /org/bluez/.../char0011
[CHG] Attribute /org/bluez/.../char0011 Value: [54,65,73,74] ("Test")
(3) 写入特征值数据
[bluetooth][gatt]# write <HEX或ASCII数据> # e.g., write "48656c6c6f" (Hello的HEX)
(4) 启用通知(Notify)
[bluetooth][gatt]# notify on # 开启通知监听
设备主动推送的数据会实时显示在终端。
3. GATT路径的简化输入
如果手动输入长路径困难,可以:
- 用Tab补全:输入部分路径后按
Tab
。 - 直接复制路径:从
list-attributes
的输出中复制完整路径。
4. BLE调试技巧
(1) HCI层日志监控
打开新终端运行以下命令,观察底层通信:
sudo btmon | grep -i "ATT"
(2) Python自动化替代
对于复杂操作,推荐使用Python库 bleak
:
from bleak import BleakClient
async def read_char():
async with BleakClient("<MAC>") as client:
value = await client.read_gatt_char("<UUID>")
print("Read:", bytes(value).decode())
asyncio.run(read_char())
⚠️注意事项
- 权限问题:确保用户有访问蓝牙设备的权限(通常需要
bluetooth
组)。 - 协议支持:目标设备需实现GATT协议,且特征值具有读写权限(通过
Flags
字段确认)。 - 交互限制:
menu gatt
仅适用于BLE设备,经典蓝牙需用RFCOMM/L2CAP。
内容由零声教学AI助手提供,问题来源于学员提问