赞
踩
- HCI 主机控制接口
- 通用访问配置文件(Generic Access Profile, GAP)
- 服务发现应用配置文件(Service Discovery Application Profile, SDAP)
- 串行端口配置文件(Serial Port Profile, SPP)
- 通用对象交换配置文件(Generic Object Exchange Profile, GOEP)
- 低功耗蓝牙Bluetooth Low Energy(BLE)是蓝牙4.0增加的
-
1。 BR/EDR,也就是常说的经典蓝牙。蓝牙耳机和手机的连接,这种方式是点对点,PAN,personal area network。
2。 Bluetooth Low Energy. 也就是我们现在经常用到的低功耗蓝牙应用,一个手机可以连接多个BLE设备,这种方式是点对多点。
3。 Bluetooth mesh,这是一种多点对多点的应用方式。
现有的Bluetooth 协议主要就是前面所提及的三种,分别是经典蓝牙(BR/EDR),低功耗蓝牙(BLE)及Bluetooth Mesh, 其中Bluetooth Mesh是基于Bluetooth 4.0发展起来的一种mesh组网技术,从而将以往Classic Bluetooth/BLE的一对一或者一对多的组网方式扩展到了多对多的mesh组网方式。
所以,归纳起来,常见的蓝牙组网方式有以下几种:
经典蓝牙(BR/EDR):譬如常见的蓝牙音箱就是典型的经典蓝牙应用,其常见的组网方式是1对1连接。
低功耗蓝牙(BLE):一般而言,可穿戴设备绝大多数采用的都是低功耗蓝牙,相比传统经典蓝牙,其功耗可以显著降低。目前BLE可以支持一对多的连接,同时其本身可以支持master/slave, 因此也可以轻易的在应用层将其扩展成一个树形网络。
蓝牙mesh (Bluetooth Mesh):Bluetooth Mesh是在Bluetooth 4.0基础上发展而来的组网技术,其底层所使用的仍旧是BLE,它借用BLE的三个广播信道来进行数据的交互。理论上,网络中的任何一个节点,都可以和其它任意节点进行通讯。有关Bluetooth Mesh的基础介绍,可以参考以下文档。
蓝牙组网也是随着蓝牙的发展而发展的。经典蓝牙(BR/EDR)只能以点对点的方式建立联系,严格意义上不能称作组网。例如,蓝牙音箱;某一时刻只能和某一设备之间建立连接,构成主机从机关系。
低功耗蓝牙(BLE)到来之后,发展到点对多点的方式。例如,PC作为主机时,可以通过蓝牙,同时连接蓝牙鼠标,蓝牙键盘和蓝牙耳机。本质上来说是蓝牙同时和多个设备通过连接的方式建立通信。以一台设备为中央节点,其他外围节点都单独连接在中央节点上,便构成了星型网络。
随着低功耗蓝牙的发展,蓝牙Mesh组网技术于2014年问世,基于私有协议,蓝牙Mesh能够支持设备间多点对多点传输,构成了网状网络结构。它的出现大大提高了设备之间的沟通能力。灵活的传输方式,任何节点设备和边缘设备之间都可以沟通,中继,转发。
不同的设备有不同的分工,能力强的设备可以帮助转发广播,实现了传输距离的极大提高。有一个本质的提高就是实现了设备的群控,与点对多点的星型网络不同,它以广播的形式,同时发给多个设备,这些设备可以做到同时响应。
配网,是指让设备接入网络,通常只对于WiFi设备。Wifi设备需要连接上路由器(也就是Wifi热点,又称作AP)才能上网,实现数据上报和远程控制。上面也提到了WiFi的痛点就是配网难。为什么WiFi组网要比蓝牙复杂?
因为WiFi组网首先要连上路由器,要给它账号密码,还要给它服务器的IP和端口。但是在我们身边很多物联网设备是不具备直接输入这些信息的能力。例如,智能插座,既没有按键也没有屏幕,怎么把配网的参数给它?当前业界有这些方案:
一键配网原理是通过手机或路由器发送UDP广播包的形式,将路由器的名字和密码广播出去。Wifi设备在进入配网的时候,其实就是在空中抓取广播包,抓到包之后解析就可以获取到路由器的名字和密码,然后连接上路由器。
给物联网设备专门增加一个蓝牙芯片,只用作配网使用。通过手机蓝牙把WiFi的账号密码发过去,蓝牙芯片收到后,转发给WiFi芯片,WiFi芯片再去联网。
Wifi设备进入配网状态的时候,会将自己的MAC地址通过报文的方式发送出去,这个时候路由器下面支持零配的设备(例如天猫精灵),就可以获取到需要配网设备的MAC地址,同时天猫精灵会将自己保存的路由器名字和密码通过报文发给设备。同时等待设备连接上网络,进行外网绑定。
这里推荐蓝牙+WiFi的技术方案。当然这里的蓝牙,并不仅仅只是辅助配网的功能,最强大的是它本地组网和控制功能。
与其他的组网方式相比,蓝牙组网更加简单方便,无需面对WiFi设备联网的难点。而且其组网和运行均与互联网没有一点关系。更重要的是,方便与手机电脑(自带蓝牙)等设备沟通。
优点也是缺点,在万物互联的物联网世界里,不能连上互联网,不能远程,不能后台管理,基本是很难被大家认可的。如何给它加上一双翅膀呢?
蓝奥声科技采用ble+wifi的方案:蓝牙负责本地的组网,现场控制,WiFi负责远程接入,云端连接,信息上报。蓝牙帮助WiFi配网,WiFi帮助蓝牙与云服务器连接。这样既解决了蓝牙的缺陷,也解决了WiFi的痛点。
如何方便快捷的进行配网和本地组网,是方案商们需要认真考虑的事情。以蓝牙+wifi为例,设备入网需要以下操作。创建子网,然后添加代理节点设备,配置网络ID和序码,成功加入子网,蓝牙透传路由器的账号密码,服务器ip和端口,代理节点顺利入网。然后本地组网,选择要添加的设备(MAC地址),以蓝牙广播的形式批量发送出去,成功添加设备接入子网中。
链接:https://www.zhihu.com/question/270717124/answer/1531397853
链接:https://www.zhihu.com/question/270717124/answer/357224273
GAP 协 议层定义了 BLE 设备的发现流程,设备管理和设备连接的建⽴。
BLE 设备定义了四类 GAP ⻆⾊:
• ⼴播者 (Broadcaster):处于这种⻆⾊的设备通过发送⼴播 (Advertising) 让接收者发 现⾃⼰。这种⻆⾊只能发⼴播,不能被连接。
• 观察者 (Observer):处于这种⻆⾊的设备通过接收⼴播事件并发送扫描 (Scan) 请 求。这种⻆⾊只能发送扫描请求,不能被连接。
• 外围设备 (Peripheral):当⼴播者接受了观察者发来的连接请求后就会进⼊这种⻆ ⾊。当设备进⼊了这种⻆⾊之后,将会作为从设备 (Slave) 在链路中进⾏通信。
• 中央设备 (Central):当观察者主动进⾏初始化,并建⽴⼀个物理链路时就会进⼊这 种⻆⾊。这种⻆⾊在链路中同样被称为主设备 (Master)。
协议栈整体结构图如下:
主机是一个逻辑实体,定义包括应用层以下,HCI以上的配置文件(Profile)、通用访问协议(GAP)、通用属性协议(GATT)、属性协议(ATT)、安全管理协议(SMP)、逻辑链路控制适配层(L2CAP)、HCI驱动各层。控制器也是一个逻辑实体,定义HCI层以下的HCI固件、链路层(LL),物理层(PHY)各层。
HCI规范
HCI是连接主机和控制器的桥梁,提供主机访问下层协议、硬件和控制寄存器的统一接口。HCI实际为三部分:HCI 固件、HCI驱动和实际物理接口。
HCI固件:HCI固件位于蓝牙控制器中,固件主要内容有:中断向量表、堆栈设计、初始化程序和蓝牙处理程序。HCI固件通过访问控制硬件状态寄存器、控制寄存器、事件寄存器、基带命令和链路管理命令执行HCI命令。蓝牙系统的MCU在蓝牙处理程序控制下,会读取来自上层协议栈的命令,然后根据命令配置基带层的相应寄存器。反之基带层接收到信息后反馈给MCU,MCU通过HCI物理接口递交这些信息至上层协议栈,上层协议栈根据这些信息,再产生新的命令进行处理。
HCI驱动:HCI驱动位于蓝牙主机中,也就是协议结构中HCI软件驱动部分。当某个事件触发时,控制器通过事件方式通知主机,主机则接收该事件的异步通知。当主机发现有事件发生时,它将分析收到的事件包并判断事件类型,做出相应的处理。
实际物理接口:作为HCI接口的实际物理实体,位于HCI固件和HCI驱动的中间层,提供可靠的数据传输。蓝牙控制器与主机可以使用不同的数据传输方式进行通信。不同通信方式的数据格式在实际硬件接口均具有特定的封装格式,但是经过HCI层的封装统一,不同类别的通信方式并不会造成主机接收到的HCI事件异步通知无法相互识别的情况。常用的物理接口有USB、UART和RS232三种。下图表示UART作为HCI接口时,主机与控制器的连接图。
其他上层协议规范
1)逻辑链路控制适配层(L2CAP)规范
逻辑链路控制适配层位于主机中,采用了协议复用和数据包分段重组技术,负责向高层协议栈提供面向连接的数据服务。它允许高层协议收发数据长度为64K字节。
协议复用技术:因为基带不能够识别全部高层协议的类型标志,所以位于基带上层的逻辑链路控制适配层必须支持识别不同的高层协议。
分段和重组:由于基带定义的空中数据包大小被限定在一定的范围,所以来自上层的较大数据到达逻辑链路控制适配层后,必须进行重新封包成多个小型基带数据包,以适应空中传输规则。相反的,当基带接收到空中包传输到逻辑链路控制适配层后,需要将数据包重组成一个较大的逻辑链路控制适配层数据包,再传输到上层协议。
2)通用访问协议(GAP)规范
通用访问协议规范表示蓝牙设备基本功能,包括工作模式和访问过程。低功耗蓝牙的工作模式有四种,广播、扫描、周边外设和中心主设备。在指定时间,设备只能处于四种模式之一。访问模式包括设备发现、连接模式、认证、服务发现等。
3)属性协议(ATT)规范
属性协议规范将连接中的设备区分成两种角色,即客户机和服务器。客户机与服务器通过固定逻辑链路控制适配层信道通信。客户机发送指令,请求和确认信息至服务器;服务器发送回复,通知和指示至主机。
4)安全管理协议(SMP)规范
安全管理协议产生加密密钥和识别密钥,同时也管理密钥的存储,负责产生随机的地址并通过地址识别设备。在数据加密和配对的过程中,安全管理协议将密钥发送至控制器。
5)通用属性协议(GATT)规范
通用属性协议用于建立数据传输时常用操作和框架。通用属性协议同属性协议一样分为客户机与服务器两个角色。服务器存储属性协议上传输的数据,并且接收来自属性协议上传的请求、指令和确认信息,处理好请求配置好后,则发送指令和通知至客户机。同时,通用属性协议定义了包含在服务器中的数据,即各式服务、关键词。
在BLE协议栈的应用开发过程中,整个协议栈一般有各个半导体公司自己开发好,并封装成特定的demo以后供用户使用。整个代码架构遵循二八原则,协议栈抽象成应用底层框架(Framework),半导体公司完成应用开发的80%,剩下的20%则以回调(callback)和接口的方式供应用开发人员调用以实现具体的功能。
BLE的出现是为了实现连接后的数据通信和控制,其初衷是为了完成较少量的数据通信,侧重于通信控制。所以我们可以理解BLE的协议栈包括两大组成部分:一个是BLE连接;另一个是BLE数据传输。前者即对应GAP(General Access Profile),后者对应GATT(General Attribute Profile)。Profile在蓝牙术语里面对应于特定的应用协议规范(可以自己安装标准规范编写实现特定功能的Profile)。
Framework应该完成应用开发的80%工作,剩下20%则是由各个具体应用的具体场景需求来决定的。例如,蓝牙底层连接时怎么握手,应用开发人员不需要关心吧;GATT的characteristics value值的通信过程,不要关心吧。当蓝牙外设有新的数据要传输给主设备时,只需要调用notify或者indicate接口就可以了,至于底层怎么实现,那是协议栈开发人员的工作!
————————————————
1.GAP(generic access profile) 管理连接、广播和发现以及安全验证。
2.GATT(generic access attribute profile) 通用属性配置文件(GATT)在属性协议(ATT)的基础上构建,为属性协议传输和存储数据建立了一些通用操作和框架。
3.ATT(attribute profile) ATT的唯一基础是属性,规范对设备的属性一系列操作,如 write、read、find info等。
a)CENTRAL(MASTER): GAP role,例如手机、平板或者电脑,查找正在广播的从设备,初始化连接、修改连接参数。
b)PERIPHERAL(SLAVER): GAP role, 一般是一个嵌入式设备,依靠电池并且比较省电的。c)CLIENT:向另外一个设备(server)读取数据或者写入数据。一个设备可以既是client也是server。
d)SERVER: 提供数据给其他设备(client)。一个设备可以既是client也是server。
1)PROFILE: 规范了由一系列service构成的表现,如心率计等。
2)SERVICE:由特征值组成,和其他service组合描述了设备的具体行为能力。
3)CHARACTERISTIC: 特征值,包含user data 和metadata, 通过可读、可写、描述符来描述。
4)WRITE: 改变属性值的请求。
5)READ: 获取属性值的请求。
6)NOTIFICATION:发送给已注册的客户端提示某个属性值的改变,不需要应答。由server来初始这个动作。
7)INDICATION:和NOTIFICATION类似,但是需要应答。也是由server来初始化这个动作。
BLE发展大事记:
1. 2010年,蓝牙4.0规范出世。
2.第一步支持BLE的手机,iphone4S.
3.2013年12月,蓝牙4.1规范应时而生,同事支持多个role。
4.2014年12月,蓝牙4.2规范发布,支持安全验证,IP互联,提升了速率。大量适用于物联网。
5.2016年12月,蓝牙5.0规范发布,相较于前一版本,2倍的SPEED, 4倍的RANGE, 8倍的ADVERTISING。
BLE主要技术参数:
1.频率范围:2.400GHz--2.4825GHz ISM BAND。
2.通道: 40 X 2MHz per channel。
3.范围: 30--400M。
4.速率: 高达2MBIT/S。
5.安全验证: 128-BIT AES。
6.功耗:0.01--0.5W。
7.峰值电流:<15ma。
重点学习了协议栈最顶层的两个通用profile:GAP(通用接入规范)、GATT(通用属性规范)。
GAP主要负责处理设备的接入方式以及接入的过程:设备发现、链路建立、链路终止、启动安全功能、设备配置(主要是连接参数的配置)。
GATT主要完成服务器和客户端之间通信的相关子过程。
进一步学习GAP,主要扮演四种角色:broadcaster(广播者)、obseerver(观察者)、peripheral(外围)、central(中央)。
蓝牙联盟沿用经典蓝牙的规范内容,为低功耗蓝牙定义了一些标准Profile
,Profile理解为数据规范,只要遵守该规范,任意厂家的蓝牙设备,均可以相互连接与通信,例如无线蓝牙键盘鼠标,无论是安卓或是iOS还是Windows,均是即插即用,这便是“标准”的力量。低功耗蓝牙支持的标准Profile有:
另外,低功耗蓝牙还可以自定义Profile,伴随着智能手机的发展和普及,低功耗蓝牙的这个特性得到了发扬光大,同时也拓宽了低功耗蓝牙的应用领域。例如,可以自定义一个开关量的Profile,数据01表示开灯,数据00表示关灯,然后手机发送数据01和00就可以控制灯的亮和灭。
类似的应用案例有很多,下面总结应用特点
BLE设备角色主要分为两种角色,主机(Master或Central)
和从机(Peripheral)
,当主机和从机建立连接之后才能相互收发数据
另外还有观察者(Observer)
和广播者(Broadcaster)
,这两种角色不常使用,但也十分有用,例如iBeacon,就可以使用广播者角色来做,只需要广播特定内容即可。
蓝牙协议栈没有限制设备的角色范围,同一个BLE设备,可以作为主机,也可以作为从机,我们称之为主从一体,主从一体的好处是,每个BLE设备都是对等的,可以发起连接,也可以被别人连接,更加实用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。