Nordic BLE SOC 软件入门-nRF52添加服务和特征2-增加read属性
在上一篇文章中,我们学习了如何添加服务和特征,并给这个特征设置了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,特征的性能都与前面代码设置的一样!
在需要的时候,使用该特征旁的按钮,读取其内容。
完。