打印

test

[复制链接]
908|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
285454480|  楼主 | 2017-9-14 14:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 285454480 于 2017-9-15 12:53 编辑

版权聚加科技所有,转载需标明出处

目录
前言        4
第1章 BLE之初体验——快速使用BLE模块        5
1.1 模块硬件IO说明        5
1.2 BLE模块gBM01的串口协议概述        6
1.3 应答指令        6
1.4 蓝牙通信        7
第2章 BLE概述        8
第3章 广播        11
3.1 基础理论        11
3.2 gBM01蓝牙模块的广播控制        11
第4章 扫描        13
4.1 基础理论        13
4.2 gBM01蓝牙模块的扫描控制        14
第5章 连接        15
5.1 基础理论        15
5.2 gBM01蓝牙模块的连接控制        18
第6章 通信        20
6.1 基础理论        20
6.2 gBM01蓝牙模块的通信操作        22
第7章 功耗控制        24

前言
本文档的目的是让没有了解过BLE(低功耗蓝牙)的人,从零开始学习并迅速掌握BLE技术基础。我们还提供配套该文档的视频教程,便于更好地理解理论知识,在视频中我们会结合BLE模块gBM01进行实践操作。如需购买蓝牙模块,可到淘宝店:https://shop222299794.taobao.com/。详情可发邮件咨询,285454480@qq.com
另外还会使用到手机端app:nRF Connect和BLE Tool,电脑端会使用一个串口通信软件。具体见视频教程描述。
该文档中的BLE知识,均是作者从书籍《低功耗蓝牙开发权威指南》中摘取的常用基础知识,如需了解更多更详细的内容,请参考原书。

第1章 BLE之初体验——快速使用BLE模块
如果你没有gBM01蓝牙模块,可跳过该章。
1.1模块硬件IO说明

编号        符号        功能描述
1        VDD        3.3v供电
2        GND        接地
3        UART_RXD        串口的接收口
4        UART_TXD        串口的发送口
5        PWK        模块的输入IO口,用于唤醒模块,高电平唤醒。如用户不需要低功耗功能,可不管该IO口,悬空就行。如果需要低功耗功能,一般情况下该IO口为低电平,只有在用户向模块串口发送数据时,才保持该IO口为高电平,数据发完后,则继续设为低电平。
6        NC        悬空
7        NC        悬空
8        RESET        复位,低电平复位模块
9        NC        悬空
10        NC        悬空
11        NC        悬空
12        GND        接地
13        GND        接地

1.2BLE模块gBM01的串口协议概述
串口配置为:波特率115200,8位数据位,1位停止位,无校验位,无流控。
串口数据协议结构如下:
起始码(0XA5,0X5A)        长度(数据字段的长度)        数据        校验和(数据字段的校验和)
2 bytes        2 bytes(大端结构)        n bytes        1 byte




序号        命令ID        命令数据
1 byte        1 byte        n bytes




协议原则:
1、多字节数值均使用大端结构。
2、在协议上,模块对接收到的指令都会做出应答,应答包的序号等于接收到命令包的序号;而模块           上报的数据,接收方则不需要应答。
3、序号字段可为任何数字,原则上用于区分相同指令,用户可根据自己的实际情况加以使用。
4、整个数据包最大长度为512 bytes,所以长度字段的最大数值是507。
1.3应答指令
序号        命令ID        命令数据
接收指令包的序号        0xE0        应答的指令
1 byte        应答结果
1 byte        应答数据
n byte
                接收到的指令        0:表示成功
1:表示失败
2:表示未知的指令
3:表示校验错误        详见具体指令的应答

例子:
向模块发送获取设备名的指令:A5 5A 00 02 12 20 32,A5 5A为起始码,00 02 为数据字段(12 20)的长度,12为序号,20为获取设备名的命令ID,32为数据字段的校验和(12+20)。
模块的应答如下:
A5 5A 00 07 12 E0 20 00 61 62 63 38,序号为12,等于接收到的指令的序号;指令为E0,表示是应答包;20表示应答的命令为获取设备名命令;00表示应答成功;应答数据61 62 63表示设备名是“abc”;38为校验和(12+E0+20+00+61+62+63)。
如果应答为A5 5A 00 04 12 E0 20 01 13,表示获取设备名的命令执行失败。

