一文认识蓝牙(验证基于Aduino IDE的ESP32)

1、简介

蓝牙技术是一种无线通信 的方式,利用特定频率的波段(2.4GHz-2.485GHz左右),进行电磁波传输,总共有83.5MHz的带宽资源。

1.1、背景

蓝牙(Bluetooth)一词取自于十世纪丹麦国王哈拉尔HaralBluetooth。一位来自英特尔的工程师 Jim Kardach将"蓝牙"与后来的无线通讯技术标准关联在一起的。他在一次无线通讯行业会议上,提议将"Bluetooth"作为无线通讯技术标准的名称。蓝牙的 LOGO 则是来自后弗萨克文的符文组合,将哈拉尔国王名字的首字母 H 和 B 拼在一起,成为了今天大家熟知的蓝色徽标。

蓝牙技术开始于爱立信联合在 1994 年创制的方案,该方案旨在研究移动电话和其他配件间进行低功耗、低成本无线通信连接的方法。发明者希望为设备间的无线通讯创造一组统一规则(标准化协议),以解决用户间互不兼容的移动电子设备的通信问题,1999年在爱立信联合IBM、英特尔、诺基亚及东芝公司等公司在1999 年 7 月 26 日正式公布 1.0A 版,确定使用 2.4GHz 频段。从此之后,蓝牙就开始了迅速发展的历程。

1.2、发展历程

|-----------|------|-----------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 版本 | 时间 | PHY极限速率 | 主要技术更新 |
| 1.0A/1.0B | 1999 | 0.7Mbit/s | 最早期的蓝牙 1.0 A 和 1.0B 版存在多个问题,有多家厂商指出他们的产品互不兼容。. |
| 2.0+EDR | 2004 | 1Mbps(3Mbps with EDR) | 新增的 EDR(Enhanced Data Rate)技术通过提高多任务处理和多种蓝牙设备同时运行的能力,使得蓝牙设备的传输率可达 3Mbps。蓝牙 2.0 支持双工模式:可以一边进行语音通讯,一边传输文档/高质素图片。同时,EDR 技术通过减少工作负债循环来降低功耗,由于带宽的增加,蓝牙 2.0 增加了连接设备的数量。 |
| 3.0+HS | 2009 | 1Mbps(3Mbps with EDR,24Mbps over 802.11 WIFI) | High Speed 可以使蓝牙调用 802.11 WiFi 用于实现高速数据传输,传输率高达 24Mbps,是蓝牙 2.0 的 8 倍,轻松实现录像机至高清电视、PC 至 PMP、UMPC 至打印机之间的资料传输。 |
| 4.0+BLE | 2013 | 3Mbps with EDR ,1Mbps LE | 蓝牙 4.0 是迄今为止第一个蓝牙综合协议规范,将三种规格集成在一起。其中最重要的变化就是 BLE(Bluetooth Low Energy)低功耗功能,提出了低功耗蓝牙、传统蓝牙和高速蓝牙三种模式。 |
| 5.0 | 2017 | 2Mbit/s LE | 有效传输距离是蓝牙 4.2 的四倍 (理论上可达 300 米)更低的功耗,低速率下保持几个uA,增加了信标、MASH组网、扩展广播、 室内定位等等新的技术。 |

当前的蓝牙技术主要分为BR/EDR(Basic Rate /Enhanced Data Rate)和低耗能(LE)两种技术类型。其中BR/EDR型是以点对点网络拓扑结构创建一对一设备通信;LE型则使用点对点(一对一)、广播(一对多)和网格(多对多)等多种网络拓扑结构。

低功耗蓝牙不能向后兼容原有的蓝牙协议(经典蓝牙协议),所以它们之间是不能互通的。蓝牙4.0规范允许设备同时支持经典与低功耗蓝牙协议。

2、工作方式

广播模式、主从模式、主从一体模式、扫描模式、透传模式、AT指令模式

3、分类(蓝牙规范)

在介绍蓝牙协议之前,我们可以先复习一下TCP/IP5层网络模型和它所对应的网络协议集

可能不同应用的只需要关注在不同层次上的网络协议就可以满足日常工作使用了,**像应用开发的程序猿,一般只关注应用层的协议,http,https等等;网络的程序猿可能只需要关注TCP协议、IP协议以及ARP协议等;WiFi的程序猿主要focus在802.11协议上。**但蓝牙技术不同,它并不处于TCP/IP5层模型中的任何一层,而是覆盖了整个5层TCP/IP模型。有了这个概念之后,让我们来看看下图

在图中我们可以看到,蓝牙的架构分为HostController两个模块。在开发过程中,我们一般把蓝牙的架构分为这两个模块,

