nRF24L01無線收發器模組與Arduino通訊實驗(一)

nRF24L01是挪威Nordic半導體公司設計的無線收發器晶片,工作在世界通用、免許可證的ISM 2.4GHz頻段。nRF24L01具備價格低廉、省電、程式設計簡單且通訊可靠等優點,廣泛用於無線鍵盤、滑鼠、門禁系統…等無線通訊和控制產品。

本系列文章將說明運用nRF24L01模組,在Arduino控制板之間建立無線電通訊。實際連接Arduino、撰寫程式之前,先來認識這個模組的規格。

nRF24L01無線射頻收發模組

nRF24L01晶片模組有不同外觀尺寸和天線設計,有些還能選購外接電源模組:

nRF24L01無線射頻收發模組

常見的模組有8針與10針兩種接腳,兩者的差別在於10針的模組多了一組電源和接地腳,實際的腳位可能會因製造商而異:

nRF24L01無線射頻收發模組的接腳

底下是Nordic公司的nRF24L01技術文件2.0版當中提到的晶片工作電壓和電流:

  • 工作電壓(Vcc):1.9 V~3.6V,建議採3.3V。
  • 發射模式下電流消耗(0dBm時):11.3 mA
  • 接收模式下電流消耗(傳輸率2Mbps時):12.3 mA

大家都知道LED很省電,一般電子元件常見的紅色LED的最大工作電流為30mA,而nRF24L01無線收發模組的工作電流不到LED的一半!模組的工作電壓是3.3V,不可接5V(除非模組上面有直流電壓轉換器);除了電源和接地以外的接腳,都能承受5V電壓,所以可直接和Arduino Uno相連。

nRF24L01模組的接腳

nRF24L01透過SPI介面和微控制器相連,底下4個是模組的SPI接腳:

  • CSN (Chip Select Not):晶片選擇腳,“Not”代表「低電位」致能。
  • SCK (Serial Clock):序列時脈
  • MOSI (Master Out Slave In):主出從入,通常簡寫成MO。
  • MISO (Master In Slave Out):主入從出,通常簡寫成MI。

SPI介面

CE (Chip Enable):晶片致能,為訊號輸入腳;Arduino程式庫會幫我們自動設定:

  • 若模組為「接收端」且CE置於高電位,允許模組監聽無線電訊息並接收封包。
  • 若模組為「接收端」且CE置於低電位,則模組處於待機模式,不接收訊息。
  • 若模組為「發射端」,除了在準備傳送封包之前,需要輸入至少10µs高脈衝訊號之外,CE腳都處於低電位。

IRQ (Interrupt Request):中斷請求腳。nRF24L01可以在底下三個狀態發生時,向微控器發出中斷訊號:

  • 收到資料
  • 資料已傳送
  • 已達重新傳送次數上限(參閱下文「增强型SchockBurst簡介」)

若微控器(程式)不使用中斷功能,就需要每隔一段時間主動向nRF24L01詢問資料接收和傳送狀態。大多數的Arduino程式範例都沒有使用中斷功能,以本文採用的程式庫為例(參閱下一篇文章介紹),它提供的範例只有兩個以_irq結尾的檔名,才使用中斷機制。

nRF24L01模組外接天線與電波強度

請留意,採用外接天線的模組,通常需要額外的電力給功率放大器,像下圖這一款,根據廠商提供的技術文件指出,它的工作電流峰值(也就是最高值)達115mA,但是Arduino Uno板的3.3V輸出的電流上限為50mA

外接天線類型的nRF24L01模組

因此,使用這類模組時,一定要外接3.3V供電,否則它可能無法正常運作,訊號不穩定。

dBm是電波強度單位,0dBm(0分貝毫瓦)等於1mW(1毫瓦)功率;nRF24L01電波強度最大0dBm,最低-18dBm,電波強度越低,電力消耗越低,覆蓋距離也越短。

附帶一提,FM廣波電台的電波強度為80dBm,等同100kW(100千瓦)功率,覆蓋距離約50公里;一般筆記型電腦的Wi-Fi無線網路卡的電波強度約15dBm(等同32毫瓦)。

電波傳播會受到信號功率、天線設計、擺設位置、環境和天候等影響,依照平方反比定律,電波強度會隨著距離的增加而快速減弱。若排除這些外在因素,理論上:

  • 信號每增強6 dB,覆蓋距離就會加倍。
  • 信號每減弱6 dB,覆蓋距離就被減半。

無線通訊頻道(channel)和通道(pipe)

使用無線電通訊時,兩個設備的通訊頻率必須一致,才能互通。就像FM廣播和收音機,不同電台的電波發射頻率都不一樣,收音機要調整到對應的頻率才能收聽。

FM廣播

nRF24L01在2.4GHz~2.525GHz頻帶,劃分了0~125個頻道,程式可以自由設定使用的頻道,只要發射和接收端所處的頻道相同即可。

nRF24L01的頻道

此外,每個頻道內可容納6個通道(pipe),每個通道可對應一個發射器;一個接收器可接收來自6個發射器的訊號。

nRF24L01的通道

一個頻道內,至少要有一個發射器和一個接收器,才能連線通訊;發射器可以位於0~5任一通道,並且指定一個唯一的位址值。

nRF24L01的通道

