【问题标题】:Packing 20 bytes chunk via BLE通过 BLE 打包 20 字节块
【发布时间】:2014-12-13 14:27:47
【问题描述】:

我以前从未使用过蓝牙。我必须通过 BLE 发送数据,我发现每个块 20 个字节的限制。

发送者是 Arduino,接收者可以是 Android 或 PC 上的 Node.js 应用程序。

我必须发送 9 个值,存储在浮点值中,所以 4 字节 * 9 = 36 字节。我需要 2 个块来通过 BLE 存储我的所有数据。接收部分需要两个块来处理它们。如果丢失了一些数据,我不在乎。

我不是网络协议方面的专家,我认为我必须给每条消息一个递增的时间戳,以便接收者可以使用相同的时间戳粘合两个块,或者如果新的时间戳更高,则丢弃最后一个。但是我不确定如何进行校验和,如果我真的需要它,我是否真的需要关心它,或者如果 - 对于我的系统的简单 beta 版本 - 我可以忽略所有这些问题..

有人可以给我一些建议吗?类似使用 BLE 通信处理的类似情况的示例?

【问题讨论】:

  • BLE 在许多方面与经典蓝牙不同,因为您不能将这两个设备指定为“发送者”和“接收者”。您需要了解 BLE 中的通用属性配置文件 (GATT) 的基本原理,它定义了如何使用基于 UUID 的 Gatt Client 从 GATT Server 访问服务。
  • @OsmanEsen:你能说得清楚一点吗?你说得对,BLE 与普通蓝牙不同,但我需要一次连接一个设备。你的意思是使用不同的配置文件我可以发送超过 20 个字节?
  • 没有。我使用德州仪器 (Texas Instruments) 的 BLE 设备进行了很多工作,这些设备也都有 20 字节的限制。此限制是 BLE 的常见限制,因此您一次不能发送超过 20 个字节。
  • @OsmanEsen 那么关贸总协定有什么用处?谴责新特性并通知客户?

标签: bluetooth arduino bluetooth-lowenergy communication chunks


【解决方案1】:

您可以使用 ATT 的“读取 Blob 请求”绕过大小限制。它允许您读取属性并提供偏移量。因此,您可以使用它来读取偏移量为 0 的属性,如果 ATT_MTU 字节多于您可以使用 ATT_MTU*1 的偏移量再次请求,如果还有更多的 ATT_MTU*2 等...(您可以在蓝牙 v4.1 规范的 3.4.4.5 中阅读它;它也在 4.0 规范中,但我现在没有那个)

如果请求之间的值发生变化,我不确定您如何检测这种变化。您可以让属性在发生更改时发送通知以中断进程,以防在读取过程中值发生更改。

【讨论】:

  • uao.这个答案非常准确.. 可能我可以完全理解.. 你对如何使用 Nordic Semicondutor SDK for Arduino 有任何想法吗?
  • 对不起,没有。我以前没用过。您可以尝试在他们的文档中搜索“blob”。
猜你喜欢
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
相关资源
最近更新 更多