用c#通过蓝牙串行模块传输数据

本文关键字:模块 传输 数据 | 更新日期: 2023-09-27 17:53:33

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

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

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

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


样本# 583:39.126841990471 ms

样本# 584:0.7883273789593 ms

样本# 585:0.93885067781563 ms

样本# 586:0.884708368788226 ms

样本# 587:8.65278575619526 ms

样本# 588:1.05558303203074 ms

样本# 589:0.870116824511337 ms

样本# 590:0.888932236868378 ms

样本# 591:39.0876752137277 ms

样本# 592:1.02639994347697 ms

样本# 593:0.820198383564084 ms

样本# 594:0.960737994230964 ms

样本# 595:15.2051571125331 ms


注意每个示例包含8个字节的数据

用c#通过蓝牙串行模块传输数据

信条#1:在蓝牙世界中,没有所谓的定时保证。

考虑一个设备丢失帧(例如,因为你的微波炉刚刚打开)-理解帧丢失的时间是相当长的。此外,第一个示例中所示的连接/断开操作很长。如果其中一个设备使用例如蓝牙鼠标或被发现,所有的赌注都取消了。

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