蓝牙模块各种工作模式
摘要:本文主要归纳总结蓝牙模块的不同工作模式,通过蓝牙模块不同的工作模式了解其扮演不同角色时工作的一个基本原理,为更深入的研究蓝牙模块底层的工作机制和技术方案进行铺垫。
1、主设备工作模式
主设备是能够搜索别人并主动建立连接的一方,从扫描状态转化而来的。其可以和一个或多个从设备进行连接通信,它会定期的扫描周围的广播状态设备发送的广播信息,可以对周围设备进行搜索并选择所需要连接的从设备进行配对连接,建立通信链路成功后,主从双方就可以发送接收数据。例如智能手机,数据传输中做主机的蓝牙模块。
一个蓝牙设备以主模式发起连接时,需要知道从设备的mac地址,配对密码等信息,配对完成后,可直接连接。同时主设备可以设置默认连接从设备的mac地址,这样主设备模块上电会自动搜索该mac地址的从设备并且进行连接。并且支持白名单功能,用户只需要把需要连接的设备的mac写入白名单中,模块搜索到符合白名单的设备时就进行连接。主从透传协议相同时,用户不需要关注串口数据与无线数据包之间的数据转换过程,只需通过简单的参数设置,即可实现主设备串口与从设备串口之间的数据透传。
为保证连接的稳定性,预防断电、信号等异常问题导致模块之间断开连接,可以开启断线重连功能,当异常干扰问题消失,模块工作环境恢复正常,主设备会自动搜索刚刚断连的从设备,尽可能减少数据的丢失,提高系统稳定性。

2、从设备工作模式
从设备模式是从广播者模式转化而来的,未被连接的从设备首先进入广播状态,等待被主机搜索,当主机扫描到从设备建立连接后,就可以和主机设备进行数据的收发,其不能主动的建立连接,只能等别人来连接自己。和广播模式有区别的地方在于,从设备模式的蓝牙模块是可以被连接的,定期的和主机进行连接和数据传输,在数据传输过程中作从机。例如蓝牙手表手环,蓝牙鼠标等工作在从设备模式。
一对一应用中从设备可以设为两种类型,一是静默状态,即只能与指定的主设备通信,不被别的蓝牙设备查找;二是开发状态,既可被指定主设备查找,也可以被别的蓝牙设备查找后建立连接。
从设备模式下,用户可以根据协议自己开发APP。此模式下包含一个串口收发的Service,用户可以通过UUID找到它,里面有两个通道,分别是读和写。用户可以操作这两个通道进行数据的传输。如果用户使用的主设备和从设备是同一个厂家生成的蓝牙模块,那么主设备和从设备相连接可以无需关注里面的协议,蓝牙设备在出厂前预先设置了两个蓝牙设备之间的配对信息,两端设备接通电源后自动构建链路,不需要外围电路的介入,两个设备的串口直接就可以进行数据的透明传输,为用户建立一个简单的无线传输通道。

通过上述对蓝牙模块主设备模式和从设备模式的分别阐述,可以将基本的主从建立连接的过程总结如下:蓝牙主设备发起连接,首先是查找,找出周围处于可被查找的蓝牙设备。主设备找到从设备后,与从设备进行配对,此时需要输入从设备的PIN码,也有设备不需要输入PIN码。
配对完成后,从端蓝牙设备会记录主端设备的信任信息,此时主设备即可向从设备发起连接,已配对的设备在下次连接时不再需要重新配对。已配对的设备,作为从端蓝牙设备也可以发起建立链路的请求,但作数据通信的蓝牙模块一般不启动调用。一旦建立了链接,主机和从机之间就可以进行双向的数据或语音通信。在通信状态下,主设备和从设备都可以发起断链,即断开蓝牙链路。
3、主从一体工作模式
主从一体工作模式是指蓝牙模块可以同时作为主设备和从设备。其可以在两个角色间切换,工作在从模式时,等待其它主设备来连接,需要时,转换为主模式,向其它设备发起连接调用。主从一体提供了扩展蓝牙模块的能力,在蓝牙4.1协议规范后,添加了“链路层拓扑”的功能,就可以允许蓝牙模块同时作为主设备和从设备,在任何角色组合中操作。例如蓝牙HUB终端。
当具备主从一体的蓝牙模块工作时,该蓝牙模块可以作为主设备搜集其它外围从节点设备的信息,同时作为一个从设备将搜集到信息上报给主控终端如手机。这样的好处就是外围的从节点设备信息可以不局限在本地保存,通过主从一体的蓝牙模块发挥中继器的作用,搜集后上传给云端或集中控制器保存或显示。
主从一体额外增加了蓝牙模块的功能,成本优化和易用性。 如果蓝牙模块以前在封闭系统中作为主设备工作,那现在还可以同时作为从机连接到智能手机,从而实现新的连接维度。在主从一体工作模式下,一个蓝牙模块就可以扮演两种角色,从而可以优化系统架构。

