2013-08-07 67 views
1

在一個項目中,我一直使用藍牙模塊(Panasonic PAN1321)以約200Hz(這是數據包傳輸的速率)將某些傳感器的實時數據傳輸到Android平板電腦。現在我正在考慮使用WiFi。我的理解是,它的射程更遠,更穩健。此外,許多無線系統都在使用它,所以將我的系統與現有設置集成起來會更容易。我打算使用Bluegiga WF121作爲我的WiFi節點。該模塊提供TCP或UDP通信。我不知道TCP或UDP。我真的很感激,如果有人有以下問題的答案:實時無線傳感器數據傳輸。 WiFi還是藍牙? TCP還是UDP?

  • 是否值得從藍牙轉移到Wifi?
  • 我可以在我的WiFi模塊和Android平板電腦(就像我的藍牙模塊)之間進行點對點數據傳輸嗎?
  • 在WiFi上,數據包大小可以達到80到120字節,我可以實現高達500Hz的數據傳輸速率嗎? 500Hz對我的項目中的實時反饋綽綽有餘,但200Hz也足夠了。更低的數據傳輸速率是可能的,但這會增加嵌入式系統的內存需求,這可能是一個瓶頸。
  • 數據包中包含一個時間標記,因此數據包的計時並不重要,但數據包的順序更重要。只要我每秒能夠達到500個數據包(最大60000字節/秒),數據包丟失也並不重要。我不確定WiFi是否太多。
  • 我應該從TCP還是UDP開始開發?
  • 我想在我的Android平板電腦上僅使用WiFi與傳感器的WiFi模塊進行通信,並在平板電腦上使用3G/4G進行互聯網連接。這可能嗎?

期待您的回答/討論。歡呼聲

+0

我通常會說使用udp,除非你有tcp的原因,記得tcp不是流包(從程序員的角度來看),所以你基本上不得不把它解析爲流。 udp,如果你得到的數據包,那麼它是一個完整的數據包。 –

回答

2

問題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:平板電腦,3G/4G的互聯網WiFi?不確定在這一個。如果您使用IP地址,並且不配置用於WiFi的DNS服務器,您可能可以將網絡流量強制到電話網絡上,但這只是猜測。

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

如果您ping本地網絡上的設備,您通常會看到延遲低於1ms。到目前爲止,在沒有創建某種大緩衝區的情況下,以該頻率發送0字節的數據沒有問題。

關於帶寬:

[WP]:802.11b的具有11兆比特/秒的最大原始數據速率[...]在實踐中,最大的802.11b吞吐量應用程序可以實現的是約5.9兆比特/ s使用TCP和7.1 Mbit/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案例意味着無論是服務器還是傳感器都需要能夠接受來自互聯網的連接。由於移動網絡通常是防火牆,在NAT後面等,所以無法訪問3G上的設備。移動帶寬通常也遠低於您的目標60000字節/秒。取決於國家/提供者/地點/ ..如果你可以傳送那麼多。

+0

謝謝你的回答。抱歉這麼晚回覆。我忙於其他一些東西。乾杯 – Simpleton