本文僅在說明此模組的基本應用---基本發射與接收,後續將會說明如何製作一個可供麥克納姆輪遙控車使用的無線遙控發射、接收器,詳 https://pizgchen.blogspot.com/2020/01/rf-nrf24l01-24ghz.html。
準備材料
請準備 Arduino Uno(或 Nano) 開發板和 nRF24L01 模組各 2 組。
其中一組作為發射端,另一組作為接收端。
電路接線
在電路接線前請務必先認識模組的腳位,如下圖
腳位 | 說明 |
VCC | 3.3V |
GND | Ground |
CE | Chip Enable Tx/Rx |
CSN | Chip Select Node |
SCK | SPI ClocK |
MISO | Master In Slave Out (Send) |
MOSI | Master Out Slave In (Receive) |
IRQ | Interrupt ReQuest |
接線:
Arduino nRF24L01
3.3V(註1) VCC
GND GND
D8 CSN
D7(註2) CE
D11 MOSI
D12 MISO
D13 SCK
(不接) IRQ
註1:提醒您,此模組的電壓是 3.3V,切記不可接到5V。
註2:經實驗,如果依照下圖把 nRF24L01 的 CE 脚位接到 Arduino 的 D9 腳位,將無法運作。因此將腳位改接到 D7。
安裝程式庫
Step1 點擊 Arduino IDE 裡的下拉功能表 Sketch > Include Library > Manage Libraries...
Step2 在右上角落欄位裡輸入 nRF24L01
Step3 將滑桿往下拉找到「RF24」,並點擊「Install」鈕安裝它。
程式
發射端程式和接收端程式需要分別上傳到兩組 Arduino。如果您是使用同一部電腦連接兩組 Arduino,請注意在上傳程式前要切換 COM Port。
(以下程式碼摘自小狐狸事務所)
發射端程式:
//nRF24L01_Sender.ino
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); //指定 Arduino Nano 腳位對應 nRF24L01 之 (CE, CSN)
const byte address[6] = "00001"; //節點位址為 5 bytes + \0=6 bytes
int counter = 0; //Hello 計數器
void setup() {
Serial.begin(9600);
radio.begin(); //初始化 nRF24L01 模組
radio.openWritingPipe(address); //開啟寫入管線
radio.setPALevel(RF24_PA_MIN); //設為低功率, 預設為 RF24_PA_MAX
radio.stopListening(); //傳送端不需接收, 停止傾聽
}
void loop() {
const char text[32]; //宣告用來儲存欲傳送之字串
sprintf(text, "Hello World %d", counter); //將整數嵌入字串中
Serial.println(text);
radio.write(&text, sizeof(text)); //將字串寫入傳送緩衝器
++counter;
delay(1000);
}
接收端程式:
//nRF24L01_Receiver.ino
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <printf.h>
RF24 radio(7, 8); //指定 Arduino Nano 腳位對應 nRF24L01 之 (CE, CSN)
const byte address[6] = "00001"; //節點位址為 5 bytes + \0=6 bytes
void setup() {
Serial.begin(9600);
radio.begin(); //初始化 nRF24L01 模組
printf_begin(); //初始化 RF24 的列印輸出功能
radio.openReadingPipe(0, address); //開啟 pipe 0 之讀取管線
radio.setPALevel(RF24_PA_MIN); //設為低功率, 預設為 RF24_PA_MAX
radio.startListening(); //接收端開始接收
radio.printDetails(); //印出 nRF24L01 詳細狀態
Serial.println("NRF24L01 receiver");
Serial.println("waiting...");
}
void loop() {
if (radio.available()) { //偵測接收緩衝器是否有資料
char text[32] = ""; //用來儲存接收字元之陣列
radio.read(&text, sizeof(text)); //讀取接收字元
Serial.println(text);
}
}
發射端和接收端程式都上傳後,請開啟接收端的 Serial Monoitor (記得要切換到正確的 COM Port),將 Baud 調到 9600,如此您就可以看到如下圖,表示成功收發資料。
相關網頁
小狐狸事務所 http://yhhuang1966.blogspot.com/2017/10/arduino-nrf24l01.html
Wireless & IoT https://lastminuteengineers.com/nrf24l01-arduino-wireless-communication/
採購資訊
1100M nRF24L01+PA+LNA 無線通訊模組 https://goods.ruten.com.tw/item/show?21934545524992
沒有留言:
張貼留言