安卓BLE示例

3

我试图寻找完整的示例来帮助我开发应用程序,但在网络上我只找到了一些不相互关联的代码片段。是否可能看到一个完整的连接示例,包括两个设备之间的通信部分?此外,我遇到了一个nRF Connect应用程序的问题:蓝牙在大约30秒后会自动与设备断开连接,为什么?


通常,为了节省设备电池,BLE连接在一定时间(处于空闲状态)后会关闭。这可能是30秒断开的原因。此外,为了样例应用程序的目的,您可以检查Nordic的此应用程序 - dispatchMain
@dispatchMain 的问题在于它甚至在通信时也会执行此操作,我已经看过了示例应用程序,但没有更简单的东西可以显示所有步骤吗? - Davide Torchia
ATT已经为每个操作定义了30秒的超时时间。这可能是通信中断的原因。您可以嗅探BLE通信以查看是什么错误导致了断开连接。此外,我找不到比这更简单的好示例。也许您可以尝试nRF Toolbox - dispatchMain
2个回答

4

BLE完整示例GitHub链接- 包括Android,iOS和ESP32平台的2个应用程序(每个平台一个Central和一个Peripheral)。每个Central与每个Peripheral兼容。

PunchThrough的《Android蓝牙低功耗终极指南》是一份很好的指南。

关于你的第二个问题(自动断开连接),我记得我在iOS上也发现了类似的断开连接,但没有找到原因。我还注意到,在订阅特征通知/指示后,它不再断开连接,这就是我猜想它可能是操作系统针对非活动连接的优化。


1

关于断开连接原因的想法:一些外设可能对连接参数要求严格,当手机请求修改这些参数的次数过多时,会主动断开连接。

在我的情况下,使用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);
    }
}

那时候,我通过忽略事件 "BLE_CONN_PARAMS_EVT_FAILED" 并不调用 "sd_ble_gap_disconnect" 来在外设端修复了它,但适当设置这些连接参数会是更好的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接