Host主要是各种业务场景需求的实现

Controller部分主要负责的是蓝牙报文的收发以及蓝牙物理连接的管理这些基本功能

通常绝大部分的开发工作都是在Host端进行,Controller部分的工作大都是由专门的蓝牙芯片厂商来负责;Host和Controller分模块的最初设计理念是想让这两个模块单独运行在两颗不同的芯片甚至系统上,之间通过硬件通信端口(串口,USB)使用HCI协议进行连接和通信 ,这样可以方便替换和升级,例如对于不带蓝牙功能的电脑,我们可以买一个USB蓝牙接收器插到电脑上,就可以支持了蓝牙功能,这个场景下,HOST模块就是运行在电脑系统上,Controller模块就是运行在USB蓝牙接收器上。现在虽然有不少芯片把Host和Controller模块都放在了一颗芯片上,但是基本还是遵循这样的层次结构,只是将HCI协议从硬件通信端口换成了软件端口。

从应用场景来说,蓝牙规范针对了我们日常生活中会碰到的非常多的场景分别定义了不同的场景规范(Profile)来支持这些场景下的需求

在图中我们可以看见:

HFP(Hands Free Profile):来支持蓝牙耳机通话场景

SPP(Serial Port Profile):用于串口传输

OPP(Object Push Profile):用于设备之间的文件传输场景

A2DP(Advanced Audio Distribution Profile):用于蓝牙耳机收听音乐场景

AVRCP(A/V Remote Control Profile):用于蓝牙耳机音乐播放控制场景

PAN(Personal Area Networking Profile):可以让手机作为蓝牙热点提供上网服务

HOGP(HID Over GATT Profile):低功耗蓝牙鼠标键盘,充一次电可以用三个月到半年。

蓝牙其实还有其他的像打印(Basic Printing Profile),心率(Heart Rate Profile),寻物(Find Me Profile)等等一系列场景规范(Profile)来支持不同的应用场景

传统蓝牙和低功耗蓝牙虽然都是蓝牙技术,但两种之间有非常大的差别,一个简单的区分就是看版本,版本低于4.0的都是经典蓝牙,高于4.0的才能支持低功耗蓝牙。在这里我们简单介绍一下两种蓝牙技术的概念

3.1传统蓝牙

泛指支持蓝牙协议在4.0以下的模块,一般用于数据量比较大的传输,如:语音、音乐等较高数据量传输。 经典蓝牙模块可再细分为:传统蓝牙模块和高速蓝牙模块。传统蓝牙模块在2004年推出,主要代表是支持蓝牙2.1协议的模块,在智能手机爆发的时期得到广泛支持。高速蓝牙模块在2009年推出,速率提高到约24Mbps,是传统蓝牙模块的八倍,可以轻松用于录像机至高清电视、PC至PMP、UMPC至打印机之间的资料传输。

3.1.1、协议架构

蓝牙协议规定了两个层次的协议,分别为蓝牙核心协议 (Bluetooth Core)和蓝牙应用层协议(Bluetooth Application)

蓝牙核心协议

Bluetooth Core由两部分组成,Host和Controller。这两部分在不同的蓝牙技术中,承担角色略有不同,但大致的功能是相同的。Controller负责定义RF、Baseband等偏硬件的规范,并在这之上抽象出用于通信的逻辑链路(Logical Link);Host负责在逻辑链路的基础上,进行更为友好的封装,这样就可以屏蔽掉蓝牙技术的细节,让Bluetooth Application更为方便的使用。

在一个系统中,Host只有一个,但Controller可以一个,也可以有多个 。一个常见的例子是蓝牙耳机与手机之间的通信。在这种情况下,手机充当蓝牙主设备(Host) ,负责管理整个蓝牙连接。手机内部可能搭载了一个或多个蓝牙控制器(Controller),用来处理和管理蓝牙信号的发送和接收。当用户使用蓝牙耳机时,手机会与蓝牙耳机进行配对并建立连接。手机作为主设备发送音频数据到蓝牙耳机,而蓝牙耳机的控制器接收并处理这些数据,然后将音频播放出来。在这个例子中,手机是唯一的主设备(Host),但可能搭载一个或多个蓝牙控制器(Controller),以实现音频数据的传输和处理。

蓝牙应用层协议

定义了蓝牙设备之间进行数据传输和通信所需的协议和规范。

蓝牙应用层协议包括多个子协议,其中最常用的是串口配置协议(SPP)、对象交换协议(OPP)、电话簿访问协议(PBAP)、音频/视频远程控制协议(AVRCP)等。

SPP协议用于在蓝牙设备之间建立虚拟串口通信,可以实现数据的双向传输。

