我试图寻找完整的示例来帮助我开发应用程序,但在网络上我只找到了一些不相互关联的代码片段。是否可能看到一个完整的连接示例,包括两个设备之间的通信部分?此外,我遇到了一个nRF Connect应用程序的问题:蓝牙在大约30秒后会自动与设备断开连接,为什么?
我试图寻找完整的示例来帮助我开发应用程序,但在网络上我只找到了一些不相互关联的代码片段。是否可能看到一个完整的连接示例,包括两个设备之间的通信部分?此外,我遇到了一个nRF Connect应用程序的问题:蓝牙在大约30秒后会自动与设备断开连接,为什么?
BLE完整示例GitHub链接- 包括Android,iOS和ESP32平台的2个应用程序(每个平台一个Central和一个Peripheral)。每个Central与每个Peripheral兼容。
PunchThrough的《Android蓝牙低功耗终极指南》是一份很好的指南。
关于你的第二个问题(自动断开连接),我记得我在iOS上也发现了类似的断开连接,但没有找到原因。我还注意到,在订阅特征通知/指示后,它不再断开连接,这就是我猜想它可能是操作系统针对非活动连接的优化。
关于断开连接原因的想法:一些外设可能对连接参数要求严格,当手机请求修改这些参数的次数过多时,会主动断开连接。
在我的情况下,使用iPhone和Nordic nRF51822(来自SDK 12.3.0的示例项目,修改了设置以获得低延迟)。Nordic(外设)在iPhone请求更改连接参数第四次后约30秒后就会自动断开连接,并且这是该项目的一个特性,是这样实现的:
static void conn_params_init(void)
{
ble_conn_params_init_t cp_init;
...
// allow to update 3 times max, disconnect on the 4th
cp_init.max_conn_params_update_count = 3;
...
}
// after about 30 seconds it was receiving this call
static void on_conn_params_evt(ble_conn_params_evt_t * p_evt)
{
...
if (p_evt->evt_type == BLE_CONN_PARAMS_EVT_FAILED)
{
// and disconneting right here
sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_CONN_INTERVAL_UNACCEPTABLE);
}
}