1.4蓝牙通信
gBM01蓝牙模块的默认广播名是:gBM01。手机app“BLE Tool”扫描到设备“gBM01”进行连接后即可通信。连接后,gBM01蓝牙模块会通过串口上报连接成功的指示,见下:
序号        命令ID        命令数据
任意        0x62        对端的MAC地址

连接后,通信的蓝牙服务如下:
        UUID        权限
服务        0XFFFA        
特性值(长度20字节)        0XFFFD        读,写
特性值(长度20字节)        0XFFFE        读,通知
模块作为从机时,主机通过写特征值0XFFFD来把数据发送给蓝牙模块,模块再把接收到的数据通过数据传输命令(0xA0)从串口发出去;模块把从串口接收到的数据传输命令(0xA0)的数据,通过特征值0XFFFE的通知权限来发送给主机。在连接后,主机需使能特征值0XFFFE的通知。
当模块与模块之间通信时,其中一个模块作为主机,通信过程同上。模块双方都是使用数据传输命令进行通信。

gBM01蓝牙模块的蓝牙发送接收数据的串口命令如下:
序号        命令ID        命令数据(最多为505 bytes)
任意        0xA0        蓝牙传输的数据 n bytes
应答:
当模块从串口接收到该命令时,模块会给出应答。如果应答结果是成功,则没有应答数据;如果应答结果是失败,则有1字节的应答数据,表示失败的原因,1表示设备没处于连接状态,不能进行数据传输操作,2表示蓝牙发送的数据太多,缓存已满。
         当模块的蓝牙收到数据而通过该命令上报时,接收方无需做出应答。
断开连接后,gBM01蓝牙模块会通过串口上报断开连接的指示,见下:
序号        命令ID        命令数据
任意        0x63        对端的MAC地址
第2章 BLE概述
未来蓝牙将会分为三种:Bluetooth Smart Ready、Bluetooth Smart、以及标准 Bluetooth。Bluetooth Smart Ready设备的射频被称为双模式射频,表示其同时支持传统蓝牙无线连接和新蓝牙低耗能连接。Bluetooth Smart设备的射频被称为单模式射频,表示其仅支持新蓝牙低耗能连接。我们说的BLE(低功耗蓝牙)就是Bluetooth Smart设备。三种蓝牙的兼容情况如下图所示:

Bluetooth Smart设备主要用于收集特定类型的信息, 这类设备具有无限的发展潜力,包括心率监测仪、血糖仪、汽车摇控钥匙、计步器等使用纽扣式电池,以及用于收集特定信息的感应器类电子设备。
BLE在未来五年将有十亿的设备需求量。2.4G蓝牙低功耗系统、消费类电子产品、移动电话外围扩展设备、运动和休闲设备、健康医疗用品(血压计、体温计……)、汽车电子设备、人机接口设备(鼠标、键盘、遥控器……)、USB Dongle……
BLE的体系结构:

BLE设备链路层状态图:

BLE设备的四种角色:
广播者,只发送广播不响应连接。
观察者,只扫描不发起连接。
从机,发起广播,响应连接请求。
主机,发起扫描,发起连接请求。

BLE工作在2.4G频段,分40个信道,各信道用途见下表格:
频率/MHz        信道编号
2402        37(广播信道)
2404~2424        0~10(数据信道)
2426        38(广播信道)
2428~2478        11~36(数据信道)
2480        39(广播信道)

