我已经将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");
}
答案 0 :(得分:1)
iOS实际上不支持7.5毫秒的连接间隔。检查Apple developer guidelines中的连接参数部分(11.6)。仅仅因为您指定一个较低的CI并不意味着您实际上会得到它。在这种情况下,nRF52是从属设备,仅向主设备(您的电话)请求一个低间隔的时间。主机管理员可以完全忽略您的请求。
如您所愿,最好还是缓存数据并通过自定义特征发送数据。找出所需的字节数,也许可以将几个读数打包到一个BLE写操作中。如果您确实在为吞吐量而苦苦挣扎,那么您将需要具有多个特征的自定义服务。我最近在一个项目上工作,该项目通过具有三个特性的BLE流传输8个数据通道(〜125Hz / 16位),这接近于您可以实现的最大吞吐量。
顺便说一句:从每秒打印的行数来判断数据吞吐量是不行的。打印功能通常会产生巨大的开销,并且会对您的测量吞吐量产生负面影响。
让我知道我能否进一步提供帮助。