蓝牙是面向开发者的无线通信技术,它让设备之间无需路由器或接入点等中央设备也能相互通信。 蓝牙有一项独特的“低功耗”特性,这意味着采用低功耗蓝牙的设备使用很小的电池也可以很长时间。 在低功耗蓝牙的世界,每个设备都有自己的“配置文件”,它定义了蓝牙设备间建立通信的方式。在某种程度上,蓝牙配置文件从特性和功能的层面上定义了设备之间相互通讯的方式。
换而言之,蓝牙配置文件其实是一种接口规格。它定义了设备所拥有的数据;其他设备通过蓝牙连接能如何获取这些数据;以及当与之相连的设备基于这一接口进行操作时,带有这一配置文件的设备应如何作出回应等。现在就让我们从技术的角度再详细了解一下吧! 基本概念 蓝牙设备包含一个属性表(Attribute Table,简称ATT),其他与之相连的设备可以以多种方式访问表中的数据。表中的数据及其利用方式就涉及到蓝牙的“通用属性配置文件(Generic Attribute profile,简称GATT)”这一技术领域。在诸如安卓平台提供的API相关文档中常能看到GATT这一用语。 属性表中包含一系列不同类型的相关记录。主要类型包括服务(Service)、特性(Characteristics)和描述符(Descriptors)。现在就让我们来一一了解下。 属性(ATTRIBUTES) 服务(Services)、特性(Characteristics)和描述符(Descriptors)都是属性类别,因此也就有了通用属性配置文件(Generic Attribute Profile)、属性表(Attribute Table)和属性协议(Attribute Protocol)等。具体是哪一个类别的属性,由“通用唯一标识符(Universally Unique Identifier,简称UUID)”来定义。有些属性是由制定蓝牙技术标准的蓝牙技术联盟定义的, UUID长度为16位。有些属性是产品设计团队自行定义的,是客制化的,这样的UUID为128位。 架构(STRUCTURE) 服务(Service)、特性(Characteristics)和描述符(Descriptors)也有层级之分。服务位于顶层,描述符位于底层。服务包括一项或多项特性。一项特性可能没有、拥有一个或拥有多个描述符,因为描述符是可选的,而服务必须包括至少一项特性。
服务(SERVICES) 服务是包含了逻辑相关的蓝牙数据项的容器。这些数据项实际上就是特性。我们可以认为服务内部的属性就归服务所有。服务通常代表一项特定的设备特性(例如硬件特性),如按钮或特定的传感器。设备信息服务(Device Information Service)就是蓝牙技术联盟所定义的服务之一,顾名思义,它是包含了如制造商和序列号等多项设备信息的容器。 特性(CHARACTERISTICS) 特性是与某种设备内部特殊状态、或设备用传感器能够测量的环境状态相关的数据项。例如,当前的电池状态就是内部状态数据,而环境温度可通过传感器来测量。有时特性代表配置数据,例如针对某个对象的测量频率等。在任何一种情况下,设备都可以将数据以特性的形式通过蓝牙链路发送给其他设备,供其所用。设备信息服务中的序列号字符串(Serial Number String)就是蓝牙技术联盟所定义的特性之一。
特性包括多个部分,如类型、值、一些属性和权限等。 类型(Type) 类型(Type)在上面已经解释过了,就是表明属性具体特性类别的UUID值 值(Value) 就是相关状态数据项的值。 属性(Properties) 属性定义了其他设备如何通过蓝牙运用特性,这些特性主要关于各项操作,如读取(READ)、写入(WRITE)或通知(NOTIFY)。读取特性就是通过蓝牙链路将当前的值从属性表传输至相连的设备。写入是允许互连设备改变状态表中的值。通知是当相关特性值改变或由定时器进行周期性控制时,设备可以发送至相连设备的一种特定的信息类型。有些特性并不支持所有操作。通过特性的属性可以了解其支持的操作。 有时设备的编程允许其在处理操作时(如在属性表中读写值)能够以特定的方式作出回应,这样就能实现更多功能,而不是简单的通过连接来传输数据。例如,改变特性的值也可能改变设备从加速器上读取样本数据的频率。 权限(Permissions)
权限与安全相关,并进一步描述了在对特性进行读写访问之前必须确保的安全条件。
描述符(DESCRIPTORS) 描述符含有元数据,这些元数据可以放大描述符所属特性的相关细节,或实现涉及这一属性的运行配置。例如,可通过名为“客户端特性配置描述符(Client Characteristic Configuration Descriptor,CCCD)”的特定描述符来开启或关闭通知(NOTIFY)信息。 配置文件(PROFILE) 蓝牙配置文件是包括所有必需信息的规格,包括设备功能,服务、属性及描述符的访问方式,以及安全准则、并行限制等。 客户端架构(Client Server Architecture) 当智能手机应用通过蓝牙连接与设备互动时,就形成了客户端(Client)/服务器(Server)架构。手机应用通常是GATT客户端,设备通常是GATT服务器。它们采用属性协议(Attribute Protocol,简称ATT)进行通信。智能手机开发者可利用API,无须担心如何制定ATT协议数据单元等问题。
设备发现(Device Discovery) 以上所描述的都是关于作为GATT客户端和服务器进行连接并通信的设备。但是在此之前的环节中,两台设备尚未建立连接,它们是如何找到彼此并连接的呢?答案就在于“设备发现(Device Discovery)”,这是由另一项称为通用访问属性(Generic Access Profile,简称GAP)的蓝牙架构来负责的。 在GAP中,一台设备发出广播,周期性地发射广播数据包,其中包含设备自身的相关信息。其他执行扫描操作的设备执行扫描、接收并处理广播数据包,然后滤过类型不相关的设备。通常用户会获得被发现设备的相关信息,然后就能选择一个进行连接。能够发出广播的设备叫做蓝牙周边设备,而执行扫描的设备称为蓝牙中央设备。
-
蓝牙
+关注
关注
114文章
5821浏览量
170287 -
无线通信
+关注
关注
58文章
4568浏览量
143528
发布评论请先 登录
相关推荐
评论