개발환경
- MacOS 10.14
- Arduino.app
준비물
- Arduino UNO 2개
- RF 433MHz 송신기(Transmitter) 1개, 수신기(Receiver) 1개
- Breadboard 1개
- LED Green, Yellow, Red
- 저항 220Ω 3개
- RadioHead Library
RadioHead 라이브러리 준비하기
다음 링크를 클릭하여 바로 다운로드 할 수 있습니다. http://www.airspayce.com/mikem/arduino/RadioHead/RadioHead-1.89.zip
또는 아래 URL에서 RadioHead 라이브러리를 다운로드할 수 있습니다. https://www.airspayce.com/mikem/arduino/RadioHead/index.html
- MacOS: ~/Documents/Arduino/libraries/
- Windows: My Documents\Arduino\libraries\
아두이노와 RF 433MHz 송신기 연결하기
아두이노에 RF 433MHz 송신기를 연결할 차례입니다.
1. 연결하기
아래 그림과 같이 매우 간단하게 아두이노와 송신기를 연결할 수 있습니다.
12 | DATA |
---|
2. 소스코드 업로드
Arduino.app을 열고 아래의 소스코드를 아두이노에 업로드합니다.
#include <RH_ASK.h>
#include <SPI.h> // Not actually used but needed to compile
#include <time.h>
RH_ASK driver;
void setup()
{
Serial.begin(115200); // Debugging only
if (!driver.init())
Serial.println("init failed");
srand(time(NULL));
}
void loop()
{
int randnum = rand();
int modnum = randnum % 3;
if (modnum == 0) { // send red
const char *msg = "red";
if (driver.send((uint8_t *)msg, strlen(msg))) {
driver.waitPacketSent();
Serial.println(msg);
}
else {
Serial.println("Failed to send a message...");
}
}
else if (modnum == 1) { // send green
const char *msg = "green";
if (driver.send((uint8_t *)msg, strlen(msg))) {
driver.waitPacketSent();
Serial.println(msg);
}
else {
Serial.println("Failed to send a message...");
}
}
else { // send yellow
const char *msg = "yellow";
if (driver.send((uint8_t *)msg, strlen(msg))) {
driver.waitPacketSent();
Serial.println(msg);
}
else {
Serial.println("Failed to send a message...");
}
}
delay(1000);
}
송신 아두이노는 green, yellow, red 글자 중 하나를 1초에 한번씩 무작위로 보냅니다.
아두이노와 RF 433MHz 수신기 연결하기
다른 아두이노에 RF 433MHz 수신기를 연결할 차례입니다.
1. 연결하기
11 | DATA |
---|
2. LED 추가하기
송신기에서 받은 데이터를 받아서 LED로 출력하기위해 GREEN, YELLOW, RED LED를 수신아두이노와 연결합니다.
3. 소스코드 업로드
Arduino.app에서 [File > New]로 새 파일을 만들고 아래의 소스코드를 아두이노에 업로드합니다.
#include <RH_ASK.h>
#include <SPI.h> // Not actualy used but needed to compile
RH_ASK driver;
int ledRed = 3;
int ledYellow = 5;
int ledGreen = 6;
void setup()
{
Serial.begin(115200);
if (!driver.init()) {
Serial.println("init failed");
} else {
Serial.println("init success!");
}
pinMode(ledRed, OUTPUT);
pinMode(ledYellow, OUTPUT);
pinMode(ledGreen, OUTPUT);
}
void loop()
{
uint8_t buf[50];
memset(buf, 0, 50);
uint8_t buflen = sizeof(buf);
if (driver.recv(buf, &buflen))
{
digitalWrite(ledRed, LOW);
digitalWrite(ledYellow, LOW);
digitalWrite(ledGreen, LOW);
int i;
String message = (char*)buf;
Serial.print("Message: ");
Serial.println(message);
if (message.equals("red")) {
digitalWrite(ledRed, HIGH);
} else if(message.equals("yellow")) {
digitalWrite(ledYellow, HIGH);
} else if(message.equals("green")) {
digitalWrite(ledGreen, HIGH);
}
}
delay(100);
}
결과 화면
수신 아두이노에서는 송신 아두이노로부터 받은 글자를 시리얼모니터에 출력합니다. 또한 글자 색깔에 해당하는 LED가 켜지는 것도 확인할 수 있습니다.