您現在的位置是:首頁 > 綜合

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

  • 由 創客e工坊 發表于 綜合
  • 2022-04-17
簡介單獨的這個NRF24L01模組自己還不能完成通訊去收發資料,我們需要一個微控制器透過程式設計給它設定,一個當做發射端,另一個當做接收端,這樣才能用來一對一通訊收發資料

燈具遙控開關怎麼配對遙控

大家好,我是阿樂,今天教大家做一個無線遙控開關。

如下圖:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

我想要實現的功能是,遙控端輸出一個高電平或者低電平,接收端也能同時輸出一個高電平或者低電平,這樣就能隔空控制很多東西,也不用拉線佈線。

手頭正好有2。4G模組,型號是NRF24L01,那我們就用它來實現。這個模組也不算貴,如下圖:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

這種外接膠棒天線帶PA放大的也就十塊錢左右,號稱距離可達1100米,當然實際我也沒去試過。

然後更常見更便宜的是板載天線的,體積也更小,價格也就四五塊錢,非常值得入手玩玩。實物如下圖:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

今天我以這個外接膠棒天線帶PA放大的NRF24L01作為例子來給大家講解。先來講講它的引腳,把它反過來,令光滑沒有元器件的一面對著我們,這面就是背面,它的正面有密密麻麻的小小個的元器件。示意圖如下:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

將模組翻過來,看到它的背面,它有兩排排針,如下圖:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

最上面兩個排針,左邊是電源輸入引腳,可輸入3V-3。6V的直流電,推薦是用3。3V。過來右邊是電源地,GND,是電源負極。下來第二排兩個排針,左邊是CSN,右邊是CE。下來第三排兩個排針,左邊MOSI,右邊是SCK。最後一排兩個排針,左邊是IRQ,右邊是MISO。

接下來給大家解釋一下這些引腳對應的功能:

CSN,它是Chip Select Not的縮寫,是接收端選擇引腳, Not代表低電平有效。

CE是Chip Enable的縮寫,是發射/接收狀態選擇引腳。

MOSI是Master Out Slave In的縮寫,主出從入,是控制端輸出,接收端輸入引腳,通常簡寫成MO。

SCK是Serial Clock的縮寫,是時鐘訊號腳。

IRQ是Interrupt Request的縮寫,是中斷請求腳,今天我們不會用到這個腳。

MISO是Master In Slave Out的縮寫,主入從出,是控制端輸入,接收端輸出引腳,通常簡寫成MI。

單獨的這個NRF24L01模組自己還不能完成通訊去收發資料,我們需要一個微控制器透過程式設計給它設定,一個當做發射端,另一個當做接收端,這樣才能用來一對一通訊收發資料。當然它也可以用來設定一對多通訊。

這樣子的話我們就會需要兩個NRF24L01模組,兩個微控制器。微控制器我用Arduino pro mini,如下圖:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

上圖中的這個小東西,它相當於一個小開發板,用它來控制設定NRF24L01模組,別人已經寫有很多庫了,我直接呼叫就可以,就不用去底層設定暫存器,不用什麼都親歷親為,可以省下很多時間,這對於初學者來說很容易上手,可以快速開發,這個就是用Arduino的好處。一會兒我們直接用別人寫好的庫,直接修改例程就得了。

好,看硬體連線,我簡單畫了個接線圖,如下圖:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

Arduino和NRF24L01模組的連線,無論發射端還是接收端都是這樣連。

看到下面發射端的接線圖:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

在發射端我增加了一個按鍵,當按鍵沒按下時,Arduino的D3號腳檢測到的是低電平,因為直接接一個10K電阻到負極了嘛,所以是0。當按鍵按下時,接通5V的直流電到D3號埠,D3號埠又對地接一個10K電阻,所以在埠這裡得到的是高電平,是1。

好,看接收端,如下圖:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

我在接收端的Arduino D3號腳接了一個4。7K歐姆的電阻和8550三極體,用來驅動蜂鳴器。當我們從D3給一個低電平的時候,蜂鳴器就會響起來,蜂鳴器負極的100Ω的電阻是限流電阻。