广播信道,就是广播包所处的频率段。数据信道,是用于连接后数据通信用的。
第3章 广播
3.1基础理论
通过广播发送的有2类数据,广播数据和扫描响应数据。广播数据就是普通广播包,扫描响应数据是当设备收到主动扫描请求时,发出去的数据,具体过程见第4章。
通过广播发送的数据最大长度是31字节(实际是37字节,还有6字节的mac地址),如果想要广播超过31字节的数据,可以使用扫描响应机制。
设备每次广播时,会在3个广播信道上发送相同的报文。一次广播即为一个广播事件。相邻2次广播事件的间隔,称为广播间隔。广播间隔可以由程序设定,取值范围是20ms~10.28s,以0.625ms为单位。广播间隔越小,就会越快被发现,但功耗越大。另外,每次的广播间隔是在设定的广播间隔上再加上一个随机广播延时时间(0~10ms),避免数据发生碰撞。凡是在广播信道传输的都是广播报文。
在解析广播包前,我们先定义一种数据格式,称之为D格式,见下:
长度(类型+数据的字节数)        类型        数据
1 byte        1 byte        N bytes
广播数据和扫描响应数据都是由多段D格式的数据组成的,每段D格式数据的含义通过类型字段来区分,常用类型含义见下:
类型        含义
0x02        广播服务的UUID
0x08        简短设备名
0x09        完整设备名
0xff        自定义数据
例如,广播包为(16进制表示):02010606FF32342E34350508616263640302FAFF0000000000000000000000,其中有4段D格式数据。
020106,长度是2;类型是1,表示后面的数据代表着广播的性质(不可发现,一般可发现,有限可发现等);06,表示是一般可发现。
06FF32342E3435,长度是6,;类型是0xFF,表示后面的数据是自定义数据;32342E3435,就是自定义的数据。
050861626364,长度是5;类型是8,表示后面的数据是简短设备名;63636363,就是简短设备名,表示成字符串就是“abcd”,所以显示的广播名就是“abcd”。
0302FAFF,长度是3;类型是2,表示后面的数据是服务的UUID;FAFF,代表服务的UUID是0xFFFA。
3.2gBM01蓝牙模块的广播控制
设置设备名命令
序号        命令ID        命令数据
任意        0x00        设备名,最多为31字节,最少为0字节
设备名的设置,模块会永久**,断电重启后,设备名依然为设置过的值。设备名也是广播名。
例子,设置设备名为“abc”:A5 5A 00 05 45 00 61 62 63 6B
应答:
应答包中不包含应答数据

开始广播命令:
序号        命令ID        命令数据
任意        0x40        n段D格式数据
在命令数据中,可以有0或多段D格式数据,目前该命令最多支持3段D格式数据,类型如下:
类型数值        类型含义        数据
0        设置广播间隔        2字节大端结构的广播间隔,单位是ms
1        设置是否广播服务UUID        1字节,0表示不广播服务UUID,1表示广播服务UUID
2        设置广播的自定义数据        n字节,表示自定义的数据
gBM01模块只对广播数据进行设置,不设置扫描响应数据。广播包最大长度是31字节,其中有3字节用来表示广播性质,就是上面广播包例子中的020106。用户还能自由支配的是28字节。根据上面所说的广播包的数据格式,用户自由决定合适的设备名长度、自定义数据长度及是否广播服务UUID。在开始广播命令中,如果没有任何的D格式数据,则表示使用默认设置,默认是广播间隔为30ms,不广播服务UUID,不广播自定义数据。即使设备已经处于广播状态,用户也可随时使用开始广播命令来改变广播的参数(连接间隔)或内容,从而使得广播内容动态变化,实现另类的通信。假如设备名设为“abc”,开始广播命令例子见下:
A5 5A 00 02 AB 40 EB,开始广播并使用默认配置,那么广播数据将会是,
02010604086162630000000000000000000000000000000000000000000000
A5 5A 00 06 AB 40 03 00 03 E8 D9,开始广播,广播间隔设置为1000ms,其他使用默认配置,那么广播数据将会是,02010604086162630000000000000000000000000000000000000000000000
A5 5A 00 09 AB 40 02 01 01 03 02 31 32 57,开始广播,广播服务UUID,广播自定义数据为31 32,其他使用默认配置,那么广播数据将会是,
02010604086162630302FAFF03FF3132000000000000000000000000000000
A5 5A 00 0E AB 40 02 01 01 04 02 31 32 33 03 00 03 E8 79,开始广播,广播服务UUID,广播自定义数据为31 32 33,广播间隔设置为1000ms,那么广播包数据将会是,
02010604086162630302FAFF04FF3132330000000000000000000000000000
应答:
如果应答结果是成功,则没有应答数据;如果应答结果是失败,则有1字节的应答数据,表示失败的原因,0表示设备正处于扫描或连接状态,不允许进行广播,1表示广播命令中的D格式数据有误。

停止广播命令
序号        命令ID        命令数据
任意        0x41        无
例子,停止广播:A5 5A 00 02 AB 41 EC
应答:
如果应答结果是成功,则没有应答数据;如果应答结果是失败,则有1字节的应答数据,表示失败的原因,1表示设备没处于广播状态,不能进行停止广播操作,2表示命令执行出错。

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

49

帖子

1

粉丝