4、广播者工作模式
蓝牙广播是蓝牙4.0以上设备必须支持的功能。它不涉及到更上层的连接层和协议层。因此,利用蓝牙广播的数据包来传递的信息,在蓝牙设备上具有更好的实时性和兼容性。在广播模式下,蓝牙模块定期持续的向周围发送一定长度广播的数据包,该数据可以被扫描者搜索到,模块可以在低功耗的模式下持续的进行广播,应用于极低功耗,小数据量,单向传输的应用场合。蓝牙广播通道的重要功能就是是用于发现设备,发起连接和发放数据。
广播模式主要有两种使用场景:(1)单一方向的、无连接的数据通信,数据发送者在广播信道上广播数据,数据接收者扫描、接收数据;广播者”将用作服务器。其目的是定期将数据传输到设备,但不支持任何连接。如信标、广告牌、室内定位、物料跟踪等。(2)面向连接的建立,如蓝牙从设备广播消息后由主设备搜索到后进行连接,广播者和从设备模式的唯一区别是不能被主机连接,只能广播数据。
蓝牙的广播一般是向外广播自己的mac地址、名称以及支持的特性,广播主要是用于被其它的设备发现,而不是进行数据发送的。广播包长度是固定的字节,虽然可以有厂商自定义的数据,但是数据也是有限的。
广播数据包有两种:广播包(Advertising Data)和响应包(Scan Response),其中广播包是每个设备必须广播的,而响应包是可选的,每个包长度都是固定字节N,数据包的长度N随着蓝牙协议的标准提高而扩容,例如蓝牙5.0的数据包从蓝牙4.2的31字节升级成为255字节,数据包中分为有效数据和无效数据两部分。每个广播包的长度必须是N个字节,如果不到N个字节 ,则剩下的全用0填充补全,这部分的数据是无效的。

5、观察者工作模式
观察者模式,该模式下模块为非连接,相对广播者模式的一对多发送广播,观察者可以一对多接收数据。在该模式中,设备可以仅监听和读取空中的广播数据。和主机唯一的区别是不能发起连接,只能持续扫描从机。
观察者工作模式可应用于数据采集集中器的应用场合,如传感器集中器采集等功能;另一个典型的例子是蓝牙网关,蓝牙模块处于观察者模式,无广播,它可以扫描周围的广播设备,但不能要求与广播设备连接。

6、iBeacon工作模式
iBeacon 是苹果公司2013年9月推出的一项室内低耗能蓝牙技术。其工作方式是:iBeacon是一个低功耗的蓝牙信标,使用的是BLE技术,工作在广播模式,利用的是BLE中名为“通告帧”(Advertising)的广播帧。通告帧是定期发送的帧,只要是支持BLE的设备就可以接收到。广播的发射功率可以调整,不停的广播蓝牙设备的mac地址、UUID等固定字节的字符串等信息,接收到该字符串应用软件会根据该字符串采取一些措施。
iBeacon是基于2010年发布的蓝牙4.0技术规范的基础上发展而来的微定位技术。它是建立在低功耗蓝牙协议基础上的一种广播协议,同时它也是拥有这个协议的一款低功耗蓝牙设备(从机),但是它不能和任何低功耗蓝牙主机进行连接,通常是放在室内的某个固定位置,借此向周围进行连续性广播,所有广播数据在特定规则下进行排列。
与WIFI定位相比,iBeacon定位具有低成本和高安全性,其应用场景多种多样。常见的应用是精确营销,比如博物馆、展厅的信息推送或者购物中心服务商向顾客发送折扣卷及进店积分等。如果把它放在室内固定的位置,可以作为一个定位器,手机打开蓝牙连接之后通过APP就可以获取其位置,同时会推送一些设置好的信息到我们手机上。
微信摇一摇也加入了iBeacon功能,例如住酒店,用户在酒店大堂摇一摇,就可以获取房间信息。很简单,你的手机加入装了一个支持iBeacon的APP或者你用微信摇一摇周边,刚好你又在这个iBeacon设备旁边,手机就会收到一段蓝牙信号,然后手机带着这个信号,去服务器问,这个信号是啥意思,服务器看到这个信号,又看到是你的手机带着这个信号过来的,那就给你发信息。
蓝牙iBeacon是一种非常新颖的交互方式,它是一种低功耗协议,也是一种低功耗蓝牙设备。在智能领域有非常广泛的前景

