목차
[WAT-RF259] 2.4GHz 무선 모듈
원거리 통신이 가능한 저렴한 모듈입니다. 2.4GHz 의 높은 주파수라 수신감도가 좋고 양방향 통신이 가능한 장점도 있습니다.
SPI 방식이라 제어도 복잡하지 않습니다.


핀 번호
| 번호 | 핀명 | 기능 |
|---|---|---|
| 1 | GND | GROUND |
| 2 | VCC | 3.3V 입력 |
| 3 | CE | Chip Enable Activates RX or TX mode |
| 4 | CSN | SPI Chip Select |
| 5 | SCK | SPI Clock |
| 6 | MOSI | SPI Slave Data Input |
| 7 | MISO | SPI Slave Data Output, with tri-state option |
| 8 | IRQ | Maskable interrupt pin. Active low |
Arduino UNO R3 예제
핀 연결
UNO R3 에서 제공하는 3.3V는 전류가 매우 낮아서 별도의 3.3V 모듈(WAT-DC533)을 사용하였습니다.
| 번호 | 2.4GHz 모듈 | Arduino UNO R3 | WAT-DC533 | COLOR |
|---|---|---|---|---|
| 1 | GND | GND | GND | BLACK |
| 2 | VCC | 3.3V를 2.4GHz 모듈에 연결 | RED | |
| 3 | CE | 9 | VIOLET | |
| 4 | CSN | 10 | BROWN | |
| 5 | SCK | 13 | BLUE | |
| 6 | MOSI | 11 | GRAY | |
| 7 | MISO | 12 | BLUE | |
| 8 | IRQ | x |



소스코드
최신 소스코드는 [파일]=>[예제]=> [WhiteAT UNO]=>[RF24_simple] 에 있으며
라이브러리는 아두이노 개발환경 (https://docs.whiteat.com/?page_id=5449)을 참조하세요
한개는 radioNumber 를 0 으로 다른 한개는 radioNumber 1로 합니다.
/*
UNO 와 [WAT-RF259] 2.4GHz 무선 모듈 통신 예제입니다.
개별 부품
.UNO R3 : https://kit128.com/goods/view?no=337
.[WAT-RF259] 2.4GHz 무선 모듈 : https://kit128.com/goods/view?no=259
출처: http://whiteat.com/Arduino
*/
#include <SPI.h>
#include "RF24.h"
// 장치 고유번호 설정 : 한개는 0, 다른 한개는 1
bool radioNumber = 0;
// CE: pin 9
// CSN: pin 10
RF24 radio(9, 10);
/**********************************************************/
// 장치의 주소(이름) 지정
byte addresses[][6] = { "WAT1", "WAT2" };
void setup()
{
Serial.begin(115200);
Serial.println(F("RF24/examples/GettingStarted"));
Serial.println("Arduino Examples - RF24 Simple Test");
Serial.println(" https://docs.whiteat.com/?p=3754");
radio.begin();
// 가까운 거리에서 사용할 때는RF24_PA_LOW
// 먼 거리에서 사용할 때는 RF24_PA_MAX 으로 설정해야 한다.
radio.setPALevel(RF24_PA_LOW);
// 통신에 사용할 파이프라인(즉, 주소) 지정
if (0==radioNumber)
{
Serial.println(F("This is PING part ")); // 요청
radio.openWritingPipe(addresses[1]);
radio.openReadingPipe(1, addresses[0]);
}
else
{
Serial.println(F("This is PONG part ")); // 응답
radio.openWritingPipe(addresses[0]);
radio.openReadingPipe(1, addresses[1]);
}
// 수신 상태로 전환
radio.startListening();
}
void loop()
{
/****************** Ping Out Role ***************************/
if (0 == radioNumber )
{
// 수신대기 상태를 정지
radio.stopListening();
Serial.println(F("Now sending"));
// 현재 시간을 보내고
// 다 보내질때까지 기다린다.
unsigned long start_time = micros();
if (!radio.write(&start_time, sizeof(unsigned long)))
{
Serial.println(F("failed"));
}
// 수신 상태로 전환
radio.startListening();
// 응답을 기다림
// 200ms 동안 응답이 없으면 timeout 처리
unsigned long started_waiting_at = micros();
boolean timeout = false;
while (!radio.available()) // 받은게 없다면
{
if (micros() - started_waiting_at > 200000)// 200mS 동안 받은게 없다면
{
timeout = true;
break;
}
}
if (timeout) // timeout이라면
{
Serial.println(F("Failed, response timed out."));
}
else
{
// 응답 시간을 표시
unsigned long got_time;
radio.read(&got_time, sizeof(unsigned long));
unsigned long end_time = micros();
Serial.print(F("Sent "));
Serial.print(start_time);
Serial.print(F(", Got response "));
Serial.print(got_time);
Serial.print(F(", Round-trip delay "));
Serial.print(end_time - start_time);
Serial.println(F(" microseconds"));
}
// 1초 대기
delay(1000);
}
/****************** Pong Back Role ***************************/
if (0 != radioNumber)
{
unsigned long got_time;
// 수신데이터가 있으면
if (radio.available())
{
while (radio.available())
{
radio.read(&got_time, sizeof(unsigned long)); // 데이터 읽기
}
radio.stopListening(); // 수신대기 상태를 정지
radio.write(&got_time, sizeof(unsigned long)); // 응답 시간을 보냄
radio.startListening(); // 수신 상태로 전환
Serial.print(F("Sent response "));
Serial.println(got_time);
}
}
} // Loop

결과
한 쪽 보드에서 데이터를 보내면 다른 쪽에서 응답을 보냅니다.

제품 구매
Arduino UNO R3 는 https://kit128.com/goods/view?no=337 에서
[WAT-RF259] 2.4GHz 무선 모듈은 https://kit128.com/goods/view?no=259 에서 구매하실 수 있습니다.
