鸿蒙关于蓝牙的那些事 原创 精华
目标
- 了解什么是蓝牙;
- 蓝牙的服务、特性、属性。
说在前面的话
以下内容纯属个人的理解和总结,如有不到位或者不太对的地方,希望各位多多指教。
什么是蓝牙?
HarmaonyOS关于蓝牙的介绍
蓝牙:是短距离无线通信(一般10m内)的一种方式,支持蓝牙的两个设备必须配对后才能通信。HarmonyOS 蓝牙主要分为传统蓝牙和低功耗蓝牙。传统蓝牙指的是蓝牙版本3.0以下的蓝牙,低功耗蓝牙指的是蓝牙版本4.0以上的蓝牙。
传统蓝牙:可以用与数据量比较大的传输,如语音,音乐,较高数据量传输等
低功耗蓝牙:适用于实时性要求比较高,但是数据速率比较低的产品,如遥控类的,如鼠标,键盘,遥控鼠标(Air Mouse),传感设备的数据发送,如心跳带,血压计,温度传感器等。
一句话:蓝牙就是一种使用无线电通信技术去完成设备与设备间通讯与数据交换。
所有的蓝牙设备基本是基于蓝牙通信技术对外提供特定功能的设备,所以,蓝牙本身并不提供服务,蓝牙只是一种数据的传输方式或者是数据传输通道,而设备所提供的功能,则是由设备里的各种不同的程序所提供,这种程序功能称之为服务。
这里说到的服务可能比较抽象,举个简单的例子,比如一个蓝牙的键盘,他提供的是输入功能,输入功能就可以称为这个蓝牙的一种服务。服务其实可以分成三个部分:服务、特性、属性。
下面介绍服务的三个部分
服务【Service】
服务:可以理解为一个学校中的教室,想象一下当教室为空的时候其实什么也做不了,也就无法提供任何的服务功能,所以,如果同学们需要在教室内学习,至少教室中需要黑板、粉笔、桌椅、教学工具等,在教室中不同的设备提供不同的功能,这就是特性【characteristic】。在蓝牙中,为了区分服务,不同的服务都有自己的编号【UUID,关于UUID我们后面介绍】,这个就和学校中我们可以有教室、体育场、图书馆、办公室等,不同的场所我们会给其进行命名(或编号),防止你想去体育场运动时跑到了图书馆。我们假设学校的教室统一编号:001,不管你是什么国家、什么城市,只要是教室都必须使用001来编号,如果那位同学需要去班级学习,只要找到编码为001就可以。
特性【characteristic】
特性:是依附于某个服务存在,就类似于教室里面的黑板,教室其实并不能让老师将知识传授给他的学生,课本的知识通过老师在黑板上的讲解变得生动。在教室中老师授课还需要借助一些教学的工具,比如圆规、直尺、电子白板等,每个教学工具都可以提供不同的功能。为了更好的区分,我们也给每个教学工具分配编号,这就是特性的标号【UUID】。其实每一种工具都会具备一个或者多个不同的子功能,这些子功能就是特性所包含的属性【property】,比如电子白板,可以播放视频、音频、教学PPT等。
属性【property】
属性:属于特性中的一部分,就比如粉笔可以用来在黑板上写字一样,这个就属于粉笔的属性。在蓝牙中通常属性有如下几个:
- Read: 只读,具有这个属性的特性是可读的,也就是说这个属性允许设备读取一些信息。
- Notify: 通知, 具有这个属性的特性是可以发送通知的,也就是说具有这个属性的特性可以主动发送信息。
- Write: 只写, 具有这个属性的特性是可以接收写入数据。通常设备发送数据给蓝模块就是通过这个属性完成的。这个属性在Write完成后会将结果的反馈给设备,然后再写入下一包,这个属性在写入一包数据后,需要等待应用层返回写入结果,速度比较慢。
- WriteWithout Response:只写不需要返回写的结果,这个属性的特点是不需要应用层返回,完全依靠协议层完成,速度快,但是写入速度超过协议处理速度的时候会出现丢包。
什么是UUID?
在介绍什么是蓝牙时有提到UUID,那什么是UUID呢?
UUID (Universally Unique Identifier)是用于标识蓝牙服务以及通讯特征访问属性,不同的蓝牙服务和属性使用不同的访问方法,就和前面提到的,学校中有教室、图书馆、体育场,在不同的场所做不同的事情,所以找到正确的UUID,才能使用正确的功能。
简单理解UUID就是编号,对应不同服务的一个唯一的编号,用于区分不同的服务及服务特性的个体。为了确保蓝牙服务,在蓝牙技术联盟SIG定义了UUID,基础格式为:0x0000xxxx-0000-1000-8000-00805F9B34FB。总共128位,为了进一步简化基本UUID,每一个蓝牙技术联盟定义的属性有一个唯一的16位UUID,以代替上面的基本UUID的‘x’部分。使用16位的UUID便于记忆和操作,如SIG定义了“Device Information”的16位UUID为0x180A。也就是说,不管是什么样的蓝牙设备,只要你提供设备信息(Device Information) 的服务功能,就必须使用”0x180A“的UUID号。这样,当应用程序需要读取这蓝牙设备的设备信息时,只需要找到对应UUID号为0x180A的服务,就可以获取到。
说明:
- 若16 bit UUID为xxxx,那么128 bit UUID为0000xxxx-0000-1000-8000-00805F9B34FB
- 若32 bit UUID为xxxxxxxx,那么128 bit UUID为xxxxxxxx-0000-1000-8000-00805F9B34FB
如果你对蓝牙感兴趣可以到bluetooth官方网站上看看。
如何查看蓝牙的UUID?
在华为市场中下载蓝牙调试工具:BLE调试助手,下载并安装完成,打开BLE调试助手。
步骤1、根据蓝牙设备的MAC地址或者蓝牙设备的名称,找到你需要查看的蓝牙,点击“CONNECT”,连接蓝牙。
步骤2、连接成功后,就可以查看到该蓝牙提供的服务,每个服务都有相应的UUID。
步骤3、查看其中一个服务的详细信息,包括服务的特性和属性的编号。
这样你就可以根据业务需要利用蓝牙提供的服务UUID进行相应的操作。
总结
蓝牙就是无线通讯技术,蓝牙设备使用蓝牙通讯技术来实现特定的功能如数据传输。蓝牙设备具备一些蓝牙服务,每一个服务包括三大部分:服务、特性、属性。服务与特性都有唯一的UUID编号,每个特性有:read、write、notify WriteWithout Response属性。我们使用蓝牙服务其实是对不同属性的特性进行操作。基本使用流程:
- 首先,完成设备间的蓝牙连接;
- 其次,蓝牙连接后可以查找到对应蓝牙服务;
- 接着,根据业务需要使用该服务下的某个特性(read、write、notify WriteWithout Response);
- 最后,根据特性的属性完成具体操作。
感谢
如果您能看到最后,还希望您能动动手指点个赞,一个人能走多远关键在于与谁同行,我用跨越山海的一路相伴,希望得到您的点赞。
感谢分享,蓝牙讲的非常细