打开主菜单

谷雨文档中心 β

更改

NRF52832DK协议栈实验

添加1,870字节2020年1月7日 (二) 17:35
实验现象
其中我们的从机设备一般是作为GATT服务器去提供服务的,主机设备作为GATT客户端去向服务的特性数据库中写入或者读取数据。
 
我知道大家看到这里之后,一定是云里雾里
====实验现象====
主机设备流程:
2、成功连接我们的从机设备,并且更新连接参数和MTU
3、发现3、发现服务,成功发现Ghostyu LED Service 4、主机分别按下4个按键,控制从机设备的4个LED依次点亮[[文件:Nrf52832dk-ble-gattwirte2.png|边框|居中|无框|680x680像素]]从机设备流程: 1、开启广播 2、被主机成功连接,并交互连接参数 3、等待主机获取服务(一般主机成功获取服务的时间在0.5s~1s之间,这个时间仅供大家参考) 4、主机按下按键,从机接收到相应的LED状态数据并打印,并根据这个数据控制板子上的LED点亮[[文件:Nrf52832dk-ble-gattwirte1.png|边框|居中|无框|684x684像素]]
====工程及源码讲解====
===== 主机部分 =====
 
====== gy_profile_led_c.c\.h ======
我们首先查看一下主机的服务客户端文件,里面包含了好几个函数,我们按个介绍一下这些函数的功能。
 
第一个还是客户端的初始化函数,<syntaxhighlight lang="c" line="1" start="83">
//******************************************************************************
// fn :ble_led_c_init
//
// brief : LED服务客户端初始化函数
//
// param : p_ble_led_c -> 指向LED客户端结构的指针
// p_ble_led_c_init -> 指向LED初始化结构的指针
//
// return : none
uint32_t ble_led_c_init(ble_led_c_t * p_ble_led_c, ble_led_c_init_t * p_ble_led_c_init)
{
uint32_t err_code;
ble_uuid_t led_uuid;
ble_uuid128_t led_base_uuid = {LED_UUID_BASE};
 
VERIFY_PARAM_NOT_NULL(p_ble_led_c);
VERIFY_PARAM_NOT_NULL(p_ble_led_c_init);
VERIFY_PARAM_NOT_NULL(p_ble_led_c_init->evt_handler);
 
p_ble_led_c->peer_led_db.led_handle = BLE_GATT_HANDLE_INVALID;
p_ble_led_c->conn_handle = BLE_CONN_HANDLE_INVALID;
p_ble_led_c->evt_handler = p_ble_led_c_init->evt_handler;
 
err_code = sd_ble_uuid_vs_add(&led_base_uuid, &p_ble_led_c->uuid_type);
if (err_code != NRF_SUCCESS)
{
return err_code;
}
VERIFY_SUCCESS(err_code);
 
led_uuid.type = p_ble_led_c->uuid_type;
led_uuid.uuid = LED_UUID_SERVICE;
 
return ble_db_discovery_evt_register(&led_uuid);
}
</syntaxhighlight>
===== 从机部分 =====
======gy_profile_led.c\.h======
我们首先查看一下他的服务文件,也就是gy_profile_led,我们我们就是通过这个服务来接收手机端发送的LED控制数据的。我们首先查看一下他的服务文件,也就是gy_profile_led,我们我们就是通过这个服务来接收主机发送的LED控制数据的。
可以看到这个服务初始化ble_led_init函数中对于服务以及他的特征值属性的初始化过程,首先我们先初始化一个回调(p_led->led_write_handler = p_led_init->led_write_handler;),这个回调是用来将gy_profile_led这一层的数据,上传给mian文件去处理。
510
个编辑