510
个编辑
更改
→工程说明
====== 工程说明 ======
通用连接的从机工程,是在通用广播的从机工程的基础上修改的。
由于从机设备是一直保持广播,等待被连接的,所以相对于主机程序,我们就不用去找发起连接的函数以及对方设备的MAC了。因此我们只需要关注BLE协议的回调函数的事件返回。
====== ble_evt_handler()函数 ======
从机的连接与断开的状态和主机是一样的,能够获得的对方设备的信息也是一样的。
连接成功的状态BLE_GAP_EVT_CONNECTED,我们可以在这边获取到连接的设备的MAC、连接参数等等。
断开连接的状态BLE_GAP_EVT_DISCONNECTED,我们可以获取到断开的连接的原因等等。<syntaxhighlight lang="c" line="1" start="148">
//******************************************************************
// fn : ble_evt_handler
//
// brief : BLE事件回调
// details : 包含以下几种事件类型:COMMON、GAP、GATT Client、GATT Server、L2CAP
//
// param : ble_evt_t 事件类型
// p_context 未使用
//
// return : none
static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
{
ble_gap_evt_t const * p_gap_evt = &p_ble_evt->evt.gap_evt;
ble_gap_evt_connected_t const * p_connected_evt = &p_gap_evt->params.connected;
switch (p_ble_evt->header.evt_id)
{
// 连接
case BLE_GAP_EVT_CONNECTED:
NRF_LOG_INFO("Connected. conn_DevAddr: %s\nConnected. conn_handle: 0x%04x\nConnected. conn_Param: %d,%d,%d,%d",
Util_convertBdAddr2Str((uint8_t*)p_connected_evt->peer_addr.addr),
p_gap_evt->conn_handle,
p_connected_evt->conn_params.min_conn_interval,
p_connected_evt->conn_params.max_conn_interval,
p_connected_evt->conn_params.slave_latency,
p_connected_evt->conn_params.conn_sup_timeout
);
break;
// 断开连接
case BLE_GAP_EVT_DISCONNECTED:
NRF_LOG_INFO("Disconnected. conn_handle: 0x%x, reason: 0x%04x",
p_gap_evt->conn_handle,
p_gap_evt->params.disconnected.reason);
break;
default:
// No implementation needed.
break;
}
}
</syntaxhighlight>
==== 实验总结 ====
经过主从机通用连接的实验,我们需要弄懂的问题点如下:
主机部分:
1.主机部分一定要先发起扫描,当扫描到设备之后,再去发起连接。(不扫描直接发起连接,如果周围没有这个从设备,会进入异常,并只能RST恢复)
2.主机发起连接的时候,是利用从机的MAC地址进行连接
3.连接以及断开连接的状态返回,可以获取对方设备信息以及断开原因
从机部分:
1.从机是一直广播等待被动连接的设备
2.连接以及断开连接的状态返回,可以获取对方设备信息以及断开原因
=== 过滤连接实验 ===
==== 实验简介 ====
过滤连接实验1.6_ble_central_conn_filter与2.6_ble_peripheral_conn_filter。
过滤连接实验是从过滤扫描的实验集成下来的,它的目的是和过滤扫描实验一样的,也是为了快速的从一堆BLE设备中,找到我们的设备,并与之快速建立连接。
==== 实验现象 ====
主机上电后先打印实验名称1.6_ble_central_conn_filter,然后发起扫描,如果扫描到符合过滤的从机设备,则会打印扫描到的设备信息,然后发起连接,连接成功后会打印连接的一些信息。
[[文件:Nrf rtt 16.png|边框|居中|无框|656x656像素]]
从机上电后先打印实验名称2.6_ble_peripheral_conn_filter,如果被主机扫描连接之后,则会打印连接的信息。
[[文件:Nrf rtt 26.png|边框|居中|无框|656x656像素]]
==== 工程及源码讲解 ====
===== 主机部分 =====
====== 工程说明 ======
过
===== 从机部分 =====
从机部分就不给大家介绍了,和前面的过滤广播的例程是重复的,仅修改了打印连接的对方设备的信息的部分。
==== 实验总结 ====