BLE 连接参数

BLE 连接参数(原文

有几个参数影响中央和外围设备之间的连接。 这反过来影响设备的功耗:设备上的无线电活动越多,消耗就越大。

setAdvertisingInterval()

当外围设备处于广告模式时,它以固定的间隔发送短达20毫秒或长达10.28秒的广告包。 短时间间隔允许中央设备快速找到外设,但由于需要频繁的无线电工作,因此功耗较高。 因此,它是速度和电池使用时间之间的平衡。

广告间隔完全在外围设备的控制之下。 这与其他连接参数不同,如下所示,哪些参数是中央设备可以忽略的建议。

间隔使用BLE_API的这个BLEDevice类中的setAdvertisingInterval()函数设置。 该函数接受以毫秒为单位的值。

ble.setAdvertisingInterval(1000); // one second
注意:

1. 如果设置为0,广告将被禁用。
2. 当连接模式为ADV_CONNECTABLE_DIRECTED(意味着只接受来自预先定义的中央设备的连接)时,应将其设置为0(即禁用)。
3. 如果设置的值低于最小值(20),则会自动使用最小值。

连接间隔和从设备延迟(Connection interval and slave latency)

当外围设备和中央设备之间的连接建立(连接模式)时,中心决定与外设同步的频率(how often)。 这个决定是单方面的:外围设备不能对中央强制任何东西。 但是,它可以提出中央可能选择尊重的建议。

外设的建议是使用三个参数: MIN_CONN_INTERVAL (最短间隔)和MAX_CONN_INTERVAL (最长间隔),它们一起描述了间隔范围; 以及SLAVE_LATENCY,它定义了外设可以忽略连接事件的次数。

连接间隔(Connection interval)

间隔(interval)参数以毫秒为单位接收值。 例如,以下代码表示最短间隔时间为250毫秒,最长时间为350毫秒:

#define MIN_CONN_INTERVAL 250 //250 milliseconds
#define MAX_CONN_INTERVAL 350 //350 milliseconds

连接间隔不能小于7.5毫秒或长于4秒。 中央将选择由外设建议的最小值和最大值之间的值,或强制实现其自身的值。 重要的是要明白,虽然外设可以建议一个范围(两个值),但最终只能使用一个值。 这是因为同步本身必须始终以固定的间隔发生,而不是范围上的随机点。 这两个参数仅在外围设备向中心提供一个范围时使用。 当中央选择一个值时,它存储在一个新变量中,连接仅指该变量。

连接间隔(Connection interval)是一个误导性的名称; 在每个连接事件中并不会重新尝试新的连接。 相反,在正在进行的连接的上下文中,连接事件允许双方发送和接收数据。具体来说,如果有任何状态更改要报告,BLE设备有机会向客户端发送通知。

从设备延迟 (Slave latency)

理想情况下,当BLE设备(特别是外围设备)处于非活动状态时,需要睡眠才能保持电池。 这意味着它不想处理信息或响应连接事件。 但是,客户端(通常是可充电电话或平板电脑)通常较少受限制,可能会想频繁地与外设同步以保持最新状态。 因此,它将不断地启动连接事件(connection events),唤醒外设。 当外设回答客户端时,尽管没有新的信息,它也浪费了大量的精力。

减轻这种情况的一种方法是使用SLAVE_LATENCY参数。 此参数由中央设备设置,但外设可以根据自己的操作知道提出建议。SLAVE_LATENCY允许外设根据新数据的存在来处理连接事件:

  • 如果没有要发送的新数据,外设可以忽略参数中指定数量的连续连接事件。 这意味着外设可以继续睡眠,尽管客户端尝试同步。

  • 即使没有新数据,外设仍然必须定期响应客户端,以证明连接仍然存在。

  • 如果有新的数据要发送,外设将响应一个连接事件,无论自从上一次响应事件以来已经有多长时间了。

SLAVE_LATENCY参数接受一个整数,指定可以忽略的连接事件数。 例如,以下代码意味着设备可以忽略四个连续的连接事件,但必须响应第五个连接事件:

#define SLAVE_LATENCY 4 // four events can be ignored, the fifth must be met

SLAVE_LATENCY和MIN_CONN_INTERVAL之间的区别是状态依赖。 MIN_CONN_INTERVAL是独立于状态的:即使有新的数据要发送也是如此。 SLAVE_LATENCY与状态相关 :仅当外围设备没有数据时才使用。 这些参数的组合使我们可以有条件地控制我们的无线电使用情况:当有新的信息时,我们会经常进行通信,但是当没有信息时很少。 一个很好的例子是BLE鼠标。 为了节省能源,当用户没有移动鼠标时,我们不想经常使用射频。 但是为了方便使用,当用户使用鼠标时,我们不希望缓慢的通信(慢速通信会使鼠标落后于用户的操作)。 因此,我们将设置一个高延迟,但是最小连接间隔很小。

注意: SLAVE_LATENCY的最大值取决于您使用的堆栈。检查您的供应商的规格。

把它们放在一起

这是一个描述外设和中央之间的交互的图。 请注意,在本例中,我们命名了连接间隔connectionInterval
的变量:

连接监控超时

有时设备会丢失它们之间的连接,例如当它们移出彼此的传输范围时。 这些设备不知道连接是否丢失,但是如果没有从另一方接收到任何信息,他们可以假设已经有足够的时间了。 我们定义为“足够”以确定连接丢失的时间称为超时 。 连接监控超时(Connection Supervision Timeout)参数定义为在假设连接丢失之前等待数据传输的时间。

在我们的示例中,此参数称为CON​​N_SUP_TIMEOUT,并以毫秒为单位接收值。 例如,以下代码表示超时为6秒:

#define CONN_SUP_TIMEOUT 6000 // six seconds

连接监视超时是中央设备自由忽略的建议。 这限制了我们使用其他参数创建数据传输之间长距离的能力,因为长间隔需要将其他参数与长监控超时相结合。 如果中央拒绝我们的监督超时,同时接受其他参数,它可能设置很长的差距,但短暂的超时。 然后假设我们断开连接。

注意: CONN_SUP_TIMEOUT的最大值取决于您使用的堆栈。检查您的供应商的规格。

最大限度地延长电池寿命

由于连接参数对能源消耗有影响,我们应该考虑一下,即使知道中央可能会选择不遵守我们的建议。 一个考虑因素是我们的连接间隔应该与我们期望生成新数据的速率相匹配。 例如,如果我们每秒读取一个传感器,则连接间隔不应该小于此。 如果它更小,那么当没有数据生成时,我们将处理很多请求。 作为相反的示例,对于数据更新非定期(例如鼠标移动)的应用,连接间隔可以确定用户在应用等待更新时经历的延迟。 由于我们重视用户体验超过能量,我们将使用一个短的连接间隔。 我们可以补充短连接间隔,具有高从机延迟,让鼠标在运动之间睡眠更长。

对于电池寿命,我们使用射频越少越好。 所有的参数总体意味着我们可以很少使用射频:在广告模式下,我们可以每10.28秒使用一次射频。

连接模式下,我们可以设置四秒的最大连接间隔,但是当我们没有生成新数据时,没有无线电活动的最长持续时间可能只要[(max interval) * (slave latency)]。 但是,请记住,我们受到监督超时(supervision timeout)的限制; 如果我们的间隔太大,中央设备可能会断开连接(请记住,我们不能强制中央设备接受我们的监控超时设置,因此可能会出现不匹配)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容