【Bluetooth LE】Bluez中Bluetoothctl指令详解(连接iPhone为例)
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操作;
list-attribution
显示设备支持的所有属性
在BlueLight中虽然只写了1个service,但是虚拟BLE设备lztest包含了iphone支持的全部的service,根据UUID找到前面设置的BLE虚拟设备的service,后面所有命令都是操作该service为;
select-attribution
选择某个属性。当需要对某个属性进行read,write或者开启notify时,就需要先进入到该属性,之后更改;attribute-info
查看当前属性的信息,进入到虚拟BLE设备中新增的属性,可以看到前面设置好的属性支持read,write和notify,notify默认是关闭状态
read
通过#2进入属性,之后输入read
即可,可以读到前面设置的0x77
描述符的值也是可以直接read
获取的,比如前面设置的lzchar
的属性值名字
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为例)相关推荐
- ATF中smc指令详解
1 ATF的smc指令调用流程 在REE侧调用smc异常之后,会根据中断向量表触发cpu的同步异常sync_exception_aarch64/32,然后跳转执行到handle_sync_except ...
- arm-linux-ld中的参数,arm-linux-ld指令详解
arm-linux-ld指令详解 我们对每个c或者汇编文件进行单独编译,但是不去连接,生成很多.o 的文件,这些.o文件首先是分散的,我们首先要考虑的如何组合起来:其次,这些.o文件存在相互调用的关系 ...
- java中Freemarker list指令详解
java Freemarker中list指令主要是进行迭代服务器端传递过来的List集合. 定义 <#list nameList as names> ${names} </#list ...
- C#中的预处理指令详解
这篇文章主要介绍了C#中的预处理指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregion ...
- Linux中的ps指令详解
[时间]2018.12.16 [题目]Linux中的ps指令详解 转载地址:https://www.cnblogs.com/exe19/p/5511733.html 概述 要对进程进行监测和控制,首先 ...
- Linux中iptraf命令详解(IP局域网监控工具)
2019独角兽企业重金招聘Python工程师标准>>> Linux中iptraf命令详解(IP局域网监控工具) 发布时间:2017-12-27 20:46:03 作者:佚名 ...
- 九爷带你了解 nginx 日志配置指令详解
nginx日志配置指令详解 日志对于统计排错来说非常有利的. 本文总结了nginx日志相关的配置如 access_log.log_format.open_log_file_cache.log_not_ ...
- movsb movsw movsd 指令详解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/u013490896/article/d ...
- linux中yum命令详解
yum是干什么的 使用redhat,fedora的linuxer肯定都为rpm著名的dependency hell而头疼(这也是所有基于rpm发行版都有的问题).foo is needed by ba ...
最新文章
- 算法笔记-归并算法面试题、逆序数问题
- statistics DATA in CHINA
- 关于凸优化的一些简单概念
- 为什么建议使用Linux?从“白嫖”到精通,只需要这几步
- C# :socket 通讯基础使用实例
- [bbk2907]第3集 - Chapter 02 - RAC的安装过程中需要注意的要点
- Python3+TensorFlow人脸识别:1-1课程导学
- 算法(三):图解广度优先搜索算法
- php脚本语法格式,[PHP学习笔记][五]PHP基本语法规则
- python中创建类的作用_Python中类的创建与使用详解
- 依码仕喷码机编程指南
- BPSK调制与解调-MATLAB基带仿真
- 下列选项中不是具体的python序列类型的是_以下选项中,不是具体的Python序列类型的是...
- 保边滤波之Mean shift filter
- SAP、ERP、OA名词解释,SAP与ERP区别; ERP与OA区别
- 自定义控件之仿电话簿汉字排序侧边拼音
- java jimi_Java开源工具Jimi处理图片大小及格式转换
- 推荐几款软件界面模型设计工具
- 室内停车场地图定位-停车场地图定位导航
- excel 使用技巧小总结
热门文章
- 【maya渲染】 渲染后 图片保存出出来颜色和原来不符
- 京东评论系统数据存储设计
- 表白代码抖音很火的卡通H5动态表白源码HTML+CSS,七夕情人节代码,520代码
- 服务器备用电源的原理,备用电源的备用方式 备自投的基本要求 工作原理参考文档...
- cad解除块的快捷命令_CAD中的块能否修改?能!一个命令可快速解决
- 国际版xperia手机禁用swiftkey keyboard方法
- android自定义金额输入键盘_Android自定义软键盘的实现
- IE8兼容的js方法
- 渲染与云渲染——渲染行业的新趋势
- 多视图聚类与子空间聚类