Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android蓝牙低能量顺序写入性能_Android_Bluetooth Lowenergy - Fatal编程技术网

Android蓝牙低能量顺序写入性能

Android蓝牙低能量顺序写入性能,android,bluetooth-lowenergy,Android,Bluetooth Lowenergy,我有一辆蓝牙遥控车。因此,我需要定期写入汽车上的驱动特性。我的微控制器(AtmelXMega128A1@32Mhz+nRF8001)应该能够在7,5毫秒的连接间隔内每秒处理多达122个连接 我的Android应用程序基于cordova和蓝牙低能耗插件: 我在Nexus5和Android v4.4.4上运行这个 我有一个计时器,它每175ms向汽车发送转向和加速值。我希望每50毫秒发送一次,但这不起作用。我不知道问题出在哪里,但我猜是GATT的android实现(我在某种程度上得到了挂起的命令错误

我有一辆蓝牙遥控车。因此,我需要定期写入汽车上的
驱动特性。我的微控制器(AtmelXMega128A1@32Mhz+nRF8001)应该能够在7,5毫秒的连接间隔内每秒处理多达122个连接

我的Android应用程序基于cordova和蓝牙低能耗插件:

我在Nexus5和Android v4.4.4上运行这个

我有一个计时器,它每175ms向汽车发送转向和加速值。我希望每50毫秒发送一次,但这不起作用。我不知道问题出在哪里,但我猜是GATT的android实现(我在某种程度上得到了挂起的命令错误)

如果我写的内容超过了它的处理能力,汽车会执行一行中的所有命令,但时间会发生变化。有些队列显然打嗝了,这不是微控制器,因为它运行得更快

我正在做一个时间的改变,这似乎是成功的。我试着关掉WiFi,希望能有所帮助,但一切都没有改变


有没有在安卓平台上对GATT特征进行定期写作的经验?示例会很好。

首先,你应该做一个健壮的设计。数据应该由来自Android BT堆栈的回调驱动,告诉它何时准备接受更多数据(当上一次传输完成时)。不要使用计时器。总是需要在较低的堆栈级别上进行重传,因此您不能依赖精确的传输间隔和吞吐量

7.5ms是可能的最短连接间隔,但是默认值通常要慢得多(在我的Nexus 5和Android L上为48.75ms),因此在连接后,您应该尝试从外围设备请求更快的连接间隔。这将加快您的吞吐量和响应速度

如果你试图强制一个非常快的连接间隔,一些Android BT堆栈会拒绝。你应该明智地处理这件事。就像尝试使用7.5ms(参数=6)并在失败时增加它。iOS设计指南规定,您不得使用低于20(*1.25ms)的值,并且请求值的上限应至少比下限高20。不过,如果您请求值min=10、max=20并在18ms左右结束,您将获得更快的连接参数。 对于android来说,似乎大多数人都会接受7.5ms(值6),但你也不应该强迫它,因为堆栈可能会取消连接

我在Android L上做了实验,在连接时从外围设备请求连接间隔。Android对请求进行了四舍五入处理,因此每第三步都会产生差异。 6=7.5ms,9=11.25ms,12=15.0ms,…,39=48.75ms,这似乎是运行Android L的Nexus 5的默认值

蓝牙是broadcom芯片组中的共享资源,大多数用于智能手机端。Wifi、BT经典、BT低能耗,有时GPS共享带宽。你会看到打嗝,必须容忍。做一个坚固的设计

如果您需要比默认值更大的数据包,您还可以尝试重新协商MTU-SIZE。根据规范,这是一个可选的BLE功能,但苹果在iOS7中完全打破了它,在iOS7中,他们将其作为提高吞吐量的必备功能。这破坏了所有未实现响应处理程序的BLE设备,因此它崩溃,在进行软件更新之前无法与iOS设备一起使用。巴亚德。但对于android来说,这不是问题