在上一篇文章中,我们学习了如何添加服务和特征,并给这个特征设置了write和notify的属性。

Nordic BLE SOC 软件入门-nRF52添加服务和特征

在上一篇的基础上,本文将介绍添加1个特性,并设置为read属性的操作。


添加UUID

1.如上片文章一样,在sdk_config.h中添加非SIG的UUID个数。有一点区别的是,本次又多了一个特征(超过SDK默认的预设),需要增加ATTR_TAB_SIZE,如图增加至1428。

 

2.在ble_nus_modify.c中添加实际的UUID宏定义,用户可以根据喜好或者项目要求修改,偷懒的可以随便改改,如下图所示。

新增特征的UUID base为(LSB){0x77, 0x77, 0x77, 0x77, 0x77, 0xE5, 0xA9, 0xE0, 0x93, 0xF3, 0xA3, 0xB5, 0x00, 0x00, 0x40, 0x6E}

新增特征的16bit UUID为 0xABCD

 

完成之后,编译下载到DK板上(别忘了下载协议栈),此时代码是不能正常跑的,打开RTT 查看log,根据log修改应用层的RAM start和size。


添加服务及相关代码

1.按照下图,添加服务和特征的handle、UUID type、等数据结构。

 

2.在ble_nus_init 中添加新的服务和特征。

因为是新添加服务,新添加的特征又在这个服务中,所以添加新的服务和特征需要在原本函数末尾添加,不要插在原函数内容中间。

本文添加的这个特征,用于读(read),“读” 指的是手机读nRF52 (client 读 server)。

添加代码如下:

 

3. 新增char的value设置函数。

新增char使用read属性,用户需要给他设置值,这样手机读取的时候才能读到内容。设置使用的函数是sd_ble_gatts_value_set。

下图为设置的函数:

至此,本文添加一个读属性特征的方法就介绍完了!


添加应用层代码

添加完服务文件中的相关代码后,还需要添加应用文件中的代码来使用和测试上述添加的效果。

添加应用层测试代码。

本文在代码中添加一个测试的app timer,让该特征的值,每秒变化(用户根据实际应用场景来设置特征的值,本文方式仅是测试功能)。注意,这个值的变化不会自动更新到手机,需要手机主动读取!能够主动给手机发送数据的方式是notify和indicate!


测试

编译烧录代码,使用nrf connect 连接设备,并查看蓝牙的服务。

可以看到服务的数量,特征的数量,它们的UUID,特征的性能都与前面代码设置的一样!

在需要的时候,使用该特征旁的按钮,读取其内容。


完。

发表评论