1、01蓝牙技术02蓝牙模块03BLE协议栈目录目录CONTENTS历史1998年5月,爱立信,诺基亚,东芝,IBM和英特尔五家著名厂商,在联合开展短程无线通信技术的标准化活动时提出了蓝牙技术,其宗旨是提供一种短距离,低成本的无线传输应用技术。蓝牙技术最初由公司创制,时间是1994年。随着时代发展,经过历次技术更新,现在已经发展到蓝牙5.0规范。蓝牙无线技术已经是使用范围最广泛的全球短距离无线标准之一。蓝牙4.0技术规格最大传输速度可达24Mbit/s有效距离可达100米自适应跳频技术,最大程度减少与其他2.4G ISM频段无线技术的干扰最短可在3毫秒内完成连接设置并开始传输数据。所有数据包都使用
2、24-bitCRC校验,确保最大程度抵御干扰。使用AES-128 CCM加密算法蓝牙4.0规范蓝牙4.0涵盖了传统蓝牙,高速蓝牙和低功耗蓝牙三种技术蓝牙4.0规范的核心是低功耗技术,即蓝牙4.0 BLE蓝牙4.0技术同时具有低成本,向下兼容,通用性(开放的接口标准)等特点高可靠性,低成本,低功耗,高安全性,快速启动,瞬间连接。总结:其他几种常见的短距离无线通信技术射频识别(RFID)ZigBee超宽带(UWB)MeshWIFINFC新大陆NewLab实验箱中蓝牙模块进行蓝牙4.0 BLE开发,首先要有硬件支持,蓝牙通信实验板上选用的是TI公司的CC2541芯片,它集成了2.4GHz射频收发器,
3、是一款完全兼容8051内核的无线射频单片机,它与蓝牙低功耗协议栈共同构成高性价比,低功耗的片上系统解决方案。外设DMA定时器电池监视器和温度传感器高级加密标准(AES)协处理器8通道可配置分辨率的12位模数转换器23个通用I/O引脚IIC,UART开发工具CC2541评估模块工具包(CC2541EMK)CC2541小型开发工具包(CC2541DK-MINI)SmartRF软件IAR嵌入式Workbench什么是协议栈?协议栈是协议具体的实现形式,通俗地理解位用代码实现地函数库,以便开发人员调用。协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发。蓝牙4.0 BLE协议
4、栈就是将各个层定义地协议都集中在一起,以函数的形式实现,并提供一些应用层API,供用户调用。注意注意:虽然协议是统一的,但是协议的实现是变化的,即不同厂家提供的协议栈是有区别的。如何使用协议栈?蓝牙4.0 BLE协议栈已经实现了蓝牙4.0 BLE协议,用户只需要使用协议栈提供API进行应用程序的开发,不必过多的关注BLE协议的具体实现细节,只需要关注应用程序数据从哪里来到哪里去。至于调用了协议栈中的函数后,如何驱动硬件进行工作,我们并不关心。本实验使用的是TI公司的CC2541芯片,TI公司提供了协议栈,可以直接去TI公司官方网站下载。接下来以“BLE-CC254x-1.3.2”版本的协议栈为
5、例,介绍协议栈的使用方法。在解压路径下,找到解压后名为“BLE-CC254x-1.3”的文件夹。解压下载后名为“BLE-CC254x-1.3.rar”的压缩文件。如何使用协议栈?进入该文件夹后,有一个名为“BLE-CC254x-1.3.2”的可执行文件,如下图所示:如何使用协议栈?鼠标选中该图标,双击鼠标左键,进行安装。点击同意安装协议,选择安装路径,点击“NEXT”按钮,之后点击按钮进行安装。安装完成后,根据安装路径找到相应文件夹,默认安装路径是“C:Texas InstrumentsBLE-CC254x-1.3.2ProjectsbleSimpleBLEPeripheralCC2541DB
6、”如何使用协议栈?在该文件夹下,找到“SimpleBLEPeripheral.eww”,如下图所示鼠标左键选中,快速双击打开即可开启工程,工程布局如右图所示。01任务要求02知识链接03任务实施目录目录CONTENTS1任务要求任务要求任务要求搭建蓝牙通信模块与PC机串口通信系统,要求蓝牙信模块上电时,向串口发送 Hello NEWLab!”,并在PC机的串口调试软件上显示。另外,在串口调试软件上发送信息给蓝模块时,蓝牙通信模块收到信息后,立刻原样返回串口接收到的数据给串口调试软件,并显示出来。2知识链接知识链接知识链接蓝牙4.0BLE协议栈具有很多版本,不同厂家提供的蓝牙4.0BLE协议栈有
7、一些不同,本书选用TI公司推出的BLE-CC254x-.4.1.43908b版本,双击BlE-CC254x-1.4.1.43908BLE-cc254x-1.3.2.exe文件,即可以进行安装,默认安装在C盘。BLE协议栈3任务实施任务实施01搭建蓝牙串口通信系统搭建蓝牙串口通信系统打开打开SimpleBLEPeripheralSimpleBLEPeripheral工程工程0203串口初始化串口初始化串口发送数据串口发送数据0405串口接收数据串口接收数据06实施步骤串口显示串口显示SimpleBLEPeripheralSimpleBLEPeripheral工程初始化信息工程初始化信息搭建蓝牙串
8、口通信系统搭建蓝牙串口通信系统01首先把蓝牙通信模块固定在NEWLab平台上,再通过串口线把平台与PC机连接起来,并将NEWLab平台上的通讯方式旋钮转到“通讯模式”,最后给CC2541上电,将拨码开关JP2拨到J9位置。打开打开SimpleBLEPeripheralSimpleBLEPeripheral工程工程02打开“bleSimpleBLEPeripheralCC2541DB 目录下的SimpleBLEPeripheral.ew工程,在 Workspace栏内选择CC2541串口初始化串口初始化03打开工程中NPI文件夹下的npi.c文件,串口初始化函数void NPI_InitTran
9、sport(npiCBack_t npiCBack)串口号、波特率、流控、校验位等进行配置。串口发送数据串口发送数据04打开 simpleBLEPeripheral.c文件中的初始化函SimpleBLEPeripheral_Ini t(uint8 task_id),在此函数中添加NPI_InitTransport(NUll),在后面再加上一条上电提示 Hello NEWLab!的语句,添加头文件语句:#includenpi.h串口接收数据串口接收数据05在simpleBLEPeripheral1.c文件声明串口回调函数NpiSerialCallback,并在 SimpleBLEPeripher
10、al_init函数中传入串口回调函数,将NPI_InitTransport(NULL)修改为:NPI_InitTransport(NpiSerialCallback)串口显示串口显示SimpleBLEPeripheralSimpleBLEPeripheral工程初始化信息工程初始化信息06打开工程目录中HALTargetCC2540EBDrivershal_lcd.c文件,在HalLcdWriteString函数中添加代码串口显示串口显示SimpleBLEPeripheralSimpleBLEPeripheral工程初始化信息工程初始化信息06在预编译中添加LCD_TO_UART,HAL_LC
11、D=TRUE并且在hal_lcd.c文件中添加#include“npi.h”,编译无误后,下载程序,模块上电后,打开串口调试助手,可以看到图中所示结果,这样就可以把LCD上显示的内容传送到PC机端显示,极大地方便调试。提纲提纲提纲提纲原理及流程图原理及流程图原理及流程图原理及流程图开始开始初始化初始化发送广播发送广播发送广播发送广播建立连接并作为从机建立连接并作为从机开始开始初始化初始化按键搜索按键搜索发现设备发现设备建立连接并作为主机建立连接并作为主机SimpleBLEPeripheral工程(节点设备)SimpleBLECentral工程(集中器设备)搜索回应搜索请求发起连接请求响应连接请
12、求提纲提纲从机连接过程从机连接过程从机连接过程从机连接过程从机连接过程从机连接过程提纲提纲主机连接过程主机连接过程主机连接过程主机连接过程主机连接过程主机连接过程主机连接过程主机连接过程主机连接过程主机连接过程按键按键功能功能UP1.开始扫描或停止设备发现;2.连接后可读写特征值LEFT显示扫描到的节点设备,在LCD中滚动显示RIGHT连接更新CENTER建立或断开当前连接DOWN启动或关闭周期发送RSSI信号值提纲提纲任务实施任务实施任务实施任务实施任务实施任务实施任务实施任务实施任务实施任务实施任务实施任务实施任务实施任务实施任务实施任务实施提纲提纲总结总结01蓝牙技术与BLE协议栈02任
13、务及实验准备03关键知识点目录目录CONTENTS04任务实现05运行测试06特别关注一、蓝牙技术与一、蓝牙技术与BLEBLE协议栈协议栈 蓝牙无线技术是主要应用于短距离无线通信领域,牙无线技术是全球使用范围最广的短距离无线标准之一。其最高数据传输速率1Mbps、最大传输距离为10厘米10米。BLE(Bluetooth Low Energy,低功耗蓝牙)是蓝牙 4.0 的核心规范,其凭借超低的运行功耗、待机功耗等技术,使得其在以手机为智能终端的物联网应用中具有强有力的发展前景。CC2541 是一款针对 低能耗及私有 2.4-GHz 应用的功率优化的片载系统(SoC)解决方案,是蓝牙通信模块使用
14、的芯片,芯片内部集成增强型8051内核。BLE协议栈是在蓝牙 4.0 的基础上推出的低功耗蓝牙通信标准,其包括一个小型操作系统(抽象层OSAL),负责系统的调度,收发双方需要共同按照这一标准进行正常数据的收发,其大部分代码被封装成库,用户通过API调用完成系统开发。一、蓝牙技术与一、蓝牙技术与BLEBLE协议栈协议栈 在NewLab实验平台上固定两块蓝牙通信模块、一块继电器模块,安放一个灯泡模块,按图示把模块连起来,在PC机上,通过BTool工具发送命令,使主、从机建立连接,控制灯泡亮和灭。二、任务及实验准备二、任务及实验准备 1.BLE协议栈的安装,双击工具包中的“BLE-CC254x-1.
15、3.2.exe”。2.开发工具的安装,解压工具包中的“IAR Embedded Workbench.rar”,双击”autorun.exe”双击安装开发工具。3.烧写工具的安装,双击”Setup_SmartRFProgr_1.12.7.exe”双击安装烧写工具。二、任务及实验准备二、任务及实验准备 1.profile规范是一种标准通信协议,定义了设备如何实现一种连接。2.GATT服务:用于应用程序在两个连接设备之间的数据通信,设备连接后,主机将作为GATT Client,是从GATT服务器读/写数据的设备,从机将作为GATT Server,是包含主机需要读/写的设备。3.特征值:主从机通信通过
16、特征值来实现,通过特征值可以获取或写入先要的内容。4.统一识别码(UUID):GATT服务和特征值都有UUID。5.句柄(handle):GATT服务将整个服务加载到属性表中,并为每个属性分配唯一的句柄。三、关键知识点三、关键知识点5.主从机建立连接流程:(1)从机启动发送广播。(2)主机启动搜索广播节点。(3)从机回应搜索请求。(4)主机发现设备,发起连接请求。(5)从机响应连接请求。(6)主从机连接完成。三、关键知识点三、关键知识点 7.数据传输流程:(1)主机发送主服务UUID,从机收到主服务UUID并回应服务信息。(2)主机发送主服务UUID,从机收到特征UUID并回应特征值句柄。(3
17、)主机发送特征句柄,从机查找特征值并回应给主机。(4)主机通过句柄,对特征值进行读/写操作。三、关键知识点三、关键知识点 1.1.主机代码主机代码:(1)打开“HostTestRelease.eww”工程,workspace选择“CC2541EM”。(2)在“_hal_uart_dma.c”文件中找到“HalUARTOpenDMA()”函数,新增“config-flowControl=0;”代码,关闭流控。(3)将主机拨码开关JP2拨到J9位置,编译下载程序到蓝牙模块中,按“复位”重新运行。四、任务实现四、任务实现 1.1.从机代码(以任务从机代码(以任务2 2为基础)为基础):(1)打开“S
18、impleBLEPeripheral.eww”工程,workspace选择“CC2541”。(2)在“hal_board_cfg.h”文件修改LED1的定义,通过从机模块P1.2端口控制继电器的动作。四、任务实现四、任务实现(3)在“simpleBLEPeripheral.c”文件的“simpleProfileChangeCB()”函数中添加红框所示代码控制P1.2端口电平的高低,以此控制灯的亮灭四、任务实现四、任务实现(4)在“simpleBLEPeripheral.c”文件的“peripheralStateNotificationCB()”函数中添加红框所示代码,设置P1.2端口在从机处于
19、广播和已连接状态时为低电平。四、任务实现四、任务实现(5)将从机拨码开关JP2拨到J9位置,编译下载程序到蓝牙模块中,下载完毕,将拨码开关JP2拨到J2位置,按“复位”重新运行。四、任务实现四、任务实现(1)NewLab平台通过USB转串口线连接PC机,运行“BTool”工具,设置串口参数,通过搜索找到从机,选中从机,建立与从机的连接。五、运行测试五、运行测试(1)利用“BTool”工具对CHAR1特征值写入“1”,点亮灯泡。五、运行测试五、运行测试(1)利用“BTool”工具对CHAR1特征值写入“0”,熄灭灯泡。五、运行测试五、运行测试(1)两根线的串口通信连接务必关闭流控,否则无法收发数
20、据。(2)修改预编译选项,添加:HAL_UART=TRUE、LCD_TO_UART、HAL_LCD=TRUE预编译选项,删除或禁用POWER_SAVING预编译选项。(3)从机烧写完毕,拨码开关拨到J2位置,只有主机芯片与NewLab平台串口相连。(4)硬件连接,不能带电操作。六、特别关注六、特别关注01任务引入02相关知识点03任务实施目录目录CONTENTS任务引入任务引入 同学们,你们有没有过直接用串口线连接两台电脑,然后通过串口调试助手进行聊天的经历?PC机PC机任务引入任务引入 那么如果我们想通过串口调试助手实现两台电脑之间信息的发送,并且希望是通过无线而不是直接用串口线将两台电脑相
21、连的方式,我们可以选择前面所学的蓝牙方式来实现。原理框图如下图所示PC机蓝牙模块蓝牙模块PC机任务引入任务引入 任务要求:采用两个蓝牙通信模块,分别与PC机串口相连,一个模块作为从机(SimpleBLEPeripheral工程),另一个模块作为主机(SimpleBLECentral工程),是主从机建立连接,并进行无线串口数据透传,同时可以通过串口调试软观察到主机和从机的发送与接收信息1、在Profiles中添加特征值(P237)2、特征值的定义(P238-239)注:P239代码纠错3、特征值的相关函数与初始化(P239-P244)注:P239代码纠错任务实施任务实施1.系统构成系统构成本案例
22、要求搭建一个基于BLE协议栈的串口透传系统,所需设备:PC机两台蓝牙模块两个串口线两条NEWLab两台任务实施任务实施2.实现主从机上电自动连接实现主从机上电自动连接(1)添加扫描节点设备的代码(P245-P246)(2)添加连接设备代码(P246-P247)(3)给主从设备上电,实现自动连接:编辑程序并下载到主机中,在workspace栏内选择“CC2541EM”从机采用任务5.2和任务5.3的SimpleBLEPeripheral.eww,只要在LCD上显示的内容能在串口显示就可以先给从机上电,再给主机上电,主从机串口打印输出信息任务实施任务实施任务实施任务实施3.实现主机向从机单方向传输
23、实现主机向从机单方向传输(1)主机采用UUID方式读取CHAR6句柄(P248-P249)(2)修改主机的串口回调函数代码(P249-P250)(3)修改从机的特征值改变回调函数(P250)(4)编译、下载主从机程序,并依次复位从机、主机(P251)任务实施任务实施3.添加从机向主机发送数据代码,实现主从机串口透传添加从机向主机发送数据代码,实现主从机串口透传(1)主机打开CHAR7的通知功能(P252-P253);(2)主机响应CHAR7的通知,并得到从机发送的数据,上传给PC机(P253);(3)打开SimpleBLEPeripheral工程SimpleBLEPeripheral.c文件,
24、从机接收串口数据,并更新CHAR7特征值数据;(P253-P254)(4)打开SimpleBLEPeripheral工程simpleGATTprofile.c文件1任务要求2必备知识3任务实施目录目录CONTENTS1任务要求任务要求 采用Android智能手机作为主机,蓝牙模块作为从机,使主从机建立连接,并能把蓝牙模块上连接的心率传感器的数值发送到手机上显示。2知识必备知识必备01心率传感器模块02I2C总线01MAX30102芯片01MAX30102芯片是一个集成脉搏血氧仪和心率监测仪生物传感器的模块,由发光LED及驱动电路、光感应电路、AD转换电路、环境光干扰消除及数字滤波电路组成。应用
25、于可穿戴设备进行心率和血氧采集检测。通信接口:I2C。02物理拓扑特征协议操作物理拓扑串行数据线串行时钟线半双工通信02物理拓扑02物理拓扑特征协议操作主从设备任意、地址唯一可挂设备数量(总线最大电容、地址位)传输速率(可编程时钟,上拉电阻)数据传输单位:字节02 特 征 02物理拓扑特征协议操作02 协 议 总线空闲时总线忙,其他设备不能访问总线总线空闲时起始结束条件02 协 议 数据传输过程02 协 议 主设备向指定设备发送数据的格式从设备地址0:主向从写;1:主向从读。有效数据02物理拓扑特征协议操作02 操 作 主设备往从设备中写02 操 作 主设备从从设备中读02 操 作 复合格式3任务实施任务实施心率传感器的值蓝牙模块Android手机I2C主从主从连接连接安装相应显示程序的apk下载Hex文件传感器安装3任务实施任务实施蓝牙模块 给蓝牙通信模块上电,此时连接/通讯灯不亮,说明蓝牙通信模块还未广播蓝牙信号。按下功能键持续1.5秒以上,连接/通讯灯快速闪烁,说明蓝牙通信模块正在广播蓝牙信号。连接/通讯灯功能键