7、Mesh组网工作模式
蓝牙Mesh组网技术在2017年得到SIG批准,这是一种独立的网络技术,兼容4及5系列蓝牙协议。它把蓝牙设备作为信号中继站,利用低功耗蓝牙广播的方式进行信息收发,蓝牙Mesh技术拓展了蓝牙的通讯关系,打破了以往蓝牙设备只能够主从一对一、广播一对多通信的限制,使网络内的蓝牙设备可以实现“多对多”的设备通信,这将大大增加蓝牙的通讯距离和应用场景,填补了蓝牙在大规模组网,大面积覆盖应用领域的空白。
Mesh网络也称为"多跳网络",或者“网状网络”。Mesh网络的每一个节点都可以作为AP和路由器,通信时,当某个节点损坏或者堵塞时,可以自动绕过该节点,重新选择路径达到目的地,可以让网络更高效可靠。
工作在Mesh组网模式的BLE蓝牙模块可以简单的将多个模块加入到网络中来,一个加入到蓝牙Mesh网络中的设备称为节点利用星型网络和中继技术,每个网络可以连接理论最大65536个节点,每个节点都可以发送、接收、转发消息。消息可以在Mesh网络中被转发从而到达更远的距离。网络和网络还可以互连,最终可将无数蓝牙模块通过手机、平板电脑或 PC 进行互联或直接操控。并且不需要网关,即使某一个设备出现故障也会跳过并选择最近的设备进行传输。整个联网过程只需要设备上电并设置通信密码就可以自动组网,真正实现简单互联。
由于目前几乎所有的智能手机都具备蓝牙功能,所以可以使用手机对蓝牙Mesh设备进行直接控制。蓝牙Mesh是一种可以像ZigBee一样实现大规模组网,同时又不必依赖网关,可以使用手机进行直接控制的方案。
总而言之,蓝牙Mesh组网有着广阔的发展前景,这种技术可组节点成百上千,无需网关可以直接与智能终端通信,满足物联网的连接需求,这是任何其它短距离无线技术都不具备的条件,在智能家居、智能建筑等众多领域具有应用优势,蓝牙Mesh技术将成为物联网短距离规模组网的最优方案。

总结
可以看出,不同类型的蓝牙模块根据使用场景的不同,可以有不同的工作模式,并不仅仅是简单的点对点通信,随着蓝牙协议标准的升级,蓝牙技术也跟着不断提高,工作模式的不同使得蓝牙模块可以扮演不同的角色,适配不同的技术应用,发挥其所需要的功能,最后通过一张思维导图来对本文进行概述性总结。

