DA14580
附加模拟传感器和EEPROM的基本开发工具包
SDK 5.0.3
你好再对话框中,
我正在继续研究一个基于ble_app_peripheral示例的应用程序。我一直在使用通过外部事件唤醒的延长睡眠模式(如按下按钮),一切都运行得很好。我想改变睡眠配置,以允许广告运行在一个缓慢的速率(1秒)与延长睡眠之间的广告间隔没有一个唤醒按钮。初始设置完成这似乎是工作,但时间连接是非常缓慢的......10, 20, 30秒或没有连接没有重新扫描。我假设这是因为DA 14580正在休眠,并且错过了来自我的Android平板电脑的连接请求。你知道我在DA14580方面可以做些什么来改善连接时间吗?我希望一个连接请求将被捡起,而BLE收音机在1秒的广告间隔期间是打开的,但这显然不是在一个合理的时间内发生的。
谢谢你,马克斯
设备:
嗨Max44,
为了连接实际上需要两个均等的广告,一个中央拾取你的广告活动为了了解广告和报告,有人当用户或设备启动连接过程和第二个广告为了让外围看到中央的连接请求。所以当你有一个大的广告间隔,你也会有缓慢的连接时间。
由于MT_dialog
是的,但是这样的话,你需要几秒钟才能连接上,而不是超过10秒。我开始在Android上寻找其他东西,并发现有一些设置会有所帮助。下面是对其他感兴趣的人的简要说明。
Android的connectGatt方法:
BluetoothGatt连接
布尔符,
BluetoothGattCallback回调)
默认为autoConnect true在我的应用程序。从网上研究,我读到autoConnect参数调用一个后台进程,而将此设置为false提供了一个直接连接,这是更快的。这让我的连接时间明显变快了。与广告重新启动断开,我也不希望autoConnect重新启动连接,如果应用程序仍在运行。
问候,马克斯
嗨Max44,
因为您有1秒的间隔,这意味着在最坏的情况下您将有2秒的连接时间,假设您在扫描时丢失了第一个广告间隔。获得额外时间的原因,我认为是由于空中交通,我认为要么外设没有立即从中央获得连接请求,或者中央没有从外设获得广告事件,以发送连接请求。
由于MT_dialog
当您将autoConnect设置为true时,设备地址将被放在控制器的白名单中,并以极低的负荷(如2-5%)开始连接,这意味着它捕获一个广告包的概率是相同的。常见的值是30ms扫描窗口和1280ms扫描间隔的连接尝试。因此,预计您的连接时间在30秒左右。
当您将autoConnect设置为false时,它会暂时中止所有尚未建立的挂起的自动连接,并开始专门连接到此设备,负载约为50%,这应该意味着您的设备将在平均2秒内连接。然而,这种模式有一个30秒的超时。它不应该反复用于长时间不仅因为它限制等待连接的数量为所有应用程序1的电话,还因为它降低无线性能由于收音机只能听蓝牙或无线网络在一个给定时间的时刻。
假设应用程序已经知道要连接哪个设备,这两种模式都只需要一个广告包连接,而不是两个。
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毫秒插槽。
* @param[in] connection_event_len_max新的首选最大连接事件长度
*测量在1.25毫秒插槽。
* @return无效
****************************************************************************************
* /
__INLINE void app_param_update_op(uint8_t connection_idx, uint16_t intv_min, uint16_t intv_max, uint16_t latency,\
Uint16_t supervision_time_out, Uint16_t connection_event_len_min,\
uint16_t connection_event_len_max)
谢谢你,马克斯