【发布时间】:2021-03-02 04:09:20
【问题描述】:
我正在为定制的蓝牙硬件开发一个应用程序。 设备的规范有许多可以通过特定蓝牙特性发送到设备的命令。
我们目前正在使用这个版本的 Flutter Blue; flutter_blue:^0.7.2
到目前为止,我们已经发现设备、连接和发现正确的服务和特征。
我们还让它发送命令并接收预期的响应。
这可以通过像这样在正确的图表上列出来工作;
await notify.setNotifyValue(true);
notify.value.listen((event) {
_handleEvent(event);
});
然后像这样发送命令;
await recv.write(command, withoutResponse: true);
(其中命令是表示有效负载字节的列表)。
问题在于响应包含多个数据包。 在这种情况下,初始数据包已收到,但以下预期数据包未到达。
在 ios 上它的工作稍微好一点,因为初始数据包的大小是 Android 响应的 4 倍,并且包含预期的数据,但如果数据太大,则不包含在内。
我已尝试修改 MTU,但这似乎对问题没有任何影响。
任何帮助将不胜感激。
【问题讨论】:
-
github 上有一个公开的 issue 也描述了您的问题:github.com/pauldemarco/flutter_blue/issues/648https://…您尝试了多大的 MTU 以及要发送多少字节?
-
@M.Kotzjan 我确实尝试将 MTU 设置得更高(2048)也低于 20。但似乎设备或库不会接受高于 20 的任何值,因为即使在设置之后它更高,它报告为 20
-
我认为 BLE 低于 5.0 的最大可能 MTU 是 251。设置 MTU 只会启动与外围设备的协商,并且它们都同意一个值。由于它在 iOS 上运行,我假设您的外围设备能够实现如此高的 MTU。尝试将其设置为 251,这应该允许您接收最多 248 个字节的通知。您可以随时尝试使用 nRF Connect 之类的 BLE 扫描仪应用程序,看看是否收到了正确的通知。
-
我刚刚意识到我的 github 问题链接搞砸了:github.com/pauldemarco/flutter_blue/issues/648
-
谢谢@M.Kotzjan!我的印象是,设置高 MTU 会使设备达到最高,但除非 ti 有效,否则它似乎会忽略它。将其设置为 251(在我的情况下)完美地做到了!
标签: android ios flutter bluetooth-lowenergy