본문 바로가기
코딩/아두이노

아두이노 nRF24L01 모듈로 무선통신 하는 방법

by DIYver 2021. 3. 13.

 

<목표>

 

 

- 아두이노의 무선 통신의 대표는 WiFi, Bluetooth, RF통신 이 있다.

이 중에서 이번에는 RF통신을 다뤄보도록 한다.

 

 

RF란?

Radio Frequency로, 직역하면 무선 주파수 이며,

곧 주파수를 통한 통신을 뜻한다.

 

nRF24L01 이란

2.4gHz의 주파수를 사용하는 무선통신 모듈 중 하나이다.

대표적인 RF통신 모듈이고, 1:N 통신에 많이 사용한다.

단방향 통신이 주된 사용 방법이지만, 양방향 통신도 가능하다.

 

nRF24L01 은 무선 통신 가능 거리가 짧게는 5m 정도에서 1~2km 까지도 된다.

보통의 유통되는 아두이노용 nRF24L01 는 길어야 200m 라고 봐야한다.

 

 


<준비물>

 

 

- 아두이노, nRF24L01 모듈 2세트

 

 

 

필자의 경우에는 아두이노 나노와 nRF24L01 모듈이 합쳐져있는 보드를 사용 중이라 설명이 부족한 부분이 있을지도...


<회로도>

 

회로도는 딱히 없고

nRF24L01 의 핀에 아두이노 핀을 잘 연결해주면 된다.

필자가 올린 예제 코드를 그대로 사용하려면 위의 표에 따라서 핀을 연결해주면 된다.

 

 

 


<코드>

 

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(10, 9); // SPI 버스에 nRF24L01 라디오를 설정하기 위해 CE, CSN를 선언.
const byte address[6] = "00001"; //주소값을 5가지 문자열로 변경할 수 있으며, 송신기와 수신기가 동일한 주소로 해야됨.
void setup() {
  radio.begin();
  radio.openWritingPipe(address); //이전에 설정한 5글자 문자열인 데이터를 보낼 수신의 주소를 설정
  radio.setPALevel(RF24_PA_MIN); //전원공급에 관한 파워레벨을 설정합니다. 모듈 사이가 가까우면 최소로 설정합니다.

//거리가 가까운 순으로 RF24_PA_MIN / RF24_PA_LOW / RF24_PA_HIGH / RF24_PA_MAX 등으로 설정할 수 있습니다.

//높은 레벨(거리가 먼 경우)은 작동하는 동안 안정적인 전압을 가지도록 GND와 3.3V에 바이패스 커패시터 사용을 권장함. 

  radio.stopListening();  //모듈을 송신기로 설정
}
void loop() {
  const char text[] = "Hello World";
  radio.write(&text, sizeof(text)); //해당 메시지를 수신자에게 보냄
  delay(1000);
}

송신부 코드 - 메카솔루션 코드 일부 수정

 

 

 #include <SPI.h> 

#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(10, 9); // SPI 버스에 nRF24L01 라디오를 설정하기 위해 CE, CSN 선언.
const byte address[6] = "00001"; //주소값을 5가지 문자열로 변경할 수 있으며, 송신기과 수신기가 동일한 주소로 해야됨.
void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN); //전원공급에 관한 파워레벨을 설정합니다. 모듈 사이가 가까우면 최소로 설정합니다.

//거리가 가까운 순으로 RF24_PA_MIN / RF24_PA_LOW / RF24_PA_HIGH / RF24_PA_MAX 등으로 설정할 수 있습니다.

//높은 레벨(거리가 먼 경우)은 작동하는 동안 안정적인 전압을 가지도록 GND와 3.3V에 바이패스 커패시터 사용을 권장함
  radio.startListening(); //모듈을 수신기로 설정
}
void loop() {
  if (radio.available()) {
    char text[32] = "";
    radio.read(&text, sizeof(text));
    Serial.println(text);
  }
}

수신부 코드 - 메카솔루션 코드 일부 수정

 

 

 

 

 

 

 

 

 

 

 

 

 

 

나노 + nRF24L01 원보드의 경우 핀맵에 따라서 통신에 사용해야 할 핀이 정해져 있다.

SPI 통신을 위해서 nRF24L01 의 CE핀과 CSN을 사용자가 선택을 해주어야하는데,

원보드의 경우 CE핀은 D10, CSN핀은 D9에 연결되어 있다.

 

 

 

 


<실행 결과>

수신부 아두이노의 시리얼모니터를 보면 문자가 정상적으로 계속 수신되는 것을 확인할 수 있다.

 

중요한 것은 Both NL & CR 로 선택해야 된다는 것이다.

 

 


※ 궁금하시거나 질문사항이 있으시면 댓글로 작성해주시면 답변해 드릴 수 있는 부분에서 친절히 답변드리겠습니다!

 

 

 

 

댓글