2.GAP:通用访问协议

GAP的简单理解

GAP这个名字,直接翻译过来不好理解。
简单点可以理解为:

  1. 这是蓝牙设备在互联之前,过程中,第一个用于交流的协议。
  2. 在代码上,会给这个协议实现,连接参数的设置,连接事件的实现(如断开连接,连接成功等好多事件)

BLE的两种通信方式

  • 面向连接的通信:设备之间存在专用连接,形成双向通信。
  • 广播通信:设备无需先建立连接即可进行通信,通过向范围内的所有设备广播数据包。(信标,温湿度计会常用这种,它只需要将数据发出去就行。不用和用户交互。)

GAP的角色

在BLE里,涉及到角色概念的,就两个地方。

  • GAP角色 :定义了两种角色:Central(中央设备)和Peripheral(外围设备)
  • GATT角色:定义了两种角色:服务器和客户端。

GAP角色和GATT角色其实是两个分开的概念,他们并没有联系。所以在记的时候不要混在一起。

GAP分角色的原因
主要是简化设计省电两个原因。

**穿插个知识点:BLE建立连接从广播开始,**1. A设备广播自己的信息,B设备收到广播。2. B设备对A设备有兴趣,就发起连接,A会在广播后短暂开启接收,如果有人要连接我,就连接,没人连接,A就会关闭无线电。

简化设计: 设备要连接上,必须有人发起连接,有人接收连接。如果让一个人会发起连接也会接受连接,那协议栈就会复杂一些。所以蓝牙将这部分的功能分开指定了,Central(只能接收广播),Peripheral(只能发起广播)

省电: :蓝牙的很多设备是电池供电的,或对功耗要求很高。因此在没有通信的时候,设备需要关闭其无线电以达到省电的目的。但是如果双方都经常关闭无线电,那不就导致通信经常会失败了。为了避免这个问题,会让Central定义为一直接收BLE广播,(接收相对发送功耗小一些)。因此Central设备通常是功耗不敏感的设备来做这个角色。

GAP的Central是负责扫描(或叫接收)蓝牙广播的,常见为手机,PC这种设备
GAP的Peripheral,负责广播自己,让有需要和我通信的人可以连接我,平时无线电关闭状态。以达到省电目的。通常是一些传感器设备。

GAP的Broadcaster 和observer 角色

这两种角色,可以认为是Central(中央设备)和Peripheral(外围设备)的特殊用法。

主要是有些场景,设备直接不需要建立连接,他只需要周期性的广播自己的信息,或者持续的监听有没有设备广播新的数据就行。所以才引入了这两种简单的角色。

蓝牙的网络拓扑结构

只要是设备之间多起来,就可以形成网络,那么他们就会有网络关系,也就是拓扑结构。

广播拓扑:A设备单纯通报状态信息,其他设备只接收状态。双方不会有连接建立。
在这里插入图片描述连通拓扑
设备之间是可以建立双向连接的。
在这里插入图片描述多角色拓扑
一个设备有两种角色
在这里插入图片描述

文章主要是主观的个人理解多,难免有以偏概全的地方。有错误的地方欢迎指正。共勉!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/375572.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

maven高级1——一个项目拆成多个

把原来一个项目,拆成多个项目。 !!他们之间,靠接口通信。 以ssm整合好的项目为例: 如何看拆的ok不ok 只要compile通过就ok。 拆分pojo 先新建一个项目模块,再把内容复制进去。 拆分dao 1.和上面一样…

Unity之Text组件换行\n没有实现+动态中英互换

前因:文本中的换行 \n没有换行而是打印出来了,解决方式 因为unity会默认把\n替换成\\n 面板中使用富文本这个选项啊 没有用 m_text.text m_text.text.Replace("\\n", "\n"); ###动态中英文互译 using System.Collections; using…

牛客小白月赛98

骰子魔术 jackle 会拿出一枚骰子,骰子的表面分别写上了从 1∽5001\backsim 5001∽500 的数字,朋友会随便说一个 1∽5001\backsim 5001∽500 之间的点数,jackle 都能保证百分之百的掷出这个点数。 当然 jackle 有备而来,他准备了 …

代码随想录算法训练营Day62|冗余连接、冗余连接II

冗余连接 108. 冗余连接 (kamacoder.com) 考虑使用并查集&#xff0c;逐次将s、t加入并查集中&#xff0c;当发现并查集中find(u)和find(v)相同时&#xff0c;输出u和v&#xff0c;表示删除的边即可。 #include <iostream> #include <vector> using namespace s…

pytest使用报错(以及解决pytest所谓的“抑制print输出”)

1. 测试类的类名问题 #codingutf-8import pytestclass TestClass1:def setup(self) -> None:print(setup)def test_01(self) -> None:print(test_01111111111111111111111)def test_02(self) -> None:print(test_02)以上述代码为例&#xff0c;如果类名是Test开头&am…

maven7——(重要,构建项目)maven项目构建(命令)

Maven的常用命令管理项目的生命周期 clean命令 清除编译产生的target文件夹内容&#xff0c;可以配合相应命令在cmd中使用&#xff0c;如mvn clean package&#xff0c; mvn clean test D:\工作\公司培训-4班\day20\day20\untitled1>mvn clean compile命令 该命令可以…

苹果入局,AI手机或将实现“真智能”?

