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功能。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *