BLE GAP 协议和 GATT 协议

最近要打算学习 Blufi 协议进行蓝牙配置,其中必然使用 GAP 协议和 GATT 协议,于是进行重新学习一番。

BLE 是一个 Bluetooth SIG 组织颁布的协议,对于使用 BLE 我们开发人员,最关注的是 上层的 GAP 协议和 GATT 协议。

1.1 GAP 和 GATT 有什么不同呢?

  • GAP :定义一个 BLE 网络栈的通用拓扑结构。
  • GATT:描述关于如何数据在连接中如何传输的细节。

GATT 尤其关注于数据如何被格式化、打包、然后跟据分发规则去在网络中发送。属性协议(ATT)与GATT紧密相连,那么GATT 处于 ATT 的上层,使用 ATT 去描述数据如何在两个连接的设备中交换。

1.2 GAP (Generic Access Profile)

GAP 即通用存取协议,BLE设备可以使用两种机制与外部世界通信:广播或连接。GAP 就是用来定义设备跟设备之前是用过广播呢,还是连接去通信的。

下面 GAP 将回答 怎么连接或广播?连接后 GAP 可以做什么?两个问题。

怎么连接或广播?

一个设备通过选择 GAP 中指定的一个角色去连接到一个 BLE 网络。

广播: 这个过程中,设备没有连接。包含广播者和观察者两种角色。

  • 广播者:一个设备广播一些信息。
  • 观察者:一个设备接受广播者的信息。

连接:设备之间必须连接,一般生产环境中更常用。

  • 外设:一个设备广播他的存在,使得中心设备能与它建立连接。在建立连接后,设备不再广播数据给其他中心设备,保持连接。

    • 外设是低功耗的因为他们只定期发送一些 beacons,然后中心设备对其进行响应。
    • Bean 是一种 BLE 外设。
  • 中心设备:一个设备通过监听包,去连接一个外设,一个中心可以连很多个外设。

    • 当一个中心设备想要连接外设的时候,它发一个连接请求给外设。如果外设接受了,那么就建立了连接。
    • 你的电脑在连接 Bean 的时候就是一个中心设备。

连接后能做什么?

中心设备可以修改连接参数:中心设备创建一些连接的参数,中心设备可以更改参数,外设只能通过请求中心设备去更改参数。

外设或中心设备可以中止连接:两者可以主动、或者因为异常而断开连接。

1.3 GATT(Generic Attribute Profile)

类似 GAP,在这一层协议上,我们有两种角色:

  • 客户端:发送请求给 GATT 服务器,能够读/写 服务器的数据。
  • 服务端:服务端负责存储属性,一旦客户端发起请求,服务端进行回应。

所以,当我们使用 GAP 协议建立了连接,然后就可以使用 GATT 协议进行数据的存取实现不同的义务功能。

BLE GAP 协议和 GATT 协议的更多相关文章

  1. Bytom BIP-32协议和BIP-44协议

    我们知道HD(分层确定性)钱包,基于 BIP-32:多币种和多帐户钱包,基于 BIP-44:最近比原社区的钱包开发者对比原的BIP-32和BIP-44协议有疑问,所以我今天就专门整理了一下该协议的内容 ...

  2. TCP协议和UDP协议基础介绍

    TCP协议和UDP协议区别 标签(空格分隔): TCP,udp TCP的三次握手 TCP被称为可靠的数据传输协议,主要是通过许多机制来实现的其中最主要的就是三次握手的功能,当然,TCP传送数据的机制非 ...

  3. HTTP协议和SOCKS5协议

    HTTP协议和SOCKS5协议 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们平时上网的时候基本上是离不开浏览器的,尤其是搜索资料的时候,那么这个浏览器是如何工作的呢?用的又是 ...

  4. python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)

    先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...

  5. http协议和https协议

    内容: 1.http协议介绍 2.https协议介绍 3.http协议和https协议对比 1.http协议介绍 (1)http协议是什么 1 一个传输协议,协议就是双方都遵守的规范. 2 为什么叫超 ...

  6. (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制

    1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...

  7. (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型

    1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将 ...

  8. http协议及http协议和tcp协议的区别

    http是应用层的协议,并且无连接,无状态的协议. http协议的特点: 1.支持c/s模式 2.简单快速:客户端向服务器端传送数据的时候,只需要发送请求方法和路径,请求方法有:post,get,he ...

  9. Java基础之UDP协议和TCP协议简介及简单案例的实现

    写在前面的废话:马上要找工作了,做了一年的.net ,到要找工作了发现没几个大公司招聘.net工程师,真是坑爹呀.哎,java就java吧,咱从头开始学呗,啥也不说了,玩命撸吧,我真可怜啊. 摘要: ...

随机推荐

  1. 二进制图片blob数据转canvas

    javascript是有操作二进制文件的方法的,在这里就不详述了. 而AJAX的核心XMLHttpRequest也可以获取服务端给的二进制Blob. 可以参考: XMLHttpRequest Leve ...

  2. BUUCTF-web Easyweb

    从这道题学到了挺多 一打开题目就是登陆页面,遂扫描文件检测是否存在文件泄露 用dirsearch扫出了robots.txt,.DS_Store和其他php.DS_Store没有可用信息(buuoj的题 ...

  3. 深入理解JVM(③)Java的锁优化

    前言 从JDK5到JDK6HotSpot虚拟机开发团队花费了大量的资源实现了各种锁优化技术,如适应性自旋(Adaptive Spinning).锁消除(Lock Elimination).锁膨胀(Lo ...

  4. pandas之groupby分组与pivot_table透视

    一.groupby 类似excel的数据透视表,一般是按照行进行分组,使用方法如下. df.groupby(by=None, axis=0, level=None, as_index=True, so ...

  5. Redis系列(九):Redis的事务机制

    提到事务,相信大家都不陌生,事务的ACID四大特性,也是面试时经常问的,不过一般情况下,我们可能想到的是传统关系型数据库的事务,其实,Redis也是提供了事务机制的,本篇博客就来讲解下Redis的事务 ...

  6. 用xshell连接linux服务器失败 Could not connect to '112.74.73.194' (port 22): Connection failed.

    用XSHELL连接linux服务器出现以下错误 Connecting to 42.51.xxx.xxx:22... Connection established. To escape to local ...

  7. Python打开和关闭文件

    Python打开和关闭文件: open(文件名,打开文件的模式[,寄存区的缓冲]): 文件名:字符串值 注:文件名带有后缀名 # 打开创建好的 test.txt 文件 f = open("t ...

  8. PHP strptime() 函数

    ------------恢复内容开始------------ 实例 解析由 strftime() 生成的时间/日期: <?php$format="%d/%m/%Y %H:%M:%S&q ...

  9. PHP settype() 函数

    settype() 函数用于设置变量的类型.高佣联盟 www.cgewang.com PHP 版本要求: PHP 4, PHP 5, PHP 7 语法 bool settype ( mixed &am ...

  10. [草稿]Skill 中如何读取一个文件并打印出来

    https://www.cnblogs.com/yeungchie/ path = "~/hello" file = infile(path) while(gets(x file) ...