OPP协议用于在蓝牙设备之间进行对象(如照片、音乐等)的传输和共享。

PBAP协议用于在蓝牙设备之间共享电话簿数据,方便用户在蓝牙设备上查看和管理联系人信息。

AVRCP协议用于在蓝牙设备之间进行音频/视频播放控制,例如播放、暂停、下一曲等操作。

除了上述常用的应用层协议外,蓝牙还支持一些其他的应用层协议,如蓝牙打印协议(BPP)、蓝牙键盘协议(HID)等,这些协议都为不同类型的蓝牙设备之间的通信和数据传输提供了标准化的解决方案。通过应用层协议,蓝牙设备可以实现各种不同类型的功能和应用,为用户提供更加便利和丰富的蓝牙体验。

SPEC中蓝牙协议分为四个层次:物理层(Physical Layer)、逻辑层(Logical Layer)、L2CAP Layer和应用层(APP Layer)

3.1.1.1、物理层

物理层负责提供数据传输的物理信道,蓝牙的物理层分为Physical Channel和Physical Links两个子层。一个通信系统中通常存在多种类型的物理信道,BR/EDRLE 和**AMP** 在物理层的实现就较大的差异。

相同点

BR/EDR、LE和AMP的RF都使用2.4GHz频段,频率范围是**2.400-2.4835 GHz**。

不同点

|--------------|--------------------------------|------------------------|----|
| 分类 | 频率 | 信道 | 备注 |
| BR/EDR(经典蓝牙) | 分成79个channel,每一个channel占用1M的带宽 | 5种物理信道(跳频信道) | |
| LE(低功耗蓝牙) | 分成40个channel,每一个channel占用2M的带宽 | 2种物理信道 | |
| AMP(高速数据传输) | 直接采用802.11(WIFI)的PHY规范 | 一个AMP Physical Channel | |

3.1.1.2、逻辑层