小結上述內容,nRf24L01晶片要建立連線,必須:

  • 位於相同的頻道
  • 接收器要知道發射器的通道位址

增强型SchockBurst簡介

設計無線通訊晶片時,工程師必須在電力消耗、傳輸速率(throughput)以及傳輸距離之間取捨。為了降低無線通訊的功耗並提昇傳輸效率,Nordic半導體公司設計了稱為Shockburst(簡稱SB,以下譯作「突發」)的傳輸協定,讓晶片先暫存一定數量的資料,或者達到間隔時間之後,一口氣集中發送全部的暫存資料,而不是來一個發一個,藉以達成設計目標。

負責暫存資料的是晶片內部的FIFO暫存器,FIFO代表First In First Out(先進先出),跟Arduino序列通訊的暫存區概念類似;接收(RX)和傳送(TX)各有一個FIFO。

FIFO暫存器

nRF24系列晶片的硬體具備網路資料連結層(Data Link Layer),其作用包含傳輸流量控制和資料偵錯。除了SB,nRF24L01硬體也內建Enhanced Shockburst(簡稱ESB,以下譯作「增强型突發」)協定處理功能。SB和ESB協定之間的差別,用網路TCP/IP通訊來比喻,SB相當於UDP協定,也就是只顧傳送資料,不管對方是否收到;ESB則像TCP協定,會確認對方是否收到,若等待一段時間(250µs的倍數,最長4000µs)沒得到對方的回應,它將重送資料。nRF24L01最多會重傳15次,之後就放棄了(晶片可向微控器發出中斷告知)。

也就是說,nRF24L01硬體內建SB和ESB處理機制,另一款nRF5x系列晶片則需要透過軟體實作SB或ESB功能。

Posts created 486

25 thoughts on “nRF24L01無線收發器模組與Arduino通訊實驗(一)

  1. 老師你好,我非常喜歡文章中這種配圖的風格.我想請問下這種是有什麽素材庫或者需要什麽軟件才能畫的的麽~~

  2. 你好,最近正好要研究RF的東西與專案
    請問這模組兩顆一定要互相連線才能收訊嗎?
    能否一個自動廣播,多個同時接收 但不等回傳呢

  3. 你好,最近在思考如何利用arduino測距,請問如果藉由nRF24L01測訊號強度從而測距是可行的嗎?

    1. 再請問老師能否用兩片nRF24L01
      一端作為發射
      另一端不接電源當TAG(接收)使用
      來模擬一般RFID或是一般NFC使用
      謝謝

    2. 這不是肯德基
      這不是肯德基
      這不是肯德基(逃)
      了解!謝謝老師抽空回覆!

    1. 這個網誌的多數文章都是書籍補充內容,所以沒有出現在書裡面,包括這篇文章,謝謝!

      thanks,
      jeffrey

  4. 老師您好,我想請問如何在發射端確認接收端是否接收,我需要發射端有像rf24.available()這函式一樣的功能,只是這函式只能在接收端使用,我也不想把接收端改為發射端,然後發送已連接的訊息。
    對於以上問題,請問老師您有什麼建議?

    謝謝老師

    1. 這是《超圖解Arduino互動設計入門》的補充內容,沒有收錄在實體書裡面,謝謝。

  5. 老師您好,最近在研究Mesh的組成,發現nRF24L01也可以組建Mesh,但網路上的都是組建星星狀的Mesh。
    我的問題是,我想使用這個模組搭建Daisy Chain的通訊結構,也就是說假設Arduino+nRF24L01為1個節點,我現在有10個結點的網路結構,想要第1個傳訊息給第2個,第2個節點收到後不回傳給第1個直接傳給第3個節點,再來再傳給第4個節點,第4個收到後傳給第5個節點,以此類推……,請問這個模組是有辦法組成這樣子的通訊結構嗎?如果不行的話老師您有推薦的模組可以達成這種通訊結構嗎?

    謝謝老師,立偉敬上

    1. 我覺得可行呀,但想再了解你的項目應用
      比如,為何 [想要第1個傳訊息給第2個,第2個節點收到後不回傳給第1個直接傳給第3個節點] ???
      只要第1個 msg 的第一位標示自己是1 , 那2轉發成 1 [2] XXXX, 3轉發成 1 [2,3]
      [ ] 內表示已接收過/轉發者

  6. 你好,老師,
    多年前已買你的書
    是你的終實支持者,
    最近想DIY RF24的項目
    已測試,短距離(10米) 無障礙下是沒有問題的.
    但應用場景是 100米內 中途少障礙
    所以想加天線 以保證連接穩定
    想問是否隨便加一款 [2.4G胶棒天线配ipx转sma连接线] 就可以?
    謝謝…

    1. 你可以購買遠距離型的NRF24L01L模組(NRF24L01+PA+LNA),廠商號稱在空曠地區的傳輸距離可達1.1公里,一般情況下約800公尺。

  7. 老師您好:
    這邊可以理解成接收器就是master對嗎?
    2.4G頻帶中共有125個頻道,每個頻道有6個通道,所以共有750種1對1的組合對嗎? 謝謝

    1. 不是,如同上文的例子,它像廣播電台,每個頻道內可容納6個通道(pipe),每個通道可對應一個發射器;一個接收器可接收來自6個發射器的訊號。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top