相关文章:
蓝牙模块各种工作模式
摘要:本文主要归纳总结蓝牙模块的不同工作模式,通过蓝牙模块不同的工作模式了解其扮演不同角色时工作的一个基本原理,为更深入的研究蓝牙模块底层的工作机制和技术方案进行铺垫。 1、主设备工作模式 主设备是能够搜索别人并主动建立连接的一…...
修剪灌木[蓝桥杯2022初赛]
题目描述 爱丽丝要完成一项修剪灌木的工作。 有 N 棵灌木整齐的从左到右排成一排。 爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为 0 厘米。 爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。 当修剪了最右侧的灌木后,…...
Python的知识点运用-1(日期转换)
问:如何将 星期一, 三月 13, 2023转换成2023-03-13看到这个问题,你的第一反应是什么???反正我是懵逼的。不过后面一想,时间模块可以。在这个问题后面,群友又问了一个问题,如何在本地…...
原理图制图规范详细说明
1、1 原理图必须使用公司统一原理图库 在原理图设计中,必须采用公司统一原理图库,以保证设计的一致性和打包后封装、料单等结果的一致性。不使用公司统一原理图库造成的连接、封装错误个人承担责任。 注意使cds.lib中的路径指向库服务器eda-svr1的路径…...
【Unity小知识】Editor编写常用方法汇总
汇总一些Unity Editor开发的常用方法和实现方式,会持续更新。 添加自定义菜单栏方法 using UnityEngine; using UnityEditor;public class EditorTools : EditorWindow {[MenuItem("EditorTools/自定义的编辑器方法")]public static void CustomEditroFu…...
【数据仓库-4】-- 提取、转换、装载(ETL)
1.数据抽取 1.1 逻辑抽取 1.1.1 全量数据抽取 一般发生在我们初始化时,需要一次性将源库(业务系统)的所有数据抽取到数据仓库的ODS层。 比如将一个全表导出数据文件或者查询源表所有数据的SQL语句, 都是全量抽取的例子。 select * from user.person; 1.1.2 增量数据抽取 对…...
【DBC专题】-12-不同类型报文(应用/诊断/网关/测量标定)在DBC中配置,以及在Autosar各模块间的信号数据流向
点击返回「Autosar从入门到精通-实战篇」总目录 案例背景(共18页精讲):该篇博文将告诉您: 1)Autosar中,不同类型报文(App应用,UDS/OBD诊断,NM网络管理报文,XCP测量标定)的信号数据流向; 2)CAN …...
【Linux】进程的基础概念 进程的相关操作 进程的状态
进程一、进程的基本知识1、基本概念2、进程的描述 —— PCB3、task_ struct内容分类二、进程的相关操作1、在Linux下查看进程2、通过系统调用在代码中获取进程标示符3、如何创建子进程4、关于fork()的一些深度理解三、进程的状态Linux中的进程的状态四、僵尸进程与孤儿进程僵尸…...
【小猫爪】AUTOSAR学习笔记06-Communication Stack之ComM模块
【小猫爪】AUTOSAR学习笔记06-Communication Stack之ComM模块前言1 ComM简介2 ComM功能介绍2.1 PNC 状态管理2.2 Channel状态管理2.3 通信禁止功能2.4 不同类型的NM2.5 User、PNC 与 Channel 的映射2.6 状态保存END前言 因为一个偶然的机会让我接触到了AUTOSAR,所以…...
BP插件开发(JAVA)
本文会包括BP插件开发流程及打包,API,javaswing(UI)部分的内容。阅读完本文后,读者将初步具有开发BP插件的能力。1 开始开发我们使用IDEA作为开发工具(使用其他IDE也绰绰有余)。引入依赖包&…...
【Zookeeper】介绍与配置
目录 概述 工作机制 特点 数据结构 应用场景 统一配置管理 统一集群管理 编辑 服务器动态上下线 软负载均衡 下载 启动 启动客户端 配置参数 集群配置 配置服务器编号 配置zoo.cfg 分发zoo.cfg配置文件 选举机制 第一次启动 非第一次启动 集群启动停止脚本…...
chrome快捷键
Ctrl T:打开新标签页。Ctrl W:关闭当前标签页。Ctrl Shift T:重新打开最近关闭的标签页。Ctrl Tab:在打开的标签页之间切换。Ctrl Shift Tab:在打开的标签页之间反向切换。Ctrl N:打开新窗口。Ctrl…...
手搓string类
手搓string类 文章目录手搓string类string的成员一.构造,拷贝构造,赋值重载和析构1.构造函数2.拷贝构造3.swap问题4.赋值重载5.析构函数二.简单接口1.c_str2.size(有效字符长度)3.capacity(有效字符容量)4.operator[]5.迭代器和范…...
小白学Pytorch系列--Torch API (7)
小白学Pytorch系列–Torch API (7) Comparison Ops allclose 此函数检查输入和其他是否满足条件: >>> torch.allclose(torch.tensor([10000., 1e-07]), torch.tensor([10000.1, 1e-08])) False >>> torch.allclose(torch.tensor([10000., 1e-…...
函数(上)——“Python”
各位CSDN的uu们你们好呀,今天小雅兰的内容是Python的函数呀,下面,就让我们进入函数的世界吧 首先可以选择性地看一下小雅兰很久之前写的C语言函数章节的知识: 函数——“C”_认真学习的小雅兰.的博客-CSDN博客 函数递归…...
ChatGPT说:如何利用ChatGPT变现?躺着赚钱不是梦。
您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。 💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通 😁 2. 毕业设计专栏&…...
4.网络爬虫—Post请求(实战演示)
网络爬虫—Post请求实战演示POST请求GET请求POST请求和GET请求的区别获取二进制数据爬[百度官网](https://www.baidu.com/)logo实战发送post请求百度翻译实战使用session发送请求模拟登录17k小说网常见问题前言: 📝📝此专栏文章是专门针对…...
【视频文稿】车载Android应用开发与分析 - 开发系统应用
本期视频地址:https://www.bilibili.com/video/BV1NY411z7TK/ 前言 Hello,大家好,我是林栩。 开发车载应用,其实主要都是在Android系统中编写各种系统应用,所以上期视频先介绍了Android系统源码的下载和编译流程&…...
Scala流程控制
目录 单分支 双分支 多分支 for 循环控制 循环守卫 循环步长 循环嵌套 循环返回值 While 和 do..While 循环控制 While循环控制 do..While 循环控制 循环中断 单分支 if (条件表达式) {执行代码块 }var age StdIn.readShort()if (age < 18){println("童年&quo…...
人脸活体检测系统(Python+YOLOv5深度学习模型+清新界面)
摘要:人脸活体检测系统利用视觉方法检测人脸活体对象,区分常见虚假人脸,以便后续人脸识别,提供系统界面记录活体与虚假人脸检测结果。本文详细介绍基于YOLOv5深度学习技术的人脸活体检测系统,在介绍算法原理的同时&…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
