<목표>
- 아두이노의 무선 통신의 대표는 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 로 선택해야 된다는 것이다.
※ 궁금하시거나 질문사항이 있으시면 댓글로 작성해주시면 답변해 드릴 수 있는 부분에서 친절히 답변드리겠습니다!
'코딩 > 아두이노' 카테고리의 다른 글
아두이노 LCD 1602 4핀(I2C제어) 디스플레이 사용하는 방법 (0) | 2021.03.14 |
---|---|
아두이노 nRF24L01 양방향 통신 (0) | 2021.03.14 |
모터드라이버 L298N 5V로 모터 제어하기 (13) | 2021.03.11 |
아두이노 타이머 카운터 인터럽트 사용하는 방법 CTC모드 (4) | 2021.02.23 |
아두이노 버튼 노이즈를 제거해보자, Debounce 이해하기 (0) | 2020.12.23 |
댓글