我有一个Adafruit NRF52连接到Adafruit BNO055 9轴方向传感器,收集3轴的绝对方向加上3轴的加速度(总共6漂浮),并通过漂白发送蓝牙。我需要bleuart每7.5毫秒更新一次新的值行,但是当我运行它时,它不会每秒钟打印超过20行的新值行。本质上,我需要的价值观,以尽快更新,因为我正在测量非常高速,高保真度的运动。
在每一行的开头,我也有三位数,表示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");
}发布于 2019-01-03 09:58:52
iOS实际上不支持7.5ms连接间隔。检查苹果开发者指南中的连接参数部分(11.6)。仅仅因为你指定的CI低并不意味着你真的会得到它。在这个场景中,nRF52是从服务器,并且只请求主机(您的手机)的较低间隔。如果主人愿意的话,他可以完全无视你的请求。
您会更好,正如您已经回避的那样,缓冲您的数据并通过自定义特性发送数据。计算出您需要多少字节,也许您可以将几个读数打包到一个BLE写入中。如果您确实在处理吞吐量问题,那么您将需要一个具有多个特性的自定义服务。我最近在一个项目中工作,该项目在BLE上流8通道数据(~125 the /16位),具有三个特性,这接近您可以达到的最大吞吐量。
顺便说一句:根据每秒打印的行数来判断数据吞吐量是一个很大的否定。打印功能通常有巨大的开销,并将极大地影响您的测量吞吐量,以一种负面的方式。
如果我还能帮上忙的话请告诉我。
https://stackoverflow.com/questions/53996602
复制相似问题