2019.04.12

아두이노와 RF 433MHz 모듈을 활용하여 무선통신 구성하기
arduino RF

개발환경

  • 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


다운로드 받은 RadioHead 폴더를 Arduino.app(아두이노 프로그램 폴더)의 libraries 폴더 아래에 넣어줍니다.

  • 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가 켜지는 것도 확인할 수 있습니다.