본문 바로가기

Arduino

NRF24L01 통신하기

2가지 종류의 모듈을 가지고 있습니다. 오른쪽은 송수신 증폭기, 외부 안테나가 추가된 모델입니다. 아무래도 왼쪽제품보다 성능은 좋지만 가격도 상대적으로 비쌉니다.



NRF24L01은 3.3V로 입력 받는데 송수신 신호에 높은 전류가 필요해서 10uf 캐퍼시터를 vcc-ground에 연결하거나 아니면 아래의 사진처럼 AMS1117을 이용한 전용 어댑터 장치를 사용해야 합니다.



http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo

https://github.com/moggiex/NRF24L01-PA-LNA-Testing-Scripts

https://maniacbug.github.io/RF24/index.html

위 링크에 유용한 정보가 많이 있습니다.

두개의 NRF24L01로 통신하는거에 대해 알아봅니다. 한쪽에서 버튼 누르면 다른 한쪽에서 불이 켜지는 걸 만들어 보려고 합니다. 연결은 아래와 같습니다.

Pin 1 – Ground to Ground
Pin 2 – VCC to your 5V supply (어댑터 사용시입니다)
Pin 3 – CE (somtimes called SS) to pin 9
Pin 4 – CSN to pin 10
Pin 5 – SCK to pin 13
Pin 6 – MOSI to pin 11
Pin 7 – MSIO to pin 12

Pin 8 – Unused (it’s an interupt)



송신쪽 코드입니다. 두개의 버튼으로 하나는 on이고 다른 하나는 off신호를 보냅니다. 버튼은 5번, 6번 핀에 연결되어 있습니다.


수신쪽은 on/off 신호 받으면 6번 핀에 연결된 led 에 신호를 보냅니다.

// Load in the libraries
#include 
#include 
#include 
#include  
 
// Set the CE & CSN pins
#define CE_PIN   9
#define CSN_PIN 10
 
// This is the address used to send/receive
const byte rxAddr[6] = "00001";
 
// Create a Radio
RF24 radio(CE_PIN, CSN_PIN); 
 
const byte ON_PIN = 5, OFF_PIN = 6;
 
Button onBtn(ON_PIN), offBtn(OFF_PIN);    // define the buttons
const char onMsg[] ="on";
const char offMsg[] ="off";
 
void setup() {
 
  onBtn.begin();
  offBtn.begin();
  // Start up the Serial connection
  while (!Serial);
  Serial.begin(9600);
  
  // Start the Radio!
  radio.begin();
  
  // Power setting
  radio.setPALevel(RF24_PA_HIGH); // RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  
  // Slower data rate for better range
  radio.setDataRate( RF24_250KBPS ); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS
  
  // Stop listening, so we can send! 
  radio.stopListening();
 
  // Number of retries and set tx/rx address
  radio.setRetries(15, 15);
 
  radio.openWritingPipe(rxAddr);
}
 
void loop() {
  onBtn.read();
  offBtn.read();
 
  if (onBtn.wasPressed()) 
  {
    radio.write(onMsg, sizeof(onMsg));
    Serial.println(onMsg);
  }
  if (offBtn.wasPressed()) 
  {
    radio.write(offMsg, sizeof(offMsg)); 
    Serial.println(offMsg);
  }
  // Wait a short while before sending the other one
  delay(100);
 
}

// Load up the libraries
#include 
#include 
#include 
 
// define the pins
#define CE_PIN   9
#define CSN_PIN 10
 
// Create a Radio
RF24 radio(CE_PIN, CSN_PIN); 
 
// This is the address used to send/receive
const byte rxAddr[6] = "00001";
 
const int led = 6;
int ledState = 0;
char onMsg ="on", offMsg="off";
void setup()
{
  pinMode(led, OUTPUT);
  // Start the serial
  Serial.begin(9600);
  while(!Serial);
  Serial.println("NRF24L01P Receiver Starting...");
  
  // Start the radio
  radio.begin();
 
  // Power setting
  radio.setPALevel(RF24_PA_HIGH);   // RF24_PA_MIN ,RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
  radio.setDataRate( RF24_250KBPS ); // RF24_250KBPS, RF24_1MBPS, RF24_2MBPS
  
  // Set the reading pipe and start listening
  radio.openReadingPipe(0, rxAddr);
  radio.startListening();
  
}
 
void loop()
{
  if (radio.available())
  {
    // the buffer to store the received message in
    char text[10] = {0};
    
    // Now read the message, old examples have done = radio.read(), that doesn't work anymore!!!
    radio.read(&text, sizeof(text));
    
    // Print the message out to the COM window
    Serial.println("Received Message: ");
    Serial.print(text);
    Serial.println("");
 
    // Check Msg
    String str(text); 
    if (str == "on") //(text[1] == 110) //n
    {
      ledState = 1; 
      Serial.println("LED ON");
    }
    if (str == "off") //(text[1] == 102) //f
    {
      ledState = 0; 
      Serial.println("LED OFF");
    }
  } 
  digitalWrite(led, ledState);
}

'Arduino' 카테고리의 다른 글

FM Radio Player  (0) 2019.01.08
Arduino Mega Camera  (0) 2019.01.08
NRF24L01 다중연결 통신  (0) 2019.01.08
74HC595 쉬프트 레지스터 사용하기  (0) 2019.01.08
IR Remote Test  (0) 2019.01.08