目录

  • nimble 蓝牙开发三:nimble BLE 应用介绍
    • BLE 应用类型
    • 未连接状态
      • 未连接状态下的 BLE 设备应用
      • 未连接状态的手机
    • 连接状态
      • 连接状态下的 BLE 设备
      • 连接状态下的手机
    • 蓝牙应用的实现
    • GAP 应用
      • Boardcaster
      • Observer
      • Peripheral
      • Central
    • GATT 应用
      • GATT 服务器
        • GATT 服务器产生的事件
      • GATT 客户端
        • GATT 客户端需要处理的 GAP 事件

nimble 蓝牙开发三:nimble BLE 应用介绍

BLE 应用类型

BLE 应用可以分为两类:

  1. 未连接状态下的广播 GAP 应用;
  2. 连接状态下的 GATT 应用。

未连接状态

未连接状态下的蓝牙应用使用广播进行数据交换,比如下图的手机 - 蓝牙扫描场景,使用手机可扫描到多个蓝牙设备:

未连接状态下的 BLE 设备应用

此时的 BLE 设备用于发送广播,接收扫描请求,再发送扫描响应,其数据流程逻辑图如下:

从上图中我们可以看到,Ble 设备通过广播和扫描响应与其他设备进行数据通信。

那么我们需要设置:

  1. Boardcast 的广播数据;
  2. 扫描响应数据;
  3. 设置广播参数;
  4. 启动广播 GAP 流程。

未连接状态的手机

此时的手机用于扫描广播,发送扫描请求,再接收扫描响应,其数据流程逻辑图如下:
根据上图,我们可以需要设置:

  1. 扫描窗口等扫描参数;
  2. 启动扫描;
  3. 在广播报告 GAP 事件中解析广播数据。

连接状态

连接状态下的手机 - BLE 应用进行点对点通信:

BLE 设备做为 GATT 服务器,手机做为 GATT 客户端。

连接状态下的 BLE 设备

此时 BLE 设备定义了 GATT 服务与特征供手机访问,其流程逻辑图如下:

从上图可以得出:

  1. BLE 设备首先执行 GAP 广播流程;
  2. BLE 设备接收连接请求;进入连接状态;
  3. BLE 设备做为 GATT 服务器,手机做为 GATT 客户端,手机使用 GATT 流程来查找 BLE 设备定义的服务、特征,并读 / 写特征值属性和特征描述符属性;

连接状态下的手机

链接状态下,手机做为 GATT 客户端, 使用 GATT 功能来来查找 BLE 设备定义的服务、特征,并读 / 写特征值属性和特征描述符属性;

其流程逻辑图如下:

从上图可以看出:

  1. 手机首先执行发现(扫描)流程,查找想要连接的 BLE 设备;
  2. 手机执行连接流程,发送连接请求,与指定的 BLE 设备建立连接;
  3. 进入连接状态后,手机使用 GATT 功能来访问 BLE 设备。

蓝牙应用的实现

上述的未连接状态下的蓝牙应用,和连接状态下的蓝牙应用是综合的、抽象的总述。

为了实现上述的蓝牙应用,BLE 规范都存在相对应的、标准的流程和角色,具体见下文。

GAP 应用

GAP 应用根据设备行为的不同分为 4 种角色:

角色 行为
Boardcaster 发送不可链接广播的蓝牙设备
Observer 接收不可链接广播的蓝牙设备
Peripheral 发送可连接广播的蓝牙设备,并可以建立点对点连接
Central 接收可连接广播,向可连接设备发送连接请求,建立点对点连接

GAP 角色的实际应用如下:

Boardcaster

Boardcaster 就是只发送广播的 BLE 设备,且该设备不可连接。

广播数据流程逻辑图如下:


从上图中我们可以看到,Boardcast 通过广播和扫描响应与其他设备进行数据通信。

