본문 바로가기

nRF24L01 모듈을 단방향 동작 테스트

by rudals.kim 2021. 9. 29. 댓글 개
반응형

nRF24L01은 2.4GHz를 사용하여 무선으로 대략 데이터를 1~2Mbps 속도로 전송 및 수신할 수 있는 싱글칩입니다.

칩 관련 자세한 내용은 아래 첨부된 데이터 시트를 참고하시기 바랍니다.

nRF24L01_prelim_prod_spec_1_2.pdf
0.44MB

nRF24L01 모듈을 사용하여 단방향 동작 테스트를 해 보았습니다.

조심해야 할 점은 nRF24L01 모듈은 데이터 시트에 허용 전압 범위가 +1.9~3.6V를 사용해야 합니다. 그런데 인터넷에서 nRF24L01 모듈 사용을 검색해 보면 +5V를 사용하는 아두이노 우노와 연결하여 테스트된 게시글이 많이 보입니다. +3V에서 동작되는 모듈을 어떻게 +5V에서 사용할 수 있는지 궁금하여 좀 더 찾아보니 데이터 시트에 '5V tolerant signal input pads'이라고 나와 있어서 아두이노 우노와 바로 연결하여 사용 가능한 것으로 보입니다.

테스트는 ATmega328p/+3.3V/8MHz를 사용하는 아두이노 프로 미니 보드 2개를 사용하여 테스트되었습니다.

아래와 같이 회로를 2개를 구성하여 각 각 송/수신용으로 사용하였습니다.

nRF24L01은 아래 핀맵을 참고하시면 됩니다.

아두이노 프로 미니는 아래 붉은색 핀맵을 참고하시면 됩니다.

아래는 제가 테스트용으로 구성된 이미지입니다. 왼쪽은 송신용, 오른쪽은 수신용입니다.

아두이노의 라이브러리 매니저에서 RF24로 검색을 한 후 설치를 합니다.

송신용 코드를 아래와 같이 작성하였습니다.

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8);

const byte rxAddr[6] = "2Node"; //PIPE
char buf[20];
unsigned long payload = 0;

void setup()
{
    Serial.begin(115200);
    Serial.println("nRF24L01 Transmitter testing...");
        
    if (!radio.begin()) {
      Serial.println(F("radio hardware is not responding!!"));
      while (1) {} // hold in infinite loop
    }
    radio.setRetries(15, 15);
    radio.openWritingPipe(rxAddr);    
    radio.stopListening();
}

void loop()
{
    radio.write( &payload, sizeof(unsigned long) );
    payload++;    
    delay(1000);
}

 

수신용 코드를 아래와 같이 작성하였습니다.

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7, 8);

const byte rxAddr[6] = "2Node";
unsigned long payload = 0;

void setup()
{
  Serial.begin(115200);
  Serial.println("nRF24L01 Receiver testing...");
    
  if (!radio.begin()) {
    Serial.println(F("radio hardware is not responding!!"));
    while (1) {} // hold in infinite loop
  }

  radio.openReadingPipe(0, rxAddr);  
  radio.startListening();
}

void loop()
{
  if (radio.available())
  {
    radio.read( &payload, sizeof(unsigned long) );    
    Serial.println(payload);
  }
}

 

각 각의 아두이노 프로 미니 보드에 송신용 및 수신용 코드를 업로드합니다.

아두이노 IDE 창을 모두 닫아 COM 포트의 사용을 종료합니다.

Tera Term Pro라는 프로그램을 사용하여 각 각의 아두이노 프로 미니가 연결된 COM 포트를 연결합니다.

 

송신쪽 창에서는 "nRF24L01 Transmitter testing..."이라는 메시지가 보여지고 payload 변수를 +1씩 증가시키면서 Air로 전송되기 시작하고 수신쪽 창에서는 "nRF24L01 Receiver testing..."이라는 메시지가 보여지며 수신된 payload 값을 보여줍니다. 수신된 값이 1초마다 +1씩 증가된 값이 수신되는 것으로 보아 모듈이 정상적으로 송/수신됨을 알 수 있습니다.

 

반응형

댓글