【问题标题】:How can you get streamed updates from a Blutooth LE device using Flutter [Flutter blue]?如何使用 Flutter [Flutter blue] 从蓝牙 LE 设备获取流式更新?
【发布时间】: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


【解决方案1】:

在这种情况下,问题完全与 MTU 设置有关。

我的印象是,如果您要求将其设置得太高,它会自动达到可能的最高值。但看起来情况并非如此。

如果您遇到类似问题,请尝试将 MTU 设置为 251

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-04
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2021-07-19
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多