那么我们需要设置:

  1. Boardcast 的广播数据;
  2. 扫描响应数据;
  3. 设置广播参数;
  4. 启动广播 GAP 流程。

API 执行流程图如下:

Observer

Observer 接收不可连接广播,并可以选择发送扫描响应给广播设备。

Observer 的流程逻辑图如下:

根据上图,我们可以需要设置:

  1. 扫描窗口等扫描参数;
  2. 启动扫描;
  3. 在广播报告 GAP 事件中解析广播数据。

API 流程图:

Peripheral

Peripheral 用于发送可连接广播,并可建立连接。
流程逻辑图如下:

从上图中,我们可以得知,Peripheral 与 Boardcaster 相比,Peripheral 发送可连接广、可以接收连接请求并建立连接。

那么,我们需要发送可连接广播,其 API 执行流程与 Boardcaster API 执行流程一致:

Central

Central 用于扫描广播,并向可连接设备发送连接请求,然后进入连接状态。

其流程逻辑图如下:

根据上图,实现 Central 需要两个流程:

  1. 扫描流程,发现想要连接的可连接设备;
  2. 建立连接流程,与指定的可连接设备建立连接(指定对端地址)。

API 执行流程如下:

GATT 应用

GATT 应用按角色可分为:

GATT 角色对应的实际应用如下:

从上图可知,GATT 必须从广播状态过渡到连接状态。在 手机 - BLE 设备的应用场景中:

  1. BLE 设备首先做为 Peripheral 等待建立连接;
  2. 手机做为 Central 与指定的 BLE 设备建立连接;
  3. BLE 设备做为 GATT 服务器,定义了服务与特征供手机访问;
  4. 手机使用 GATT 功能与流程,来访问 GATT 服务器上定义的服务与特征实现数据同通信。

GATT 服务器

GATT 服务器数据交换逻辑图如下:

GATT 服务器与 Peripheral 的数据交换逻辑是一样的

API 执行流程如下:

GATT 服务器产生的事件

  1. 可能产生的广播流程完成事件;
  2. 连接产生的连接完成事件;
  3. 各种原因导致的连接断开事件;
  4. 由自己启动的连接参数更新事件;
  5. 由 GATT 客户端访问 CCCD 产生的订阅事件;
  6. 由 GATT 的 MTU 交换功能产生的 MTU 事件;
  7. 其他的事件,不是很常用,就不例举了。

GATT 客户端

GATT 客户端数据交换逻辑图如下:

GATT 客户端的数据交换逻辑与 Central 数据交换逻辑是一致的。

API 执行流程如下:

GATT 客户端需要处理的 GAP 事件

对比 Central, GAP 客户端需要处理更多的事件,如下:

  1. 扫描广告期间的广告报告事件,查找想要连接的 BLE 设备,并启动连接;
  2. 连接事件,连接成功后,启动 GATT 服务发现功能;
  3. 接收 GATT 服务器发送的 notification / indication 事件,如果 GATT 客户端写 CCCD 属性的 notify / indicate 位为 1,那么可能会收到属性的 notification / indication,并触发该事件;
  4. MTU 交换事件,如果 GATT 启动了 MTU 交换流程,则会产生该事件;
  5. 其他事件。

