Arduino TI 嵌入式系統

RF24 專屬於 nRF24L01 的程式函式庫。

nRF24L01

我在大學研究的專題可以說是自幹一個 Zigbee 的無線網路系統,我所採用無線傳輸模組是不在 IEEE 規範中的 2.4GHz 無線網路模組 nRF24L01,並且利用 Arduino 以及 Raspberry Pi 做雛形開發。很久之前還有為了它與 Launchpad 之間的通訊而寫過一篇文章。至於我專題的細節,改天再來說說。

nRF24L01 是一個非常便宜,便宜到可以說是不可思議的無線傳輸模組,且透過 SPI 的方式與微處理器溝通與傳輸資料。以下是 nRF24L01 的一些特色。

  • 使用2.4GHz全球開放頻寬
  • 126個可選擇頻道
  • 可設定收發位址及頻率
  • 最高 2Mbps 的資料傳輸速率
  • 可程式控制的輸出功率(最大0dBm,消耗11.3mA)
  • 1.9~3.3V低電壓
  • 使用SPI界面控制
  • 細節可以參考官方網站

如果你剛剛有去翻閱一下先前寫的那篇文章的話,應該會對於這個傳輸模組有些微的概念。但那篇文章的操作環境主要是在 Launchpad 這個由 TI 出品的開發板上,而今天要介紹的,則是讓你能透過 Raspberry Pi 的 GPIO 來操作這個無線傳輸模組。

RF24

RF24 是一個支援多種單板電腦的 C++ 程式函式庫(Library),因為這種外接模組並不像是 USB 裝置那樣,可以隨插隨用,而是要透過一些特殊的程式才能運作,而通常這些程式都是由一些義工愛好者們所提供的。RF24便是其中之一。

RF24 提供許多方便好用的 function 讓你可以快速的掌握 nRF24L01 ,並且讓他可以跟 Raspberry Pi 緊密結合,做更多你想用他做的事情。

目前支援的單板電腦除了 Raspberry 以外,還有…

  • Intel Galileo
  • Arduino Uno, Nano… ATMega 328 核心的
  • Arduino Mega Boards
  • Arduino Due
  • ATTiny
  • 其他細節可以參考他的 Git Page

RF24 Github:https://github.com/maniacbug/RF24

Class Reference

這部分可以直接參考官方的內容,因為項目繁多,我就不一一介紹了。

範例

範例程式其實包在所下載下來的資料包中,不過都是英文,但我想我把 GettingStarted.cpp 這個範例給簡單的翻譯一下,也順便讓你了解這個函式庫的使用方法。

GettingStarted.cpp

這是一個 Raspberry Pi 的範例,執行時需要兩個 nRF24L01 的裝置才能運作,一個可以是 Raspberry Pi 另一個是 Arduino。Arduino 的範例程式你可以在這邊看到。

總結

其實個人覺得這個無線模組不難用,但問題在於傳輸距離。雖然宣稱可以長達 100 公尺以上的傳輸距離,但那只限定在沒有過多障礙物且傳輸速率較慢的環境下才有可能抵達這麼遠的距離,在我的實測過程中,2Mbps的速率下,最多只能到30M左右。

但是他的便宜、小巧以及低功耗可以讓它在小區域的無線控制上佔上一席之地。

在〈RF24 專屬於 nRF24L01 的程式函式庫。〉中有 8 則留言

  1. 您好我想請問一下 能否用arduino測量出兩個nRF24L01的訊號強度?

  2. 您好請問,要怎嚜設定db強度。我買的那個賣家有貼出

    默認模式輸出功率為2~3dBm, 如果要輸出7dBm,將暫存器位址0x06 (RF_SETUP) 暫存器的最低4位元寫入
    1(NRF24L01+沒有用到該位址,默認為0),即0x06寄存器最低四位元為1111即可。

    您知道要怎麼設定嗎?

  3. 我在設定上遇到很大的問題

    在GettingStsrted裡傳輸正常
    但卻不太懂如何使用指令(包含自己寫程式)
    方便用信箱聯絡嗎?

  4. 我現在的問題是TX端有訊號輸出
    可是RX端卻收不到 是我頻道位址沒設定好還是有其他地方我沒注意到
    就我現在的認為是可以從arduino裡寫程式修改頻道 是這樣可以嗎?

    1. 據我所知 這個模組對電源有點要求,是否有上個電容濾波一下?

      我之前測試3.3v沒濾波就非常難收到訊號

      另是用getting started 程式測試嗎?你可已把兩個模組都先啟動發射,然後再把其中一個切回接收

您的見解

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料