【潮汐商业评论/原创】 “AI应用智能手机不就是现在的AI手机。” 当被问到现阶段对AI手机的看法时&#xff0c;John如是说。“术业有专攻&#xff0c;那么多APP在做AI功能&#xff0c;下载用就是了&#xff0c;也用不着现在换个AI手机啊。” 对于AI手机&#xff0c;或许大多…

【搭建Nacos服务】centos7 docker从0搭建Nacos服务

前言 本次搭建基于阿里云服务器系统为&#xff08;CentOS7 Linux&#xff09;、Nacos&#xff08;2.0.3&#xff09;、Docker version 26.1.4 本次搭建基于一个新的云服务器 安装java yum install -y java-1.8.0-openjdk.x86_64安装驱动以及gcc等前置需要的命令 yum install …

设置DepthBufferBits和设置DepthStencilFormat的区别

1&#xff09;设置DepthBufferBits和设置DepthStencilFormat的区别 2&#xff09;Unity打包exe后&#xff0c;游戏内拉不起Steam的内购 3&#xff09;Unity 2022以上Profiler.FlushMemoryCounters耗时要怎么关掉 4&#xff09;用GoodSky资产包如何实现昼夜播发不同音乐功能 这是…

XCP协议介绍(二)

五、XCP命令简介 5.1 数据包简介 XCP的数据包分为两类&#xff1a;CTO(Command Transfer Object)与DTO(Data Transfer Object) CMD&#xff1a;指的是上位机下发给下位机的一些命令&#xff0c;比如连接命令FF&#xff0c;解锁&#xff0c;获取状态等一些和下位机交互的命令&…

MySQL 9.0 新功能概览

官方文档 https://dev.mysql.com/doc/refman/9.0/en/mysql-nutshell.html 时隔 6 年多&#xff0c;上周 Oracle 发布了 MySQL 最新的大版本 9.0。我们一起来看看新版本有哪些东西。 用 JavaScript 写存储过程 半年前已经单独介绍过 「虽迟但到&#xff01;MySQL 可以用 Java…

阿里云人工智能平台PAI论文入选OSDI ‘24

近日&#xff0c;阿里云人工智能平台PAI的论文《Llumnix: Dynamic Scheduling for Large Language Model Serving》被OSDI 24录用。论文通过对大语言模型&#xff08;LLM&#xff09;推理请求的动态调度&#xff0c;大幅提升了推理服务质量和性价比。 Llumnix是业界首个能灵活在…

顺序表算法题 -- 力扣

一、移除元素 移除元素 这个题让我们移除数组nums中值为val的元素&#xff0c;最后返回k&#xff08;不是val的元素个数&#xff09; 这样显然我们就不能再创建一个数组来解决这个问题了&#xff0c;只能另辟蹊径 思路&#xff1a;双指针 这里定义两个指针&#xff08;l1&…

Centos7安装Glibc 2.32版本(超详细)

✨1.问题&#xff1a; 某些工具在Centos7上低版本的GCC和Glibc运行都会报错&#xff0c;只有升级GCC和Glibc才行 手动编译和安装 如果软件包管理器不提供您需要的版本&#xff0c;另一个选择是手动编译和安装。 &#x1f31f;问题1&#xff1a;执行最后面的glibc的make报如下…

Windows下编译OpenSSL静态库

目录 1. 版本与下载地址 2. 下载与安装VS2015 3. 下载与安装Perl 4. 测试ActivePerl是否安装正确 5. 下载OpenSSL 6. 编译32位OpenSSL静态库 6.1 解压openssl-1.0.2l.tar.gz 6.2 打开VS2015 x86本机工具命令提示符 6.3 输入命令进入到openssl的目录中 6.4 执行配置命…

45、tomcat+课后实验

tomcat 1、tomcat tomcat和php一样&#xff0c;都是用来处理动态页面的。 tomcat也可以作为web应用服务器&#xff0c;开源的。 php .php tomcat .jsp nginx .html tomcat 是用Java代码写的程序&#xff0c;运行的是Java的web应用程序。 tomcat的特点和功能&#xff1a…

运维系列.Nginx中使用HTTP压缩功能

运维专题 Nginx中使用HTTP压缩功能 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550…

鸿蒙系统:未来智能生态的引领者

在当今这个日新月异的互联网领域&#xff0c;操作系统作为连接硬件与软件的桥梁&#xff0c;其重要性不言而喻。随着华为鸿蒙系统&#xff08;HarmonyOS&#xff09;的崛起&#xff0c;一场关于操作系统未来的讨论再次被推向高潮。 鸿蒙OS&#xff0c;华为的全新力作&#xff…

注册自定义总线

1、在/sys/bus下注册一个自定义总线 #include<linux/module.h> #include<linux/init.h> #include<linux/kernel.h> #include<linux/kobject.h> #include<linux/slab.h> #include<linux/sysfs.h> #include<linux/device.h> #include…

静态路由配置注意事项及黑洞路由的使用

静态路由 1 . 定义 从管理员处学习到的数据转发路径&#xff0c;就称为静态路由。 2 . 路由表 Proto &#xff1a;协议&#xff08; Protocol &#xff09; Direct — 直连链路Static — 静态路由RIP 、OSPF 等 — 动态路由 Pre : 优先级&#xff08; Preference &#x…