Waveshare
直播中

casuallystone

12年用户 64经验值
擅长:控制/MCU
私信 关注
[经验]

【NRF51822试用体验】Nordic-BLE-自定义profile 简单介绍


本次更新了sdk,同时也更新了keil~~~路途曲折有点小忧伤,不过现在开发环境更新了后感觉还可以。
keilMDK:5.20   Nordic BLE SDK :nRF51_SDK_8.1.0_b6ed55f
以上呢~网上都有,大家可以自己找,找不到再找我要吧~帖子不让发链接~~
使用例程:..nRF51_SDK_8.1.0_b6ed55fexamplesble_peripheralble_app_proximity2pca10028s110ARM5_no_packs

    假设我们要创建个profile (Server),UUID为0xFFA2,包含一个Characterstic UUID为0xFF01.当然,UUID是我随便取的。
需要注意的有两个初始化接口:ble_stack_init();  跟services_init();
ble_stack_init()中有个softdevice_ble_evt_handler_set(ble_evt_dispatch); 其中所使用的参数见下图:
1.png

可以发现,这个函数中包含了各个profile的事件接收(处理)函数。所以我们需要在这个函数中添加我们自定义的事件接收函数。
ble_customer_on_ble_evt(p_ble_evt);至于为什么其他函数有两个参数~而我只有一个~因为ble传给我们的实际就那一个参数啊~其他的大家可以自己定。

services_init();
顾名思义,创建services(profile)的,
2.png
我们也添加自己的customer_init()用于添加Services。如下图是我添加的内容

3.png

4.png

最主要的是sd_ble_gatts_service_add(…),看名字就知道是增加服务的~so,查下document,可以找到如下功能:

5.png

参数1:类型,文档说:seeBLE_GATTS_SRVC_TYPES~~,因此等于 BLE_UUID_TYPE_BLE
参数2:服务的UUID的指针~,所以我们创建个ble_uuid_t   ble_uuid ,将该ble_uuid初始化~
参数3:注意该参数类型是out的,所以是个指针~,uint16 的数,其实是指向服务的handle(该handle 后面会用到)。

紧接着增加sd_ble_gatts_service_add(…)后,接下来就是增加Characterstic,如customer_char_add(); :
6.png

先是创建了好多不知道啥东西的变量,然后使用sd_ble_gatts_characteristic_add(…) 来增加Characterstic~,
其实上面的参数都是根据该函数的变量来的~因此参看文档即可知道需要添加什么参数,如:
7.png
参数1:services_handle ,是不是很熟悉,就是上面create services 时输出的services_handle。填入~
参数2:Charactersticmetadata ~不是很明白的话看看源码~goto过去看看,如下图:
8.png
后面的注释~~恩恩,就不怎么解释了。具体的赋值方式~后续再给出(此部分应该说是BLE4.0标准的东西了)。
参数3:Characterstic 的值~
参数4:out类型,这个就是Characterstic 的handle了~(注意,该值需要保存滴~后续读写之类的会用到)。
这样基本完成~~
接下来验证: 往ble_customer_on_ble_evt(..)中写点东西咯,当蓝牙层有事件发生,就会调用相应的函数入口,进入不同的switch!

9.png
注意!:该on_connect(),是我自己定义的~ 内容如下,可以看出,这是往串口输出 on_connect!!!!消息~。
10.png
我使用的是手机端的nRFTool来搜索ble设备的,用的是小米4(烂手机!哈哈)
直接debug,全速执行,即可搜索到device,点击连接,建立连接后可看到相应profile 串口也会打印消息。
如图:
11.png

12.png


调试过程遇到的几个问题:  
1、debug的时候,全速执行,手动去点暂停~,再全速执行,再暂停,很容易进入HardFault_Handler ,(其实呢,官方的demo也会这样的,所以,一定是我们调试方法不对,最好还是用串口输出吧)。
2、烧写softdevice的时候遇到点麻烦~下载的sdk如下图,softdevice 藏在框框中~如:..DesktopnRF51_SDK_8.1.0_b6ed55fcomponentssoftdevices110hex   ,找到hex了,使用nRF Studio进行烧写,
但是呢,遇到个问题如下图,这个其实是softDevice size 没有填(图中为0),那么填多少合适??? 文档中有写。文档路径:..nRF51_SDK_8.1.0_b6ed55fcomponentssoftdevices110docs110_nrf51822_8.0.0_migration_document.pdf

13.png
记得一定要多看文档!

回帖(1)

stevenysl

2016-10-6 16:15:49
本人公司需求BLE接收器,可同時接收8個不同GATT設備的資料,經過2/3G 到server,想用nrf51822,不知可否,有否一些建議?
举报

更多回帖

发帖
×
20
完善资料,
赚取积分