微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android BLE 示例

如何解决Android BLE 示例

我试图寻找可以帮助我开发应用程序的完整示例,但在网上我发现只有部分代码没有相互链接。是否可以看到一个完整的连接示例,包括两个设备之间的通信部分?我也碰巧遇到了 nRF Connect 应用程序的问题:蓝牙在大约 30 秒后自动与设备断开连接,为什么?

解决方法

BLE 完整示例 link to github - 包含 Android、iOS、ESP32 - 每个平台的 2 个应用程序,中央和外设。每个 Central 都与每个 Peripheral 兼容。

这是一个很棒的指南:The Ultimate Guide to Android Bluetooth Low Energy 由 PunchThrough 提供。

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

,

简单说一下意外断线的原因:一些外设可以对连接参数很严格,当手机要求更改它们的次数太多时就会断线。

就我而言,它是 iPhone 和 Nordic nRF51822(来自 SDK 12.3.0 的示例项目,修改了设置以降低延迟)。 Nordic (Peripheral) 在大约 30 秒后断开连接(iPhone 第 4 次要求更改连接参数),这是该项目的一个功能,以这种方式实现:

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 在 Periperal 端修复它,但正确设置这些连接参数会是一个更好的修复。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。