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

标签 android tcp udp embedded wifi

在一个项目中,我一直在使用蓝牙模块 (Panasonic PAN1321) 以大约 200Hz(这是数据包传输的速率)将实时数据从一些传感器传输到 Android 平板电脑。现在我正在考虑改用WiFi。我的理解是它的射程更远,而且更坚固。此外,许多无线系统都使用它,因此可以更轻松地将我的系统与现有设置集成。我打算使用 Bluegiga WF121 作为我的 WiFi 节点。该模块提供 TCP 或 UDP 通信。我不了解 TCP 或 UDP。如果有人能回答以下问题,我将不胜感激:

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

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

最佳答案

  • 200Hz = 每 5 毫秒一次。
  • 500Hz = 每 2 毫秒一次。

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

关于带宽:

[WP]: 802.11b has a maximum raw data rate of 11 Mbit/s [...] in practice the maximum 802.11b throughput that an application can achieve is about 5.9 Mbit/s using TCP and 7.1 Mbit/s using UDP.

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


My understanding is that it has longer range and is more robust.

正确,主要是因为它消耗更多电量。

Is it worthwhile to shift from Bluetooth to Wifi?

是的,如果低范围和带宽限制了您。如果不是,为什么要实现新的东西。

Will I be able to do point-to-point data transfer between my WiFi module and an Android tablet (just like my bluetooth module)?

  • UDP 可以广播或定向。设备之间没有连接。
  • TCP 需要点对点连接。
  • 两者都可以在 Android 上使用,一旦您获得网络许可,应用程序就可以很好地接收两者。请参阅任何通用 Java TCP/UDP 教程。

On WiFi can I achieve a data transfer rate of upto 500Hz with a data packet size of approx 80 to 120 bytes?

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

There is a time-stamp included in the data packet so timing of packets is not important however order of packets is more important.

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

Packet loss is also not important as long as I can get upto 500 data packets per second (max. 60000 bytes/sec).

TCP 还保证在建立连接时没有丢包。如果数据包丢失(这在本地网络上已经很少见),TCP 将重新请求它。您的应用程序只能看到持续不断的有序数据包流。 UDP 没有任何保证。您的应用程序以它们到达的任何顺序获取数据包(我会假设在本地网络中的顺序是正确的,基本上没有什么可以重新排序它们)并且如果它们丢失它不会看到它们。

Should I start development with TCP or UDP?

TCP 听起来更好。如果您希望没有数据包丢失/重新排序,它的实现也更简单,因为它是在 TCP 堆栈中实现的。

I want to use WiFi on my Android tablet only to communicate with the WiFi module for the sensors and use 3G/4G on the tablet for internet connectivity. Is this possible to do?

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

关于android - 实时无线传感器数据传输。 WiFi 还是蓝牙? TCP 还是 UDP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18107148/

相关文章:

java - Gradle 构建错误 : Unable to load Maven meta-data from https://repo1. maven.org/maven2/io/fabric/tools/gradle/maven-metadata.xml

android - 我需要遵循哪些步骤才能在我的 Android 手机上编写和编辑 python 程序?

android - 加载完成后在新 Activity 中从 URL 播放视频

http - 为什么 HTTP 使用 TCP?

c# - .NET 中的 UDP 套接字客户端

c++ - UDP测试代码收不到消息(C++)

java - 安卓 - java.lang.IllegalStateException : cannot perform this action after onSaveInstanceState

java - 如何在spring集成TCP Server中等待数据

c# - 如何从 tcp 段构建消息

python - 使用 tcpdump 跳过 IP header