第二十二节 蓝牙协议栈之从机通讯

第二十二节  蓝牙协议栈之从机通讯
之前都是外围模块的驱动程序,这一节开始,我们进入蓝牙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。其中非标准的有SimpleGATTProfile和SimpleKeysProfile,我们将通过对这两个Profile的介绍及实验来了解Profile的特性和使用。每个 Profile 初始化其响应的服务和内部寄存器。GATT 服务器将整个服务加到属性表中,并为每个属性分配唯一的句柄。 GATTProfile用于存储和处理GATT服务器中的数据。在下面的实验中需要用到的都是我们自己新建的Profile,即非标准的Profile。其中主要要注意Profile、UUID、handle、CharacteristicValues。


SimpleGATTProfile及Btool的使用
SimpleGATTProfile中包含5个特征值,每一个的属性都不同:
    SimpleGATTProfile 特征值属性:


Btool是PC端工具,使用特定的HCI命令与CC2540通信,PC端需要通过串口或 USB 连接 CC2540,CC2540 使用 HostTestRelease 工程,硬件可以使用 USBDongle(对应CC2540USB)或我们提供的USBDongle。
USBDongle连接从机
    使用馒头科技有限公司的USBDongle,烧写HostTestRelease固件,连接电脑后就可以用Btool软件来连接从机设备。
    将从机工程编译下载到开发板,连接串口到PC端,我们通过串口来观察设备的运行,运行后可以看到设备处于广播。


 这是我们插入USBDongle到电脑,可以看到识别到一个串口插入,如图,这就是USBDongle用CDC的方式实现的串口。




打开Btool,按左图配置,可以看到右图的信息,这是说明Btool已经识别到了USBDongle。




Btool的界面可以分为4个区:
1. 设备信息展示
2. 历史记录
3. 设备控制
4. 连接信息


确保周围存在设备可发现,点击Discover/Connect标签的scan按钮,CC2540 就会进行10s的扫描过程,在这期间可通过Cancle按钮停止扫描。


可以看到,我们周边有两个设备,其中一个就是我们的开发板,根据串口输出的信息我们知道我们设备的地址是0X7C669D9F6297,下面我们点击establish来连接我们的开发板。


连接后可以看到两边都同时显示了连接信息。开发板输出连接:


Btool连接的设备信息:


特征值的读写
    接下来我们用Btool对SimpleProfile 进行使用操作。刚刚我们已经列出了SimpleProfile中的各个特征值。


    使用UUID读取特征值,CHAR1具有读写属性,这里对 SimpleProfile 的第一特征值 CHAR1进行读取操作,UUID 为0xfff1。选择 Read/Write 选项页并选择 ReadUsing Characteristic UUID 功能,在Characteristic UUID选项填入f1:ff(高字节在前),点击Read按钮。
    读取特征值成功:


下面对此特征值进行写入操作,写入操作必须使用Handle值进行,而无法使用UUID来操作,那CHAR1的Handle值的什么呢?其实刚刚在我们读取CHAR1的值的时候就已经获取到了它的Handle。如图,CHAR1的Handle为0x0025。
    CHAR1的Handle值:


下面我们通过这个Handle对CHAR1写入十进制的10,如图,我们写入成功了。
    写入成功:


在SimpleBLEPeripheral设备的串口输出中可以看到设备提示CHAR1的值变为了10。


下面来验证我们是否成功的将CHAR1改为了10,按照刚刚读取CHAR1的步骤,重新读取CHAR1的值。
    CHAR1的值改为了10:


蓝牙点灯
    上面我们已经能够成功的改写一个特征值,那我们是不是可以通过发送特定的值来控制一个灯的亮灭呢?答案是肯定的。下面我们来实现这个功能。


    从机工程已经有5个特征值了,我们现在增加一个特征值来控制灯的亮灭。那我们该如何来添加特征值呢?特征值的管理是在profile中实现的。所以我们需要对profile进行修改。


(1)修改simpleGATTProfile.h


    在simpleGATTProfile.h中可以看到现在定义的5个特征值的标示符和UUID,我们添加一个1Byte的特征值来控制灯的亮灭。


因为simpleGATTProfile是共用的文件,为了不影响其它工程,我们使用一个宏来控制新增加的属性。


接下来我们需要修改simpleGATTProfile.c,这个文件需要修改的地方较多,下面我们一步一步来修改。
(2)添加UUID


(3)添加属性


(4)属性表


(5)属性设置操作


6)属性获取操作


(7)属性读操作


(8)属性写操作


Profile的改造完成后,我们将这个宏打开,配置工程。


接着我们在staticvoid simpleProfileChangeCB( uint8 paramID )函数的switch中加入CHAR6的判断即可。


编译烧录后,按照我们前面说的在Btool中对FFF6的UUID进行读写操作即可实现对LED的控制。
本文章转载自
http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/69222.aspx
请勿用于商业

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值