在打开蓝牙设备以后,就可以使用hcitool工具集对蓝牙进行控制,工具集参数 分为两部分,一为正常的蓝牙设备调试,二为低功耗即BLE设备,工具参数如下表1所示:
表1 hcitool常用命令
常用命令 |
说明 |
调用方式 |
参数 |
|
|
dev |
同hciconfig一样,显示当前适配器设备,输出格式为[hciid MAC] |
hcitool dev |
scan |
查询可发现的远程设备,与inq不同的是,除了能查询出MAC以外,还可以输出设备的名字【名字写在标准的module中,若查询不到该key对应的values则会输出N/A】,可以通过设置参数来获取设备的类型,信息等 |
hcitool scan |
name |
通过指定MAC地址来获取设备的名称,该命令可以补全inq查询时无法输出设备名称的问题. |
hcitool name [dbaddr] |
cmd |
向远程设备发送命令 |
hcitool cmd < ogf > < ocf > [parameters] |
con |
显示当前连接信息 |
hcitool con |
cc |
连接设备,可以设置数据类型,与主从关系 |
hcitool cc < bdaddr > |
auth |
请求设备配对认证 |
hcitool auth < bdaddr> |
BLE设备命令 |
以下命令需要root权限才能执行 |
|
lescan |
搜索BLE设备 |
hcitool lescan |
|
|
hcitool lescan[–privacy]启用隐私搜索 |
|
|
hcitool lescan [–passive]默认参数,设置被动扫描 |
|
|
hcitool lescan [–discovery=g/l] 设置搜索条件为综合设备或限制设备 |
|
|
hcitool lescan [–duplicates]过滤重复的设备 |
lewladd |
将设备加入BLE白名单 |
hcitool lewladd [–random] < bdaddr>可声明该设备的MAC地址为随机地址,有的BLE设备可以被设置为随机MAC地址以增加私密性,为以后也能连接到该MAC地址,需要声明MAC地址是随机,这样才能用旧的MAC地址连接到设备 |
lewlrm |
将设备移除BLE白名单 |
hcitool lewlrm < bdaddr> |
lewlsz |
输出白名单设备列表 |
hcitool lewlsz |
lewlclr |
清空白名单列表 |
hcitool lewlclr |
lecc |
连接BLE设备 |
hcitool lecc < bdaddr> |
|
|
hcitool lecc [–random] < bdaddr>随机MAC地址连接 |
|
|
hcitool lecc –whitelist 连接所有白名单设备 |
ledc |
断开BLE设备的连接。在通过lecc链接后,hci工具会随机分配给该设备一个handle名,断开连接时需要使用该handle,因为在蓝牙4.0以后,一个蓝牙适配器可以连接7个BLE设备 |
hcitool ledc < handle> [reason] |
lecup |
更新BLE设备的连接及状态 |
hcitool lecup [Options] |
如果说使用hcitool是为了对设备的连接进行管理,那么对BLE数据进行精细化管理的话,就需要用到gattool。此外,使用gattool对蓝牙设备发送指令的操作上要比hcitool的cmd齐全很多。
关于gattool的使用分为两种,一种直接使用参数对蓝牙设备进行控制;二就是使用-I参数进入gattool的interactive模式对蓝牙设备进行控制。该工具的参数如图2-1所示。
图2-1 gatttool工具参数
表2 gatttool常用命令集
参数 |
说明 |
调用方式 |
-i |
指定适配器 |
gatttool -i < hciX> -b < MAC Address> |
-b |
指定远程设备,在连接多个设备的情况下需要指定控制某一设备 |
gatttool -b < bdaddr> |
-m |
设置数据包长度 |
-m MTU |
–sec-leve |
设置数据发送级别,默认情况下是low,需要高频发射数据的情况下需要将级别设置为high,但相应的耗电会上升 |
gatttool -b < MAC Address> -l [low/medium/high] |
-I |
进入interactive模式 |
gatttool -b < MAC Address> -I |
|
以下参数可以直接在interactive模式下使用,也可以在命令行直接使用 |
|
–primary |
寻找BLE中可用的服务 |
gatttool -b < MAC Address> –primary |
–characteristics |
查看设备服务的特性,其中handle是特性的句柄,char properties是特性的属性值,char value handle是特性值的句柄,uuid是特性的标识。 |
gatttool -b < MAC Address> –characteristics |
–char-write-cmd |
往某个handle写入指定的数值 |
char-write-cmd –handle=0xXXXX -value=0100 –listen |
–char-write-req |
读取notifications里的内容,可以设置listen来开启监听否则每次只读一次,监听读取notifications时需要向该handle写入一个1,在命令行中16进制的表示为0100,若向该handle写入0200的话则改为读取indications的内容 |
gatttool -b < MAC Address> –char-write-req –handle=0xXXXX –value=0100 –listen |
ios系统的手机可以下载APP:BLE Utility;lightBlue。
android手机可以下载APP:BLE Device Monitor。
这三种工具可以让手机通过蓝牙与BLE设备进行通信,例如读取BLE设备某些特征值的值;往特征值写入指定命令控制BLE设备等等。
下面BLE Utility为例,图2-2为BLE Utility扫描到的低功耗设备;图2-3为小米手环1某个服务下的所有特征值及该特征值的属性(读,写,通知);图2-4为小米手环的某项服务下的特征值,BLE Utility可直接往该特征值写入数据来控制小米手环的震动,震动分为4级,可通过发送命令参数(0-4)来控制小米手环1震动。
图2-2低功耗设备 图2-3MI特征值 图2-4写入数据
命令:hcitool lescan
解释:扫描周围的低功耗蓝牙设备。
扫描结果如图2-1所示,其中mac地址以C8:开头的设备是本次设备实验的对象——小米手环。(由于版本原因:使用hcitool lescan不能很好的识别设备名字)
图3-1 BLE设备扫描示意图
命令: 作用
gatttool -b C8:0F:10:1B:CE:5E -I 进入interactive模式与指定蓝牙设备通讯
>connect 与BLE设备连接。
>primary 寻找BLE中可用的服务。(如图2-2所示)
>characteristics 查看设备服务的特征值。(如图2-3所示)
>char-read-hnd 0x0009 读取特征值对应句柄的数值。(如图2-4所示)
>char-write-cmd 0x0053 03 发送03命令到句柄0x0023(控制手环震动)
>sec-level high 设置安全等级为高,可以让手环长时间与 Ubuntu保持连接。
图3-2 BLE设备可用服务
图3-3 BLE设备服务对应的特征值
图3-4 与BLE设备通信截图
命令:gatttool --help-gatt
解释:展示gatttool命令,具体参数如图3-5所示,我们主要使用--char-write向BLE设备的特征值写入数据;使用--char-read读取BLE设备上的数据;可使用参数--characteristics和--primary 来查看BLE设备的相关服务和对应的特征值。
图3-5 GATT 命令
命令:gatttool -b C8:0F:10:1B:CE:5E --char-read -a 0x0003
解释:读取小米手环的名字。如图3-6所示,读取句柄0x0003 返回4d 49(MI),查询ASCII得4D对应的是M。49对应的是I。
图3-6 读取命令操作示意图
命令:gatttool -b C8:0F:10:1B:CE:5E --char-write -a 0x0053 -n 04
解释:向小米手环的句柄0x0053发送参数04,该句柄用于控制小米手环的震动等级,发送给命令设置小米手环的震动等级(4级),同时手环会震动。
命令:gatttool -b C8:0F:10:1B:CE:5E --characteristics
解释:读取小米手环的特征值。
命令:gatttool -b C8:0F:10:1B:CE:5E ----primary
解释:查看小米手环的主要服务。
命令:gatttool -b C8:0F:10:1B:CE:5E --char-write-req -a 0x0009 -n 02
解释:往句柄为0x0009写入值02。