一、前言
本篇会编写代码,通过指定的UUID获取到指定特征值的句柄。备注:本篇会使用芯科蓝牙芯片作为广播设备,泰凌芯片作为扫描设备。
二、阅读说明
1、泰凌微芯片开发学习者。
2、蓝牙 spec学习者。
三、正文
1、使用的demo
泰凌芯片:ble_master_kma_dongle
芯科芯片:Bluetooth - SoC Blinky
2、使能ble_master_kma_dongle例程中的服务发现
该文件位于:tc_ble_single_sdkvendorble_master_kma_dongleapp_config.h
3、确定Bluetooth - SoC Blinky例程中LED Ctronl的UUID
打开simplicity studio 6,然后加载例程,再打开Bluetooth GATT Configurator,找到LED Control的UUID,如上图右边的箭头所示,该UUID为:
5b026510-4088-c297-46d8-be6c736a087a
知道这个UUID后,我们就可以通过编写代码来查找该UUID的句柄值,为什么要知道句柄值呢,这是因为我们发送信息的时候需要用到。
4、编写代码实现连接通信
4.1、首先用nrf connect手机软件确认一下,广播包中的数据
如上图所示,我们只需要扫描到该广播包的第二个广播结构,然后连接就好了,第二个广播结构就是广播名称Blinky_Test
4.2、修改泰凌的代码,抓取该广播名,然后实现连接
4.2.1、定义广播数组
const u8 adv_data [] = {0x0F,0x09,0x42,0x6C,0x69,0x6E,0x6B,0x79,0x20,0x54,0x65,0x73,0x74,0x00,0x00,0x00};
如上图所示,定义广播数据数组。
4.2.2、在广播数据回调中比对该数组
if(pa->event_type == 0x00){ret = memcmp(&pa->data[3],adv_data,sizeof(adv_data));}
如上图所示在blm_le_adv_report_event_handle函数中增加比对代码,如果符合ret为0,不符合就为1。
4.2.3、发起连接
该代码同样在blm_le_adv_report_event_handle函数中,当连接成功之后,会打印出“ble connect“。
5、得到指定UUID的句柄值
5.1、定义UUID数组
const u8 my_slave_uuid[16] ={0x7a, 0x08, 0x6a, 0x73,0x6c, 0xbe,0xd8, 0x46,0x97, 0xc2,0x88, 0x40, 0x10, 0x65, 0x02, 0x5b};
如上图所示,定义UUID的数组。
5.2、查找UUID,打印句柄值
slave_handler = blm_att_findHandleOfUuid128 (db128, my_slave_uuid); //OTAprintf("slave_handler = %dn",slave_handler);
如上图所示,查找UUID,得到句柄值,并将句柄打印出来
6、串口打印结果
从上述串口打印可以看到,该UUID所对应的句柄为27.
四、结尾
本篇讲解了如何通过UUID来得到句柄值,下一篇将通过该句柄发送信息给到芯科芯片。
204