【问题标题】:Transferring data over bluetooth-serial module with C #使用 C# 通过蓝牙串行模块传输数据
【发布时间】:2014-03-26 01:36:02
【问题描述】:

我需要通过蓝牙串行链路传输多个 8 字节数据包。我正在使用 JY MCU 蓝牙串口模块。在 PC 端,我正在运行一个与 COM 端口通信的 C# 应用程序。

考虑到 115200 波特,每个 8 字节数据包应花费 8*8/115200 = 0.555 毫秒。

问题是每 4 个数据包中的一个需要 39 毫秒,这完全破坏了所有时间。

为了测量时间,我使用了 .net 框架的秒表组件。 C# 应用程序的输出:


样本 #583:39.126841990471 毫秒

样本 #584:0.7883273789593 毫秒

示例 #585:0.93885067781563 毫秒

样本 #586:0.884708368788226 毫秒

示例 #587:8.65278575619526 毫秒

示例 #588:1.05558303203074 毫秒

样本 #589:0.870116824511337 毫秒

样本 #590:0.888932236868378 毫秒

示例 #591:39.0876752137277 毫秒

示例 #592:1.02639994347697 毫秒

样本 #593:0.820198383564084 毫秒

样本 #594:0.960737994230964 毫秒

示例 #595:15.2051571125331 毫秒


注意每个样本包含8个字节的数据

【问题讨论】:

  • 降低波特率会提高一致性吗?同样,当我切换到使用 bt 4.0 时,我注意到连接时间更好。您在主机和客户端上使用相同的 bt 版本吗?
  • 这个模块的波特率不能用软件改变。我明天会去实验室看看一致性是否会改变。现在不太确定bt版本:(

标签: c# bluetooth


【解决方案1】:

信条 #1:在蓝牙世界中没有保证时间这样的东西。

只需考虑一个设备丢帧(例如,因为您的微波炉刚刚打开) - 将帧理解为丢帧的时间很长。此外,第一个示例中显示的连接/断开连接很长。如果其中一台设备使用例如蓝牙鼠标或被发现,所有赌注都关闭。

长话短说:蓝牙消息没有一致的时间 - 如果您想保留时间信息,请在有效负载中包含时间戳。

【讨论】:

  • 感谢您的建议。但是为什么每 4 个数据包都会显示重大错误?我在想添加缓冲区或类似的东西可能会改善时间?实际上,这个 C# 应用程序正在模拟 EEG 设备,因此时间非常重要。
  • 如果以无线方式连接,真正的 EEG 设备将始终与样本一起传输时间戳——正是因为无线没有保证时间。
  • 好的。但是为了在每个数据包中添加更多数据,我需要增加波特率。你能建议我如何超越115200吗?如果我能以 1382400 bps 的速度进行通信,事情会容易得多。 (C# 不允许我打开高于 115200 的 COM 端口,尽管它是一个虚拟 COM 端口)
  • 首先:需要打开COM口吗?你不能使用\\.\comX 作为文件吗?下一篇:虚拟COM端口是最好的解决方案吗? PAN 和 IP 套接字呢?
  • 1) 我实际上是初学者,所以我使用的是常规的 serialport.open、serialport.write 指令。 2)蓝牙模块在计算机上安装了一个虚拟 COM 端口,我通过它与设备通信 3)我不知道 PAN 和 IP 套接字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多