接下來講一下程式設計思路:當發射端檢測到我按下這個按鍵時,也就是檢測到一個高電平時,就把這個高電平的資料傳送到接收端,接收端接收到這個高電平的資料後就輸出一個低電平,驅動蜂鳴器響起來,否則輸出一個高電平,蜂鳴器不響。在這裡不詳細講2。4G模組的具體設定方式,我只講整體程式的實現過程。

在開始程式設計前我們需要下載一個庫,就是別人編好的函式與例程,到時候方便我們直接呼叫。這個庫可以自己到github去下載,也可以私聊我要,庫名稱是RF24-master,下好後把它丟到我們安裝Arduino這個軟體的根目錄下的libraries資料夾中就可以了。

好,看程式,下圖是發射端的程式:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

紅色方框1中#include是我們要引用的程式庫,把它們包含進來。紅色橫線2是定義Arduino3號引腳把它命名為buttonPin,後面當出現buttonPin的地方說明是要控制3號引腳。往下,紅色橫線3是定義一個整型變數buttonState,用來存放按鍵的鍵值。

看到下面這張圖片:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

紅色橫線1的語句是把7腳設定為CE腳, 8腳設定為CSN腳。紅色橫線2是設定通訊通道地址00001,接下來紅色方框中的是初始化函式,先設定3腳為輸入引腳,啟動nRF24模組,設定通道地址。在這裡多說幾句,nRF24L01模組在2。4GHz~2。525GHz這個頻帶上,在這個頻帶上劃分了0-125個頻道,我們透過程式可以自由設定使用的頻道,只要發射端和接收端所處的頻道相同就可以了。然後每個頻道內可容納6個通道(pipe),每個通道可對應一個發射器;一個接收器可接收來自6個發射器的訊號。一個頻道內,至少要有一個發射器和一個接收器,才能連線通訊。發射器可以位於0-5任一通道,並且指定一個唯一的地址值。接下來是設定廣播功率,設定功率為RF24_PA_MIN,然後停止偵聽,就是設定成發射模式。

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

如上截圖,在迴圈函式中,讀取3號腳的狀態,使用radio。write()函式將資料傳送出去。發射端的完整程式就是這樣,內容並不多。驗證一下,沒問題後選好板子的對應型號,選埠,上傳就完成發射端的程式寫入。

接下來講講接收端的函式,如下圖:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

前面的設定基本是一樣的,不同的是接收端定義3號腳是用來控制蜂鳴器,同樣也定義一個整型變數buttonState,用來存放收到的按鍵的鍵值。這裡設定引腳和通道地址跟前面一樣的,發射端和接收端必須處於同一地址。

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

如上截圖,在初始化函式中,將3腳設定為輸出引腳,將3腳置為高電平,啟動NRF24模組,設定通道地址,設定廣播功率。

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

如上截圖,在迴圈函式中,開始監聽無線廣播,檢查是否有可用的資料傳輸過來,當有資料可用時,我們將讀取它,將其儲存到buttonState中去,if函式判斷,如果發射端按下按鍵了,則輸出低電平,驅動蜂鳴器響起;否則,如果發射端沒有按下按鍵,則保持高電平,蜂鳴器不響。這就是接收端的整個程式,也驗證一下,沒問題後選好板子的對應型號,選埠,上傳就完成了。

最後看一下演示效果圖:

教大家使用NRF24L01做一個無線遙控開關,遠端控制很方便!

在室內測試,訊號傳輸穩定,通訊效果很好;在室外休閒公園裡測試,以發射端為圓心,在大概800米空曠(有一些樹和景觀石的遮擋)的半徑內,訊號傳輸依舊穩定,通訊效果也很好,更遠的距離沒去測試過。

最後附上詳細影片教程:

17:07

好的,我製作這個無線傳輸開關的作用可不是為了遙控這個蜂鳴器而已,我是想把語音識別模組和這個結合起來,對家裡的家電進行遠端無線遙控,這樣我們離智慧生活豈不是又更近了一步?

好啦,本期教程就講這麼多,我們下期再見,拜拜!

Top