继续创作,加速生长!这是我参加「日新方案 · 10 月更文挑战」的第30天,点击检查活动详情

磨刀不误砍柴工,本文了解一些根本的蓝牙协议基础常识

前语

可是关于蓝牙 GATT 概念,咱们仍是只停留留在 蓝牙协议栈根本结构层面的内容,关于更具体的了解咱们还不知道,所以针对示例来说,咱们也无从修正测验。

正所谓磨刀不误砍柴工,咱们有必要先深化的学习一下 GATT 以及 GATT 相关的一些常识。

本文咱们就来了解一下 蓝牙 GATT 究竟是什么?一起了解下咱们运用的 ESP32-C3 GATT示例的工程的代码结构。


一、概念导图

☆ 即使看完了许多材料,博主自己仍是感觉蓝牙协议的专有名词界说有点杂乱(相对其他许多物联网无线协议来说),如果不是专门从事蓝牙行业的人,即使官方有材料,关于这些专有名词专有界说也难以全部了解到位。

☆ 可是咱们系列博文终究是以运用为意图,运用蓝牙终究仍是运用蓝牙做一些数据的传输交互运用。所以关于专有名词暂时不用研究那么深,知道一些根本概念的的作用和含义即可。

关于根本的概念常识,查阅了许多相关的材料后多少有了一个开端的知道,关于蓝牙 GATT 来说,以运用为主所需求的了解的根本概念,首要便是 GATT,GAP,ATT 这几个协议,在系列博文第一篇《ESP32-C3 学习测验 蓝牙 篇(一、知道 ESP-IDF 的蓝牙结构、简略的了解蓝牙协议栈)》关于蓝牙协议的阐明关于这几个协议的简略阐明,如下图:

图片.png

关于咱们的运用来说,蓝牙无非是用来进行数据交互,咱们直接从运用说起,咱们运用手机和开发板进行蓝牙通讯,对应的 手机便是 Client 设备,开发板便是 Server 设备。

关于我的学习来说,便是从 BLE通讯的这两种设备下手的 :Client 和 Server。

GATT 的结构

关于 Client 和 Server 的通讯,先来看一张图:

图片.png

从上面的示意图可以看出,关于 GATT server 有许多分支,可想而知关于他的协议规则会有许多专有名词,咱们的运用程序也大多是对 GATT server 这些参数进行修正装备,我总结了几张概念导图。

图片.png

图中用的是 GATT Server 后面的分支应该是 Service!!

Service 的结构

图中用的是 Server(服务器),应该用 Service ,做图的时候估量还有点蒙:

图片.png

上图中尽管以 Server 作为开头,其实 Server 可组成一个叫 profile 的概念(下面概念阐明会讲到 )。

Profile 的结构

蓝牙官方文档中关于 Profile 阐明图:

图片.png

二、概念阐明

尽管上面上了一张概念导图,可是关于里边的一些根本概念咱们有必要一个一个单独阐明一下。

2.1 名词解释

对概念导图中说到的专有名词进行单独的阐明。

Server

  • Service可以了解为一个服务,供给数据的服务,比方从机设备,可是在一个 Ble 从机中,可以有多个服务。

    Server 和 Client 经过ATT PDU进行交互。

    Server经过characteristic对数据进行封装,每个service中又包括多个characteristic特征值。

profile

  • 如果上面说的 service 是一个蓝牙联盟界说的标准服务,也可以称其为profile。

    profile 可以了解为一种标准,一个标准的通讯协议,它存在于从机中。

    蓝牙安排规则了一些标准的profile,比方HID/心率计/体温计/血糖仪等,都是标准蓝牙服务,因而都有相应的profile规格书。

    每个从机都会有一个叫做profile的东西存在,不管是的自界说的simpleprofile,仍是标准的心率计profile。

    每个profile中会包括多个service,每个service代表从机的一种能力。

characteristic

  • 上面讲到: Server经过characteristic对数据进行封装,每个service中又包括多个 characteristic
    特征值。

    ble主从机的通讯均是经过characteristic来实现,可以了解为一个标签,经过这个标签可以获取或许写入想要的内容。

    一个characteristic包括三种条目:characteristic声明,characteristic的值以及characteristic的描述符。

    这3个条意图含义可参阅上面的概念导图,这儿需求阐明的是它们是用attribute来表达的,它们每一个都是一个 attribute 。

    Characteristic是在GATT标准中最小的逻辑数据单元,由一个Value和多个描述特性的Desciptior组成。实践上,在与蓝牙设备打交道,首要便是读写Characteristic的value来完成。

attribute

  • Attribute 是归于 ATT特点层的东西,它是 ATT层 的核心。

    Attribute其实便是一条一条的数据。前面说过,每个蓝牙设备便是用来供给服务的,而服务便是众多数据的合集,这个合集可以称为数据库,数据库里边每个条目都是一个attribute。

    Attribute 由以下 4 部分组成:特点句柄(Attribute Handler)、特点类型(Attribute
    Type)、特点值(Attribute Value)、特点权限(Attribute Permissions)。

    图片.png

