蓝果NRF52最大连接间隔速度(connInterval)

时间:2019-01-01 15:20:02

标签: bluetooth arduino bluetooth-lowenergy adafruit nrf52

我已经将Adafruit Bluefruit NRF52连接到Adafruit BNO055 9轴定向传感器,收集3个绝对定向轴和3个加速度轴(总共6个浮点),并通过bleuart通过蓝牙发送。我需要bleuart每隔7.5毫秒用一行新值更新一次,但是运行时,它每秒不会打印出超过20行新值。本质上,因为我正在测量非常高的速度,高保真度的运动,所以我需要尽快更新值。

在每行的开头,我还有3位数字,代表IMU上每个传感器的校准状态。每一行都看起来像:

303 68.69   4.19    -2.19   -0.12   0.14    -0.40

我目前正在使用最新的iOs版本将其流式传输到我的iphone,理论上它可以处理7.5ms的间隔。

我已经读过一种解决方案,它可能是缓冲值并以较大的连接间隔以更大的块发送,但是不确定如何执行此操作。

我相关的Arduino代码如下:

Bluefruit.setConnIntervalMS(7.5, 20);

void loop()
{
    imu::Vector<3> accel = 
    bno.getVector(Adafruit_BNO055::VECTOR_LINEARACCEL);

    /* Get a new sensor event */
    sensors_event_t event;
    bno.getEvent(&event);

    /* Display the floating point data */
    bleuart.print(event.orientation.x);
    bleuart.print("\t");
    bleuart.print(event.orientation.y);
    bleuart.print("\t");
    bleuart.print(event.orientation.z);
    bleuart.print("\t");

    /* Display the floating point data for Linear Acceleration */
    bleuart.print(accel.x());
    bleuart.print("\t");
    bleuart.print(accel.y());
    bleuart.print("\t");
    bleuart.print(accel.z());
    bleuart.print("\n");
}

1 个答案:

答案 0 :(得分:1)

iOS实际上不支持7.5毫秒的连接间隔。检查Apple developer guidelines中的连接参数部分(11.6)。仅仅因为您指定一个较低的CI并不意味着您实际上会得到它。在这种情况下,nRF52是从属设备,仅向主设备(您的电话)请求一个低间隔的时间。主机管理员可以完全忽略您的请求。

如您所愿,最好还是缓存数据并通过自定义特征发送数据。找出所需的字节数,也许可以将几个读数打包到一个BLE写操作中。如果您确实在为吞吐量而苦苦挣扎,那么您将需要具有多个特征的自定义服务。我最近在一个项目上工作,该项目通过具有三个特性的BLE流传输8个数据通道(〜125Hz / 16位),这接近于您可以实现的最大吞吐量。

顺便说一句:从每秒打印的行数来判断数据吞吐量是不行的。打印功能通常会产生巨大的开销,并且会对您的测量吞吐量产生负面影响。

让我知道我能否进一步提供帮助。