[WAT-RF259] 2.4GHz 무선 모듈 송수신 일체형

[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 에서 구매하실 수 있습니다.

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다