讲解蓝牙中最重要的概念——蓝牙的服务和特性。
先给同学们看一下这张图,蓝牙协议的整体架构。
- 最下面的是物理层,负责的是无线电波的收发以及信号链路的管理;
- 中间的部分是协议层,主要实现蓝牙协议栈;
- 最上面的是应用层,根据业务需求来实现不同的应用程序。
作为应用开发者,我们只需要关注应用层就可以了,物理层以及协议栈一般都是由芯片原厂来实现。协议栈里面主机与控制器之间的通信接口称为主机控制接口,简称hci。图上的一些名词和概念暂时不理解,也不要着急,随着学习的深入,后面都会逐渐接触。
以标准的蓝牙设备,比如这个蓝牙鼠标,来看一下它的服务和特性是如何实现的。在手机上打开名叫谷雨蓝牙的微信小程序,搜索到这只蓝牙鼠标,点击连接。连接成功后,在这里看到的就是该设备的服务列表,一共有五个服务。每个服务上面的英文单词是服务的名称,下面还有一行UUID。关于UUID,我们会在后面的视频中讲到。
随便点开一个服务展开,是该服务里面的特性。每一个特性由特性名称、特性UUID和特性的访问权限组成。
通过以上的实验可以得出,蓝牙设备在应用层是通过服务和特性来实现的。可以通过下面这张图来抽象地表示:
- 一个蓝牙设备里面可以包含若干个服务;
- 一个服务里面包含若干个特性;
- 每个特性里面又可以有读、写、通知等权限。
每一个服务和特性都要有一个UUID,UUID是蓝牙组织定义的用于区分各个服务和特性的标识符,总长度是128bit。比如下面就是两个标准的UUID。
讲到这里可能会有同学感到疑惑,刚刚我们在手机小程序里面看到的UUID好像很短,与图上的不一样。的确不一样,考虑到128bit的UUID太长,使用起来不太方便,蓝牙组织联盟定义了一个UUID的基地址,允许用户使用16bit的UUID与该基地址拼接,形成128bit的UUID。比如16bit的UUID 2A37对应的128bit的UUID是这样的。