非常慢的连接响应与缓慢的广告

6个员额/ 0个新员额
最后发表
Max44
离线
最后看到:1年2个星期前
加入:2016-02-08等等
非常慢的连接响应与缓慢的广告

DA14580
基本开发工具包,添加模拟传感器和EEPROM
SDK 5.0.3

你好再对话框中,

我将继续基于ble_app_peripheral示例开发一个应用程序。我一直在使用通过外部事件(如按下按钮)唤醒的扩展睡眠模式,事情运行得很好。我想改变睡眠配置,以允许广告运行在一个较慢的速度(1秒)与延长睡眠之间的广告间隔没有唤醒按钮。初始设置完成这似乎是工作,但连接的时间是非常慢......10 20 30秒或者不重新扫描就不连接。我认为这是因为DA 14580正在休眠,错过了来自我的Android平板电脑的连接请求。请问在DA14580这一边,我可以做些什么来提高连接时间?我希望在1秒的广告间隔内,当BLE收音机打开时,一个连接请求会被接收,但显然这在一个合理的时间内没有发生。

谢谢你,马克斯

设备:
MT_dialog
离线
最后看到:5个月2个星期前
工作人员
加入:2015-06-08 34
嗨Max44,

嗨Max44,

为了连接实际上需要两个均等的广告,一个中央拾取你的广告活动为了了解广告和报告,有人当用户或设备启动连接过程和第二个广告为了让外围看到中央的连接请求。所以当你有一个大的广告间隔时,你也会有较慢的连接时间。

由于MT_dialog

Max44
离线
最后看到:1年2个星期前
加入:2016-02-08等等
是的,但你会

是的,但你会以为几秒钟就能联系上而不是十秒钟。我开始在Android上寻找一些其他的东西,发现那里有一些设置会有帮助。下面是其他感兴趣的人的简要说明。

Android的connectGatt方法:

BluetoothGatt connectGatt(上下文上下文,
布尔符,
BluetoothGattCallback回调)

在我的应用程序中默认autoConnect为true。从在线研究中我读到autoConnect参数调用一个后台进程,而将此设置为false提供了一个更快的直接连接。在错误的设置下,我的连接时间明显加快了。由于广告在断开时重新启动,我也不希望autoConnect在应用程序仍在运行时重新启动连接。

问候,马克斯

MT_dialog
离线
最后看到:5个月2个星期前
工作人员
加入:2015-06-08 34
嗨Max44,

嗨Max44,

因为你有一个1秒的间隔,这意味着在最坏的情况下,你将有一个2秒的连接时间,假设你刚刚失去了第一个广告间隔扫描。我认为获得额外时间的原因是由于空中交通,我认为要么外设没有立即得到中央的连接请求,要么中央没有从外设获得广告事件,以便发送连接请求。

由于MT_dialog

Joacimwe
离线
最后看到:一年九个月前
大师
加入:2014-01-14 06:45
当您将autoConnect设置为

当你设置autoConnect为true时,设备地址将被放在控制器的白名单上,并以非常低的负载开始连接,比如2-5%,这意味着它捕获一个广告包的概率是相同的。常见的值是30毫秒的扫描窗口和1280毫秒的扫描间隔,用于连接尝试。因此,您的连接时间在30秒左右的结果是预期的。

当你将autoConnect设置为false时,它会临时中止所有尚未建立的挂起的自动连接,并开始以大约50%的负载专门连接到这个设备,这应该意味着你的设备将在平均两秒内连接。该模式的超时时间为30秒。它不应该反复用于长时间不仅因为它限制等待连接的数量为所有应用程序1的电话,还因为它降低无线性能由于收音机只能听蓝牙或无线网络在一个给定时间的时刻。

假设应用程序已经知道要连接哪个设备,两种模式都只需要一个广告包即可连接,而不是两个。

Max44
离线
最后看到:1年2个星期前
加入:2016-02-08等等
Joacimwe,

Joacimwe,

谢谢你的信息。非常有趣的!比我在Android开发者页面上看到的更有用的细节。我的应用程序只是用于工程和开发,所以你上面提到的限制并不是什么大问题。

很高兴再次收到你的来信。你可能还记得,之前你帮我做过一些数据传输。我最近一直在考虑将连接间隔切换为快速间隔,只为了数据传输,而通常将连接间隔设置为慢速,以减少电池消耗。几年前你也在研究这个。你都搞清楚了吗?我在我尝试过的SDK中发现了以下例程,它似乎工作得很好(在UM-B-051中有简要的记录)。如果你还有其他的指针,请告诉我。

/**
****************************************************************************************
* @brief更新参数操作。
* @param[in] connection_idx连接id。
* @param[in] latency以连接事件周期衡量的从服务器延迟。
* @param[in] intv_min新的首选最小连接间隔,以1.25 ms的槽位度量。
* @param[in] intv_max新的首选最大连接间隔,以1.25 ms的槽位测量。
* @param[in] connection_event_len_min新的首选最小连接事件长度
*测量1.25 ms槽。
* @param[in] connection_event_len_max新的首选最大连接事件长度
*测量1.25 ms槽。
* @return无效
****************************************************************************************
*/
__INLINE void app_param_update_op(uint8_t connection_idx, uint16_t intv_min, uint16_t intv_max, uint16_t latency,\
Uint16_t monition_timeout, Uint16_t connection_event_len_min,\
uint16_t connection_event_len_max)

谢谢你,马克斯