nimble 蓝牙开发三:nimble BLE 应用介绍相关推荐

  1. nimble 蓝牙开发一:BLE 蓝牙 Host 规范概述

    目录 nimble 蓝牙开发一:概述 一.BLE 简介 二.BLE 基础知识 蓝牙设备地址 BLE 广播类型 标准广播数据 三.BLE 工作概述 BLE 常见的操作有: BLE 常见的工作流程: 四. ...

  2. Android 蓝牙开发(三) -- 低功耗蓝牙开发

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 前面已经学习了经典蓝牙开发,学习了蓝牙的配对连接和通信,又通 ...

  3. 【蓝牙开发】Android BLE中广播包发射功率(TX power level)

    2022/01/02 输出! https://blog.csdn.net/love131452098/article/details/118486691 https://support.huawei. ...

  4. nimble 2 蓝牙开发API

    目录 nimble 蓝牙开发API 设置蓝牙设备地址 BD_ADDR GAP 应用 广播类型 GAP 事件 GAP 事件回调函数 发送蓝牙广播 - boardcaster boardcaster 流程 ...

  5. 安卓基于BLE的蓝牙开发入门

    BLE蓝牙开发简单入门 BLE背景介绍 引言 BLE简介 Gatt协议以及必备知识 蓝牙开发涉及的API介绍 BLE实战准备 真机调试 权限准备 写两个简单的页面 扫描设备主界面 扫描设备信息界面 实 ...

  6. Android蓝牙开发 — 经典蓝牙BLE蓝牙

    一,前期基础知识储备 1)蓝牙是一种支持设备之间短距离通信的无线电技术(其他还包括红外,WIFI): 支持移动电话.笔记本电脑.无线耳机等设备之间进行信息的交换: Android支持的蓝牙协议栈:Bl ...

  7. Android经典蓝牙开发全流程

    一.基本介绍   所谓蓝牙(Bluetooth)技术,实际上是一种短距离无线电技术,最初是由爱立信公司公司发明的.技术始于爱立信公司 1994 方案,它是研究在移动电话和其他配件间进行低功耗.低成本无 ...

  8. Android 蓝牙开发(一) -- 传统蓝牙聊天室

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 一.蓝牙概览 以下是蓝牙的介绍,来自维基百科: 蓝牙(英语: ...

  9. 蓝牙开发工具市场现状-市场规模、市场份额、市场定位、产品类型以及发展规划

    辰宇信息咨询市场调研公司最近发布-<2022-2028全球与中国蓝牙开发工具市场调研报告> 内容摘要 本文重点分析在全球及中国有重要角色的企业,分析这些企业蓝牙开发工具产品的市场规模.市场 ...

最新文章

  1. apiCloud中的数据库操作mcm-js-sdk的使用
  2. 小五:从个人用户无法注册.CN域名说起
  3. 正则表达式注意事项以及常用方法
  4. 初识ES-安装IK分词器
  5. 胃部不适,原来好辛苦!
  6. 【LeetCode笔记 - 每日一题】375. 猜数字游戏 II (Java、DFS、动态规划)
  7. 基于 MySQL + Tablestore 分层存储架构的大规模订单系统实践-架构篇
  8. aux 参数 linux,Linux下ps aux命令中STAT的参数含义(转)
  9. 把多个JavaScript函数绑定到onload事件处理函数上
  10. 2017年中国大功率UPS市场需求、市场需求及市场结构占比分析预测
  11. 十分钟带你学会Http协议和Tomcat服务器的原理
  12. php 替换 tab,PHP 删除字符串中的空格和换行符终极方法 - 文章教程
  13. python numpy中bool变量转为1或0
  14. 不让EditText打开就获取焦点
  15. 日语动词活用和变化规则及用法
  16. PowerShell 开启无线热点
  17. openresty ngx_lua重定向
  18. ISO8583包简介和源代码
  19. 3.1 人工智能定义
  20. android 表情键盘切换,如何在键盘之间切换(从表情符号到qwerty,反之亦然)

热门文章

  1. 知识点滴 - 中国有多少省,简称是什么
  2. 【开发经验】redis实现抽奖功能
  3. Git克隆码云代码No such file or directory
  4. 计算机视觉与图像处理学习笔记之人脸识别的三种方法
  5. 电机控制系列-电磁学基础知识
  6. zabbix6.4 Database history tables upgraded
  7. 请上司吃饭是技术活,牢记五个步骤三句话术,走好人情受重用
  8. linux安装gnuPG指定版本,使用GnuPG(PGP)加密信息及数字签名教程
  9. 80后的 我们 依然单身
  10. WPS Excel采集网页的表格数据