• 正文
  • 相关推荐
申请入驻 产业图谱

BLE主机实战:如何获取从机设备指定的句柄值

08/25 08:23
204
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一、前言

本篇会编写代码,通过指定的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来得到句柄值,下一篇将通过该句柄发送信息给到芯科芯片。

相关推荐

专注BLE实战开发,也分享物联网、嵌入式等相关技术

微信公众号