【Bluetooth LE】Bluez中Bluetoothctl指令详解(连接iPhone为例)

写在前面

写这篇博客的初衷是使用ubantu上面的bluez测试硬件设备的BLE功能时遇到了不少坑,在这里记录下,也希望可以帮助其他小伙伴少踩坑。网上一搜,很多资源都是在讲gatttool。但是这个工具总是在连接之后十几秒的时间就提示:GLib-WARNING **: Invalid file descriptor,进而断开BLE的连接,加上它已经是属于已弃用的Bluez工具(弃用工具看这里)。所以推荐使用Bluetoothctl工具。

准备硬件和软件

ubantu&bluez版本

  • ubantu版本 Ubuntu 7.5.0-3ubuntu1~18.04)
  • 终端输入bluetoothctl查看bluez版本
    在这里插入图片描述
    本文所有的指令都是基于该bluez的版本
  • 终端输入hciconfig -a查看蓝牙版本
    在这里插入图片描述

iPhone&LightBlue

在苹果APP Store中下载lightblue APP,按照以下步骤设置虚拟蓝牙设备,用来测试Bluetoothctl的指令。

  • 打开苹果手机蓝牙;
  • 打开LightBlue-》Virtual Devices,点击右上角的‘+’,选择一个‘Blank’的设备(我为了好辨认,把名blank改掉了);
  • 添加1个service,service名字自定义为Lzchar,value为0x77, 选择支持read,write和notify,保存配置后,虚拟BLE设备设置完毕;
    在这里插入图片描述
    在这里插入图片描述
  • 在LightBlue界面上勾选该虚拟设备,这时,其他设备就可以扫描到Alias为Lztest的BLE设备;
    在这里插入图片描述

Bluetoothctl指令列表

在ubantu的终端输入sudo bluetoothctl 开启
在这里插入图片描述
help查看支持的指令
在这里插入图片描述

Bluetoothctl常用指令详解

以下指令都需要先输入sudo bluetoothctl 进入工具操作页面。

  • scan 搜索蓝牙设备
    输入scan on 开始搜索设备;
    输入scan off 停止搜索;
    在这里插入图片描述
  • connect 连接BLE设备
    输入connect BLE MAC 连接指定BLE设备,连接成功会提示connect successfully, 第一次连接成功后,会把该BLE设备支持的属性都显示出来;无法搜索到指定设备,会提示not available
    在这里插入图片描述
  • disconnect 断开设备连接
  • menu gatt 进入gatt子目录;注意下,想要操作连接,断开等,需要先输入back回到主目录才行。
    如果需要查询BLE设备的服务,特性和描述符,就需要进入到menu gatt,进入之后,会显示出来支持的gatt操作;
    在这里插入图片描述
  1. list-attribution 显示设备支持的所有属性
    在BlueLight中虽然只写了1个service,但是虚拟BLE设备lztest包含了iphone支持的全部的service,根据UUID找到前面设置的BLE虚拟设备的service,后面所有命令都是操作该service为;
    在这里插入图片描述
  2. select-attribution 选择某个属性。当需要对某个属性进行read,write或者开启notify时,就需要先进入到该属性,之后更改;
  3. attribute-info查看当前属性的信息,进入到虚拟BLE设备中新增的属性,可以看到前面设置好的属性支持read,write和notify,notify默认是关闭状态
    在这里插入图片描述
  4. read通过#2进入属性,之后输入read即可,可以读到前面设置的0x77
    在这里插入图片描述
    描述符的值也是可以直接read获取的,比如前面设置的lzchar的属性值名字
    在这里插入图片描述
  5. write通过#2进入属性,之后输入write data,如果是一个字节,write 0xaa,如果多个字节,write '0xaa 0xbb',写入没有报错的话,就说明成功,查看iPhone上虚拟BLE设备中该属性的值已经变成0xAABB
    在这里插入图片描述
    在这里插入图片描述
    7.notify on可以开启属性值的变动通知,还是选择进入该属性,输入notify on即可开启。 还是以虚拟设备的属性为例,开启通知后,在iPhone上面修改属性值为0xaa 0xbb 0xcc,这时可以在电脑界面上直接看到新的值的通知。有一点要注意的是,想要查看到某个属性通知过来的消息,就必须提前选择该属性,否则是看不到的。不需要的时候输入notify off即可
    在这里插入图片描述
    另外,上面有提到通知默认的是00002902这个UUID,就是所谓的CCCD,在实际应用的时候,如果想要开启通知,也可以在某个特性下面找到这个UUID的描述符,把值改成0x0001即可。比如上面开启了notify,去查看下CCCD,该值是01 00,小端模式,所以实际值是0x0001,关闭notify后,再去读取CCCD的值,就是00 00
    在这里插入图片描述

Bluez其他工具

  • monitor工具
    cd Bluez/monitor/btmon 之后,打开btmon,就会一直处于监控BLE消息的状态,ubantu作为client和iPhone的所有交互数据都可以看到,需要调查一些问题时很有用,比如检查MTU大小,是否读写成功等

读写相关:
在这里插入图片描述

连接成功和失败也可以查看到原因,这里不截图示意了。另外连接成功,会有MTU的显示,如果出现丢包,截包等情况,可以查看MTU
在这里插入图片描述

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值