本系列教程将结合TI推出的CC254x SoC 系列,讲解从环境的搭建到蓝牙4.0协议栈的开发来深入学习蓝牙4.0的开发过程。教程共分为六部分,本文为第五部分:
第五部分知识点:
第二十一节 DHT11温湿度传感器
第二十二节蓝牙协议栈之从机通讯
第二十三节蓝牙协议栈主从一体之主机通讯
第二十四节 OAD空中升级
第二十五节 SBL串口升级
有关TI 的CC254x芯片介绍,可点击下面链接查看:
主流蓝牙BLE控制芯片详解(1):TI CC2540
同系列资料推荐:
由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(1)
由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(2)
由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(3)
由浅入深,蓝牙4.0/BLE协议栈开发攻略大全(4)
有关本文的工具下载,大家可以到以下这个地址:
朱兆祺ForARM
第二十一节 DHT11温湿度传感器
DHT11简介
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相
连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测型号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为给类应用甚至最为苛刻的应用场合的最佳选择。产品为4针单排引脚封装,连接方便。
技术参数
供电电压: 3.3~5.5V DC
输出:单总线数字信号
测量范围:湿度20-90%RH,温度0~50℃
测量精度:湿度+-5%RH,温度+-2℃
分辨率:湿度1%RH,温度1℃
互换性:可完全互换,
长期稳定性: < ±1%RH/年
DHT11 数字湿温度传感器采用单总线数据格式。即,单个数据引脚端口完成输入输出双向传输。其数据包由 5Byte(40Bit)组成。数据分小数部分和整数部分,一次完整的数据传输为40bit,高位先出。DHT11 的数据格式为:8bit 湿度整数数据+8bit 湿度小数数据+8bit 温度整数数据+8bit 温度小数数据+8bit 校验和。其中校验和数据为前四个字节相加。传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。例如,某次从 DHT11 读到的数据如图所示:
协议栈DHT11测试
打开DHT11Example工程,我们在启动事件中对DHT11进行初始化。如果初始化失败则说明没有接传感器。
然后在定时事件中定时的读取温湿度的值。并将结果通过UART显示到PC端。
从其中可以看到当前的温度为29摄氏度,湿度为30%,往传感器器哈一口气可以看到温湿度都上升了。
第二十二节蓝牙协议栈之从机通讯
之前都是外围模块的驱动程序,这一节开始,我们进入蓝牙4.0协议栈的核心部分,从机通讯的程序设计。接下来的章节是蓝牙4.0协议栈最为核心的程序设计部分。
前面的大都是外围器件的实验,这节我们介绍蓝牙通讯中从机的角色,从机的主要工作是对外广播,接受主机的连接,并且接受主机发送过来的数据。这里介绍两个函数:
bStatus_t GAPRole_SetParameter( uint16 param, uint8 len, void *pValue );
这个函数主要是用来配置从机的一些参数,第一个参数表示需要配置哪个参数,例如我们需要时能从机广播,则需要这样调用:
uint8 initial_advertising_enable = TRUE;
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ),
&initial_advertising_enable );
第二个函数是特征值改变时的回调函数,当主机给从机发送数据时,从机就会回调这个函数来告知应用层有数据送达。
static void simpleProfileChangeCB( uint8 paramID );
在低功耗蓝牙中,数据的传输是通过特征值的读写来实现的。
BLE协议栈的GATT层用于应用程序在两个连接设备之间的数据通信的。从GATT层的角度看,当设备连接后,将充当一下两种角色中的一个:
GATT Client ——从GATT服务器读/写数据的设备。
GATT Server ——包含客户端需要读/写的数据的设备。
重要的是要注意,GATTClient和Server 的角色完全独立于BLE的链路层的 slave和master的角色,或GAP层peripheral和central的角色。一个slave 可以是GATT Client 或GATT Server,一个master同样可以是GATT Client或GATT Server。一个GATT Server 可以有多个完成一个特定的功能或特性GATT Server组成。
在SimpleBLEPeripheral应用程序中有三个GATT服务:
Mandatory GAP Service:这个服务包含设备和访问信息,比如设备名称、供应商和产品标识。
Mandatory GATT Service :这个服务包含有关服务UUID相关信息。
SimpleGATTProfile Service——这个服务是一个示例配置文件,供测试和演示。
Profile简介
为了更容易的保持Bluetooth 设备之间的兼容,Bluetooth规范中定义了 Profile。Profile 定义了设备如何实现一种连接或者应用,你可以把 Profile 理解为连接层或者应用层协议。Bluetooth 的一个很重要特性,就是所有的 Bluetooth 产品都无须实现全部的Bluetooth 规范,你可根据所需要的产品实现需要的Profile,不必给开发带来更大的开销。这就是说当需要利用蓝牙提供数据传输功能时就必须建立对应的 Profile,TI的BLE协议栈为我们提供了部分Profile,其中一部分是非标准的Profile。其中非标准的有