UUID

  • UUID(universally uniqueidentifier,通用仅有识别码)是一个软件构建标准,一个合法的UUID,一定是随机的、全球仅有的。(UUID并不是BLE独有的概念)

    上面说到的 service 和 characteristic,都需求一个仅有的uuid来标识。

    UUID是128 bit的。

    蓝牙联盟选用为官方的UUID:0000xxxx-0000-1000-8000-00805F9B34FB(上面概念图和推荐博文有具体阐明)

2.2 GATT (Generic Attribute Profile)

GATT (通用特点装备) ,它界说两个 BLE 设备经过 Service 和 Characteristic 进行通讯;

GATT 便是运用了 ATT(Attribute Protocol)协议,ATT层界说了一个通讯的根本结构,数据的根本结构,以及通讯的指令,Service 和 characteristic 便是GATT层界说的, GATT层用来赋予每个数据一个具体的内涵,让数据变得有结构和含义。

前面说过 server 端供给服务,服务便是数据,而数据便是一条一条的attribute,而service和characteristic 便是数据的逻辑出现,或许说用户能看到的数据终究都转化为 service 和 characteristic。

一旦两个设备树立起了衔接,GATT 就开端起作用了,这儿需求阐明的是,GATT 衔接必需先经过 GAP 协议。

GATT 衔接需求特别留意的是:GATT 衔接是独占的。也便是一个 BLE 外设一起只能被一个中心设备衔接;

中心设备和外设需求双向通讯的话,仅有的方法便是树立 GATT 衔接。

2.3 GAP(Generic Access Profile)

Generic Access Profile(通用拜访标准) 它在用来操控设备衔接和广播,用于供给蓝牙设备的通用拜访功用,包括设备发现、衔接、鉴权、服务发现等等。

GATT是树立衔接后通讯标准, 而蓝牙是经过GAP树立通讯的。

GAP 使你的设备被其他设备可见,并决议了你的设备是否可以或许怎样与合同设备进行交互。

GAP 给设备界说了若干人物,其间首要的两个是:外围设备(Peripheral)和中心设备(Central)。

  • 外围设备:这一般便是十分小或许简略的低功耗设备,用来供给数据,并衔接到一个更加相对强壮的中心设备。例如小米手环
  • 中心设备:中心设备相对比较强壮,用来衔接其他外围设备。例如手机等。

2.4 ATT(Attribute Protocol)

ATT(Attribute Protocol)特点层是 GATT 和 GAP 的基础,它界说了BLE协议栈上层的数据结构和安排方法。

ATT协议界说了两种人物:服务器人物和客户端人物。

站在蓝牙协议栈角度来看,ATT层界说了一个通讯的根本结构,数据的根本结构,以及通讯的指令,而GATT层便是前文所述的service和characteristic,GATT层用来赋予每个数据一个具体的内涵,让数据变得有结构和含义。

GATT 是脱胎于 ATT ,ATT 是 Attribute Protocol Specification 特点标准协议,留意ATT是协议,而GATT是标准,两者不同点在于 ATT规则了数据格式,而 GATT 则是依照 ATT 的格式将具体数据填充进去。

三、Client 设备衔接阐明

咱们上面讲了许多关于蓝牙 GATT 的概念常识,咱们开发板运用了 GATT server 示例后,便是一个 Server 设备,咱们的手机便是 Client 设备。

当咱们衔接上以后,其实可以检查 Server 的信息的,为了加深对上面的概念的了解,咱们运用手机衔接后的图片来阐明一些概念:

图片.png

图片.png

图片.png

在上图中有一点,结合上面第一末节《一、概念导图》 中的 Profile的结构 阐明,每个 characteristic 都带有Properties,这个 Properties 为蓝牙特征值的读写权限:

特点称号 描述
read 支撑 read 操作
write 支撑 write 操作
notify 支撑 notify 操作
indicate 支撑 indicate 操作

上面是手机客户端与咱们烧录示例的 ESP32-C3 开发板衔接后的截图,配合本文的上面一些阐明,可以让咱们更直观的了解上面说到的概念。

结语

在写本文前,博主自己确实对蓝牙的这些概念不太了解,当初看这些概念的时候也参阅了许多许多文章,花了许多时刻去记住收拾这些概念,到现在运用起来仍是需求对着概念图看,为难 = =!

所谓开发蓝牙运用程序,其实便是开发 service 和 characteristic。经过API,添加自己需求的characteristic 和 service,一个蓝牙设备就诞生了。

只需 characteristic 和 service 是契合GATT标准的,你可以随意添加任何characteristic和service,并将他们组合成一个专门的蓝牙设备。由于这个蓝牙设备是依照标准来界说的,所以它可以与任何其他蓝牙设备,比方手机,互联互通,并完成所要求的的交互动作。

本文咱们根本上把蓝牙 GATT 的概念知道了一遍,就算从来没接触过蓝牙,从本文下手,应该也能算是入门了解过了一些。
当然,本文并没有深化的论述每一个概念,一来关于蓝牙协议,博主也是初学者;二来博主仍是以运用为意图,运用便是先可以运用修正起来,再谈深化。

那么蓝牙系列的下一篇文章,咱们就要回到示例 GATT server ,分析一下示例程序代码,经过实践的程序加深咱们对蓝牙 GATT的了解,一起开端进行开端的修正测验 。