主要功能是在已连接(的蓝牙设备之间,基于物理链路,建立逻辑信道。所谓的逻辑信道,和城市道路上的车道类似:一条城市单行道路可以看做一个物理链路,该物理链路根据行车用途,可以划分为多个逻辑信道,如直行车道、右转车道、左转车道、快速车道、慢速车道等等。如图

|------------|-----------------------------------------------------|
| AMP ACL | 基于AMP技术的、面前连接的、异步传输链路,为AMP-U提供服务 |
| BR/EDR ACL | 基于BR/EDR技术的ACL链路,为ACL-C、ACL-U提供服务 |
| SCO/eSCO | 基于BR/EDR技术的、面向连接的、同步传输链路,为stream类型的Logical Link提供服务 |
| ASB、PSB | 基于BR/EDR技术的、面向连接的广播传输链路,为ACL-U、PSB-U、PSB-C提供服务 |
| CSB | 基于BR/EDR技术的、无连接的广播链路,为PBD提供服务。 |
| LE ACL | 基于LE技术的、面前连接的、异步传输链路,为LE-U、LE-C提供服务 |
| ADVB | 基于LE技术的、广告/广播链路,为ADVB-U、ADVB-C提供服务 |

3.1.1.3、L2CAP

L2CAP是逻辑链路控制和适配协议(Logical Link Control and Adaptation Protocol)的缩写,负责管理逻辑层提供的逻辑链路。基于该协议,不同Application可共享同一个逻辑链路,类似TCP/IP中端口(port)的概念 。通过L2CAP层可以将ACL数据分组交换为便于高层应用的数据分组格式,并提供协议复用和服务质量交换等功能。L2CAP提供多路复用角色,允许许多不同的应用程序共享ACL-U,ASB-U,LE-U或AMP-U逻辑链接。通过协议多路复用、分段重组操作和组概念,向高层提供面向连接的和无连接的数据服务,L2CAP还屏蔽了低层传输协议中的很多特性,使得高层协议应用开发人员可以不必了解基层协议而进行开发。

3.1.1.4、应用层

基于L2CAP提供的channel,实现各种各样的应用功能。。Profile是蓝牙协议的特有概念,为了实现不同平台下的不同设备的互联互通,蓝牙协议不止规定了核心规范(称作Bluetooth core),也为各种不同的应用场景,定义了各种Application规范,这些应用层规范称作蓝牙profile。更新一下图

核心规范

Core Specifications,定义了蓝牙技术最核心的内容。覆盖了从物理层一直到传输层的内容。
Protocol规范

Protocol Specfications,在核心规范之上针对某一大类场景(例如音视频传输,线缆通信传输,网络通信传输)的数据通信需求来定义的传输协议,属于应用层协议,只在经典蓝牙中存在。
Profile规范

包含经典蓝牙的Traditional Profile Specifications和低功耗蓝牙的GATT Specifications。这类规范是针对某一个特定场景需求(例如听音乐,打电话)来对核心规范和protocol做出更细化的定义和对这些协议无法满足的一些细化需求做了补充协议。
蓝牙mesh规范

Mesh Networking Specifications,这是蓝牙最新的mesh规范。只使用了低功耗蓝牙的

3.1.2、代码(待更新)

待更新

3.2低功耗蓝牙

指支持蓝牙协议4.0或更高的模块,也称为BLE模块,最大的特点是成本和功耗的降低,应用于实时性要求比较高的产品中,比如:智能家居类(蓝牙锁、蓝牙灯)、传感设备的数据发送(血压计、温度传感器)、消费类电子(电子烟、遥控玩具)等。

3.2.1、协议架构

BLE的协议可分为Bluetooth ApplicationBluetooth Core两大部分,Bluetooth Core又包含BLE Controller和BLE Host两部分(在传统蓝牙的协议架构的时候讲过)。Bluetooth Application主要调用API实现上层功能,本质上来说不属于协议层,重点了解GAP、ATT、Link Layer,其它有个简单认识即可

PS:传统蓝牙和低功耗蓝牙区别

PS.1、Controler端

在经典蓝牙的定义里,将这83.5MHz总共分为80个频道每个频道是1MHz带宽 ,蓝牙连接管理是用连接管理协议(Link Manager Protocol LMP)。低功耗蓝牙里,空中只有40个频道,每个频道是2MHz带宽 ,连接管理使用的是连接层(Link Layer),空中数据包的结构也完全不同。我们可以看到,Controler部分的功能完全是两个独立的路径,也就是说,经典蓝牙和低功耗蓝牙的controller可以独立存在,互相不依赖,所以目前市面上有只支持经典蓝牙的芯片,也有只支持低功耗蓝牙芯片,当然,也有两种蓝牙模式共存的芯片。

PS.2、Host端

在经典蓝牙协议里,在逻辑链路控制与适配协议层(Logical Link Control and Adaptation Protocol L2CAP)之上,还根据不同的应用场景定义了不同的传输协议,例如RFCOM, AVDTP,AVCTP,在不同的传输协议之上才定义了不同的Profile,层次结构比较复杂,开发人员学习成本高。

低功耗蓝牙就比较简单,只定义了一个属性协议(Attribute Protocol ATT),基于属性协议定义了一个通用属性场景规范(Generic Attribute Profile GATT)和其他的针对特定业务的场景规范(Profile),开发起来比较简单,整体框架也比较容易实现私有场景的开发。

PS.3、应用和功耗

应用区别:

BLE低功耗蓝牙一般多用在蓝牙数据模块,拥有极低的运行和待机功耗,使用一粒纽扣电池可连续工作数年之久;

BT经典蓝牙模块多用在蓝牙音频模块 ,音频需要大码流的数据传输更适合使用。

在功耗上:

传统蓝牙有3个级别的功耗,class1、class2、class3分别支持100m、10m、1m的传输距离;

低功耗蓝牙没有功耗级别,一般发送功率在7dbm。低功耗BLE5.0模块可支持蓝牙Mesh技术。

3.3蓝牙Mesh(待更新)

待更新

参考资料

三张图带你入门蓝牙规范

Bluetooth 蓝牙介绍(一) :基础知识

蓝牙

深入浅出讲解低功耗蓝牙(BLE)协议栈

相关推荐
棒棒糖的糖不含糖15 分钟前
idea生成类信息及快捷开发配置
ide
JANGHIGH2 小时前
VSCode值得推荐的插件(持续更新中)
ide·vscode·编辑器
cliffordl6 小时前
vscode 环境搭建
ide·vscode·编辑器
JANGHIGH6 小时前
VSCode引用Eigen库无法识别问题解决
ide·vscode·编辑器
我就是全世界7 小时前
开源集成开发环境搭建之VSCode启动Jupyter Notebook
ide·vscode·jupyter
程序猿进阶1 天前
如何在 Visual Studio Code 中反编译具有正确行号的 Java 类?
java·ide·vscode·算法·面试·职场和发展·架构
猿饵块1 天前
vscode
ide·vscode·编辑器
大数据界Olu1 天前
bug | pycharm社区版无sciview解决办法
ide·python·pycharm
千寻简1 天前
Cursor免费 GPT-4 IDE 工具的保姆级使用教程
java·运维·ide·ai
我是一颗小小的螺丝钉1 天前
idea插件推荐之Cool Request
java·ide·intellij-idea