bluetooth与hciconfig的区别
hciconfig 和 bluetoothctl 的主要区别如下:
权限问题
hciconfig:
较旧的工具,直接操作蓝牙硬件,通常需要管理员权限(root),否则会报“Operation not permitted”错误。
bluetoothctl:
较新的工具,通过 bluetoothd 服务和 D-Bus 通信,通常不需要管理员权限。
功能实现方式
hciconfig:底层工具,直接配置蓝牙适配器,可能与现代蓝牙管理工具(如 bluetoothd)冲突。
bluetoothctl:高级工具,通过 bluetoothd 服务管理蓝牙设备,通过 D-Bus 通信,不直接操作硬件。
系统服务管理
hciconfig:需要手动管理蓝牙服务(如 bluetoothd),可能与其他服务冲突。
bluetoothctl:依赖系统自动管理的 bluetoothd 服务(一个基于sudo权限的守护进程),用户只需发送指令,bluetoothd 处理具体操作。
问题
我碰到的问题,hciconfig hci0 down关闭蓝牙的时候提示权限不足。
hciconfig连接蓝牙设备后,可以通过
Connection from A8:C5:6F:0D:ED:AE to /dev/rfcomm0
类似的语句映射到文件,cat直接读取文件的值,或者直接echo>向文件发送数据,就能实现数据交互。
bluetoothctl基于GATT数据格式,
GATT(Generic Attribute Profile) 是蓝牙低功耗(BLE)中用于定义设备间数据传输和交互的通用规范。它基于 ATT(Attribute Protocol) 协议实现数据的传输和管理
GATT
. 基本概念
-
GATT 服务器(GATT Server):存储数据的设备,通常是外围设备(Peripheral),如传感器或智能手表
-
GATT 客户端(GATT Client):访问 GATT 服务器数据的设备,通常是中心设备(Central),如智能手机
GATT 数据结构基于以下三个主要概念:
Profile:预定义的服务集合,用于实现特定功能 。
Service:逻辑数据实体,包含一个或多个 Characteristic 。每个 Service 通过一个唯一的 UUID(16 位或 128 位)标识 。
Characteristic:封装单个数据点(或相关数据数组),如心率测量 。每个 Characteristic 也有一个唯一的 UUID。
数据传输 ATT 协议:
GATT 使用 ATT 协议在设备间传输数据。
ATT 定义了数据的格式化方式和交互过程 。
属性(Attribute):ATT 中的基本数据单元,包含 Attribute Handle(索引)、Attribute Type(UUID)、Attribute Value(数据值)和 Attribute Permissions(访问权限) 。
交互过程
发现过程:客户端通过特定的 ATT 操作(如 Discover All Primary Services)来发现服务器上的服务和特性 。
读写操作:客户端可以读取或写入 Characteristic 的值,通过 ATT 的 Read 和 Write 操作 。 通知和指示:服务器可以通过 Notification 或 Indication 向客户端发送数据更新 。