Bluez中Bluetoothctl指令详解

    • 写在前面
    • 准备硬件和软件
  • ubantu&bluez版本
  • iPhone&LightBlue
    • Bluetoothctl指令列表
    • Bluetoothctl常用指令详解
    • Bluez其他工具

写在前面

写这篇博客的初衷是使用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

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

  1. ATF中smc指令详解

    1 ATF的smc指令调用流程 在REE侧调用smc异常之后,会根据中断向量表触发cpu的同步异常sync_exception_aarch64/32,然后跳转执行到handle_sync_except ...

  2. arm-linux-ld中的参数,arm-linux-ld指令详解

    arm-linux-ld指令详解 我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的,我们首先要考虑的如何组合起来:其次,这些.o文件存在相互调用的关系 ...

  3. java中Freemarker list指令详解

    java Freemarker中list指令主要是进行迭代服务器端传递过来的List集合. 定义 <#list nameList as names> ${names} </#list ...

  4. C#中的预处理指令详解

    这篇文章主要介绍了C#中的预处理指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregion ...

  5. Linux中的ps指令详解

    [时间]2018.12.16 [题目]Linux中的ps指令详解 转载地址:https://www.cnblogs.com/exe19/p/5511733.html 概述 要对进程进行监测和控制,首先 ...

  6. Linux中iptraf命令详解(IP局域网监控工具)

    2019独角兽企业重金招聘Python工程师标准>>> Linux中iptraf命令详解(IP局域网监控工具) 发布时间:2017-12-27 20:46:03   作者:佚名    ...

  7. 九爷带你了解 nginx 日志配置指令详解

    nginx日志配置指令详解 日志对于统计排错来说非常有利的. 本文总结了nginx日志相关的配置如 access_log.log_format.open_log_file_cache.log_not_ ...

  8. movsb movsw movsd 指令详解

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u013490896/article/d ...

  9. linux中yum命令详解

    yum是干什么的 使用redhat,fedora的linuxer肯定都为rpm著名的dependency hell而头疼(这也是所有基于rpm发行版都有的问题).foo is needed by ba ...

最新文章

  1. 算法笔记-归并算法面试题、逆序数问题
  2. statistics DATA in CHINA
  3. 关于凸优化的一些简单概念
  4. 为什么建议使用Linux?从“白嫖”到精通,只需要这几步
  5. C# :socket 通讯基础使用实例
  6. [bbk2907]第3集 - Chapter 02 - RAC的安装过程中需要注意的要点
  7. Python3+TensorFlow人脸识别:1-1课程导学
  8. 算法(三):图解广度优先搜索算法
  9. php脚本语法格式,[PHP学习笔记][五]PHP基本语法规则
  10. python中创建类的作用_Python中类的创建与使用详解
  11. 依码仕喷码机编程指南
  12. BPSK调制与解调-MATLAB基带仿真
  13. 下列选项中不是具体的python序列类型的是_以下选项中,不是具体的Python序列类型的是...
  14. 保边滤波之Mean shift filter
  15. SAP、ERP、OA名词解释,SAP与ERP区别; ERP与OA区别
  16. 自定义控件之仿电话簿汉字排序侧边拼音
  17. java jimi_Java开源工具Jimi处理图片大小及格式转换
  18. 推荐几款软件界面模型设计工具
  19. 室内停车场地图定位-停车场地图定位导航
  20. excel 使用技巧小总结

热门文章

  1. 【maya渲染】 渲染后 图片保存出出来颜色和原来不符
  2. 京东评论系统数据存储设计
  3. 表白代码抖音很火的卡通H5动态表白源码HTML+CSS,七夕情人节代码,520代码
  4. 服务器备用电源的原理,备用电源的备用方式 备自投的基本要求 工作原理参考文档...
  5. cad解除块的快捷命令_CAD中的块能否修改?能!一个命令可快速解决
  6. 国际版xperia手机禁用swiftkey keyboard方法
  7. android自定义金额输入键盘_Android自定义软键盘的实现
  8. IE8兼容的js方法
  9. 渲染与云渲染——渲染行业的新趋势
  10. 多视图聚类与子空间聚类