shownb / shownb.github.com

shownb.github.io
shownb.github.io
5 stars 1 forks source link

ble #63

Open shownb opened 4 years ago

shownb commented 4 years ago

shownb.github.com

shownb.github.io/test

Table of Contents

Installation

GAP(Generic Access Profile)

GAP(Generic Access Profile)主要用来控制设备连接和广播,GAP 使你的设备被其他设备可见,并决定了你的设备是否可以或者怎样与交互设备进行通讯。GAP层有4种不同类型的广播:通用的、定向的、不可连接的以及可发现的。设备每次广播时,会在3个广播信道上发送相同的报文。这些报文被称为一个广播事件。除了定向报文以外,其他广播事件均可以选择20ms - 10.28s不等的间隔。通常,一个广播中的设备会每一秒广播一次,广播事件之间的时间称为广播间隔,主机可以控制该间隔。例如 Beacon 设备就只是向外广播,不支持连接,小米手环就等设备就可以与中心设备连接。 大部分情况下,外设通过广播自己来让中心设备发现自己,并建立 GATT 连接,从而进行更多的数据交换。也有些情况是不需要连接的,只要外设广播自己的数据即可,用这种方式主要目的是让外围设备,把自己的信息发送给多个中心设备。使用广播这种方式最典型的应用就是苹果的 iBeacon。

GATT(Generic Attribute Profile)

GATT是用Attribute Protocol(属性协议)定义的一个Service服务框架。这个框架定义了Service以及他们的Characteristics的格式和规程。规程就是定义了包括发现、读、写、通知、指示以及配置广播的characteristics。 GATT 通信的双方是 C/S 关系。外设作为 GATT 服务端(Server),它维护了 ATT 的查找表以及 service 和 characteristic 的定义。

GATT是建立在GAP基础之上发挥作用的,就是两个BLE设备只有通过GAP建立连接之后才能用GATT进行通信。上面说了扫描回复数据交互方式是独占的,所以GATT通信只允许是一个外设和一个中心连接。如果两个外设想要通信,唯一的方式就是建立GATT连接,通过中心来中转。

其余

BLE交互的桥梁是Characteristic、Desciptor、Service。 Characteristic:可以理解为一个数据类型,它包括一个value和0至多个对此characteristic的描述(Descriptor); Descriptor:对Characterisctic的描述,如范围、单位等; Service:是Characteristic的集合,它可以包含多个Characteristic。

重点:一个BLE终端可以包含多个Service,一个Service可以包含多个Characteristic,一个Characteristic包含一个value和多个Descriptor,一个Descriptor包含一个value(其中Characteristic比较重要,用的比较多)。

profile 可以理解为一种规范,一个标准的通信协议中,存于从机(Server)中。蓝牙组织规定了一些标准的Profile。每个profile中包含多个Service,每个service代表从机的一种能力。

所有官方通过 GATT Profile 的列表可以从这里找到。

每个profile包括GATT interface(GATT 接口)、Application ID(应用程序ID)、 Connection ID(连接ID)、Service Handle(服务句柄)、Service ID(服务ID)、Characteristic handle(特征句柄)、Characteristic UUID(特征UUID)、ATT权限、Characteristic Properties、描述符句柄、描述符UUID。

Service 可以从这里找到 https://www.bluetooth.com/specifications/gatt/services/

gatts_table_creat_demo.c 例子里面

#include "esp_gap_ble_api.h"
#include "esp_gatts_api.h"
#include "esp_bt_defs.h"
#include "esp_bt_main.h"
#include "esp_bt_main.h"

esp_gap_ble_api.h: 生成GAP配置 如: 广播和连接的参数. esp_gatts_api.h: 生成GATT Server配置 如: 生成服务和特征.

Service表

enum
{
    HRS_IDX_SVC,

    HRS_IDX_HR_MEAS_CHAR,
    HRS_IDX_HR_MEAS_VAL,
    HRS_IDX_HR_MEAS_NTF_CFG,

    HRS_IDX_BOBY_SENSOR_LOC_CHAR,
    HRS_IDX_BOBY_SENSOR_LOC_VAL,

    HRS_IDX_HR_CTNL_PT_CHAR,
    HRS_IDX_HR_CTNL_PT_VAL,

    HRS_IDX_NB,
};
shownb commented 4 years ago

https://pan.baidu.com/s/1leqmKopiqCrq17vpFZKeEw

shownb commented 4 years ago

https://pan.baidu.com/s/1leqmKopiqCrq17vpFZKeEw