2013-02-16 47 views
2

你好哦,mighty StackOverflow.com社區。Arduino和Raspberry Pi之間的無線交換:協議的選擇

這是我一直在擺弄一段時間的問題。我有(將)有一個Arduino 2560使用388 RF發射器/接收器與RPi進行通話,因此它將成爲串行通信。更糟糕的是,會有很多發射器(Arduinos)和單個接收器(RPi)。有兩個問題,我不能完全弄清楚的答案:

  1. 協議是非常原始的 - 所以,如果我想要的任何糾錯,我要選擇我自己。我想使用一些非常簡單的功能,比如奇偶校驗位,然後看看它是如何發生的。思考?

  2. 說到協議本身 - 我們如何編碼數據?實際上,將會有一個我將要傳輸的號碼 - 發射機ID - 伴隨着一個布爾標誌(傳感器有效/無效)。串行RF傳輸數據的最佳編碼方式是什麼?所有文本?我也可以將它作爲一個字節流傳輸,但是這會導致更多的移植困難(Big/Little Endian,字號等)。還試圖考慮一些像NanoPB這樣的外部設備,無論協議緩衝區是多麼的棒,它們可能都是爲了這項任務而矯枉過正。我知道我的位置在這裏很不穩定,所以我會很感激你的想法。

  3. 最後,我知道這聽起來很蹩腳,但我確信有人以前做過這件事,甚至可能會有某種跨平臺的庫,我可以用它來做我的交流。如果事實確實如此,那就太好了 - 我可以做我想做的事情,而不是重新發明輪子。

無論如何,這裏就是我的立場。將不勝感激任何答案。

這是我使用的transmitter,這是一個receiver

非常感謝大家!

回答

0

理論上可以將接收端口移植到樹莓上,但是您需要實時訪問處理器才能使用位翻轉進行傳輸。不幸的是,Linux不是一個實時操作系統,因爲處理器花費不同的時間處理其他進程。當您嘗試創建軟件時鐘參考時,這會造成嚴重破壞。它在Arduino上運行良好,只運行一個程序。

有一些硬件的問題涉及一些額外的成本和硬件複雜性。一種是在模式0下將數據發送到SPI,並將MOSI和SCLK引腳連接到異或門IC的輸入。另一種硬件方法是使用SPI或I2C來編程Arduino或PIC,作爲RF模塊和Raspberry Pi之間的網關來處理RF。

注意:此kludge需要一個FIFO緩衝SPI UART。一些早期的Raspberry Pi型號具有軟件SPI,並且不使用硬件FIFO。檢查您的特定版本的規格。

有興趣和熟練的人也可以爲Pi創建一個內核模塊來處理這種類型的鏈接。有關該主題的更多信息可以在這裏找到:

http://www.raspberrypi.org/forums/viewtopic.php?t=39951