实时无线传感器数据传输。 WiFi还是蓝牙? TCP还是UDP?

时间:2013-08-07 15:12:37

标签: android tcp udp embedded wifi

在一个项目中,我一直在使用蓝牙模块(Panasonic PAN1321)以大约200Hz的速度将实时数据从某些传感器传输到Android平板电脑(这是数据包传输的速率)。现在我正在考虑使用WiFi。我的理解是它具有更长的范围并且更稳健。此外,许多无线系统都使用它,因此将我的系统与现有设置集成起来会更容易。我打算使用Bluegiga WF121作为我的WiFi节点。该模块提供TCP或UDP通信。我不知道TCP或UDP。如果有人对以下问题有答案,我将非常感激:

  • 是否值得从蓝牙转为Wifi?
  • 我可以在WiFi模块和Android平板电脑之间进行点对点数据传输(就像我的蓝牙模块一样)吗?
  • 在WiFi上,我可以实现高达500Hz的数据传输速率,数据包大小约为80到120字节吗?在我的项目中,500Hz足以实现实时反馈,但200Hz也足够了。可以实现更低的数据传输速率,但这会增加我的嵌入式系统的内存需求,这可能是一个瓶颈。
  • 数据包中包含时间戳,因此数据包的时序不重要,但数据包的顺序更重要。只要每秒最多可以获得500个数据包(最大60000字节/秒),数据包丢失也不重要。我不确定它对于WiFi来说是否太多了。
  • 我应该使用TCP还是UDP开始开发?
  • 我想在我的Android平板电脑上使用WiFi,只能与传感器的WiFi模块通信,并在平板电脑上使用3G / 4G进行互联网连接。这可能吗?

期待您的回答/讨论。干杯

2 个答案:

答案 0 :(得分:3)

问题1:值得吗?对不起,一旦你理解了权衡(包括开发时间),你必须自己决定一个

问题2:点对点?是

问题3:以500 Hz的频率传输?每秒500 msg *每条消息200字节(允许协议开销)*每字节8位= 0.8 GHz。所以理论上它可以在1Ghz通道上实现。然而,这假设完美的发送者&接收器,所以你可能做得不那么好。如果你可以在10Ghz的WiFi,你应该没事。作为一般规则,由于协议开销较少,UDP比TCP快。

问题4:可靠性。 TCP保证按顺序交付,但您必须自己查找消息边界。 UDP是用于传递和排序消息的尽力而为协议,但数据包边界与消息边界匹配,简化了接收代码。可以在UDP之上构建可靠性,但您基本上是在重新发明TCP。也可以重新排序UDP数据包和/或跳过无序数据包,因此如果它们以错误的顺序出现,它们就会丢失。

问题4:TCP或UDP。我说UDP(已编辑)

问题5:平板电脑的WiFi,互联网的3G / 4G?在这一点上不确定。如果您使用IP寻址并且没有为WiFi配置DNS服务器,您可能会强制互联网流量进入电话网络,但这只是一种争议。

答案 1 :(得分:3)

  • 200Hz =每5ms一次。
  • 500Hz =每2ms一次。

如果您在本地网络上ping设备,通常会看到延迟低于1毫秒。到目前为止,在没有创建某种大缓冲区的情况下,在该频率上发送0字节数据没有问题。

关于带宽:

  

[WP]:802.11b的最大原始数据速率为11 Mbit / s实际上,使用TCP和7.1 Mbit,应用程序可以实现的最大802.11b吞吐量约为5.9 Mbit / s / s使用UDP。

如果你假设一个相当慢的过时的11MBit WiFi连接,你应该没有问题发送你的数据。蓝牙是低功耗,低带宽技术,因此much slower。 6Mbit / s意味着你可以在~4kHz传输。


  

我的理解是它具有更长的距离并且更强大。

正确,主要是因为它使用更多的电力。

  

是否值得从蓝牙转为Wifi?

是的,如果低范围&带宽限制了你。如果没有,为什么要实施新的东西。

  

我可以在WiFi模块和Android平板电脑之间进行点对点数据传输(就像我的蓝牙模块一样)吗?

  • 可以广播或定向UDP。设备之间没有连接。
  • TCP需要点对点连接。
  • 在Android上使用这两个都没有问题,一旦你拥有了网络权限,应用就可以收到两个就好了。请参阅任何通用的Java TCP / UDP教程。
  

在WiFi上我可以实现高达500Hz的数据传输速率,数据包大小约为80到120字节吗?

只要连接足够好就没问题。

  

数据包中包含时间戳,因此数据包的时序并不重要,但数据包的顺序更重要。

TCP保证数据包顺序。 UDP没有。 (UDP之上的实现就像TCP连接一样)

  

只要每秒最多可以获得500个数据包(最大60000字节/秒),数据包丢失也不重要。

TCP还保证在建立连接时不会丢失数据包。如果数据包丢失(在本地网络上已经很少见),TCP将重新请求它。您的应用程序除了有序数据包的常量流之外什么都看不到。 UDP无法保证。你的应用程序以它们到达的顺序获取数据包(我会假设在本地网络中有正确的顺序,基本上没有什么可以重新排序它们)并且如果它们丢失则不会看到它们。

  

我应该使用TCP还是UDP开始开发?

TCP听起来更好。如果你想要没有丢包/重新排序,那么实现起来也更简单,因为它是在TCP堆栈中实现的。

  

我想在Android平板电脑上使用WiFi,只能与传感器的WiFi模块通信,并在平板电脑上使用3G / 4G进行互联网连接。这可能吗?

您可以创建某种可通过互联网访问的服务器,并让设备连接到该服务器。然后,服务器可以将从传感器收到的数据中继到仅连接3G的设备。我不认为你可以将它实现到传感器中,但这并非不可能。 3G情况意味着服务器或传感器需要接受来自互联网的连接。您无法访问3G上的设备,因为移动网络通常是防火墙,在NAT后面等。移动带宽通常远低于您目标的60000字节/秒。取决于国家/提供商/位置/ ..如果您可以传输那么多。