상대적으로 짧은 단거리(공개된 곳에서 10m미만)를 커버하는 433/315Mhz 저가의 부품을 사용해 근거리 통신을 구현
▶ 이 가이드를 따라하면,
- 두 개의 아두이노가 서로 무선으로 근거리(100m미만)에서 단방향 통신하는 기능을 구현한다
- 433Mhz MX-V5 와 VirtualWire 라이브러리를 사용해 통신할 수 있다.
▶ 먼저 읽으면 좋은 글
- 라이브러리 설치 방법 : http://bbangpan.tistory.com/1
▶ 부품 설명 및 회로 구성
아두이노의 매력은 무선 네트워크를 다루면서 가치가 더욱 커진다. 1천원 수준에서 구현할 수 있는 통신 방법은 IR통신(적외선 리모콘)외에 이 433/315Mhz 무선 통신 모듈을 구현하는 방법이 있다. 433/315Mhz는 자동차 무선 시동 및 락 등에 사용되는 무선 주파수 영역이다. 그림의 부품이 송신/수신 한 쌍인데 Aliexpress에서는 한 쌍에 천원 미만으로 판매되고 있어 손쉽게 무선 통신을 구현할 수 있다. 양방향이 아닌 단방향의 전송만 가능하지만 센서 정보를 수집하는 것은 가능하고, 하나의 송신기가 뿌려주면 다수의 수신기에서 신호를 잡을 수 있다.
모듈의 ANT라고 씌인 빈 구멍에 30cm정도의 전선을 안테나에 납땜해주면(송/수신 모두), 통신 거리는 대략 집안 정도의 거리와 벽을 커버 할 수 있고, 안테나 없이도 방안에서는 통신이 가능하다. 유사 부품이 많은데 여기서는 XY-MK-5V라는 수신 모듈과 XY-FS라는 송신 모듈을 기준으로 설명한다. 5~40mW이하 정도의 저전력으로 작동하며 433 와 315Mhz 두가지 모듈이 존재하는데, 둘 차이는 주파수 외에는 없는 것으로 알려져있다.
송수신 거리는 야외 100m라고 하지만 실제로는 몇m정도여서, 안테나 없이는 1m 정도를, 안테나를 적절히 달아주면 10~20m정도 통신이 가능하다. (해당 모듈의 단순 테스트 용도 이외의 사용에는 반드시 전파규제-출력 및 용도-에 적합한지 확인이 필요하다.)
< XY-FS(송신/3핀), XY-MK-5V(수신/4핀) 433Mhz 무선 통신 모듈>
기본적으로 무선 통신은 1과 0을 빠르게 전환하면서 정보를 실어 주파수에 담아 송신측이 발사하면 수신측에서 이를 동기화하여 받아 해석하여 통신할 수 있다. 따라서 이 복잡한 과정을 직접 구현하는 방법이 있지만, VirtualWire라는 라이브러리를 통해 손쉽게 구현이 가능하다. 여기서는 해당 라이브러리 사용을 가정한다.
<송신회로 구성/5V,GND,DATA(기본 12핀) 세 종류 핀을 연결한다>
<수신회로 구성/5V,GND,DATA(GND 옆, 기본 11핀) 세 종류 핀을 연결한다>
▶ 소스 코드 입력 및 구동
라이브러리는 VirtualWire: http://www.airspayce.com/mikem/arduino/VirtualWire/index.html 를 사용한다. Arduino 기본 IDE 강좌(http://bbangpan.tistory.com/1 )를 참조로 해당 라이브러리 zip을 다운받아 아두이노설치폴더/libraries/VirtualWire/* 에 해당 소스들과 examples폴더가 위치하도록 한다.
아래는 송수신 모듈을 각기 표기하였다. 데이터핀의 경우는 내부 코드를 조절하여 변경 가능하다(디폴트로는 기본 핀이 선택됨)
송신 모듈 소스 원본 GitHub 링크 : https://github.com/bbangpan/bbangpan.com/blob/master/neibc_433_315mhz_trans/neibc_433_315mhz_trans.ino
http://www.bbangpan.com ----------------------------------
/* Originally posted on www.bbangpan.com
Program Description: 433/315Mhz transmitter(FS1000A or XY-FS) test code
Needed library : VirtualWire http://www.airspayce.com/mikem/arduino/VirtualWire/index.html
DataPin : 12 to 433/315Mhz transmitter DATA(near GND)
Tested on : Arduino 1.0.6, Arduino UNO R3, VirtualWire
Inspired by http://www.buildcircuit.com/how-to-use-rf-module-with-arduino/
Copyright (c) 2015 www.bbangpan.com. All rights reserved.
This program can be used for any non-commercial purpose freely. */
#include <VirtualWire.h>
const int TX_DIO_Pin = 12; // default 12
void setup()
{
vw_set_tx_pin(TX_DIO_Pin); // Initialize TX pin
vw_setup(2000); // Transfer speed : 2000 bits per sec
}
void loop()
{
send("Bbangpan!");
delay(1000);
}
void send (char *message)
{
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx(); // Wait until the whole message is gone
}
-------------------------------------------------------
수신 모듈 소스 원본 GitHub 링크 : https://github.com/bbangpan/bbangpan.com/blob/master/neibc_433_315mhz_recv/neibc_433_315mhz_recv.ino
http://www.bbangpan.com -----------------------------
/* Originally posted on www.bbangpan.com
Program Description: 433/315Mhz receiver(XY-MK-5V) test code
Needed library : VirtualWire http://www.airspayce.com/mikem/arduino/VirtualWire/index.html
DataPin : 11 to 433/315Mhz receiver DATA
Tested on : Arduino 1.0.6, Arduino UNO R3, VirtualWire
Inspired by http://www.buildcircuit.com/how-to-use-rf-module-with-arduino/
Copyright (c) 2015 www.bbangpan.com. All rights reserved.
This program can be used for any non-commercial purpose freely. */
#include <VirtualWire.h>
byte message[VW_MAX_MESSAGE_LEN]; // a buffer to store the incoming messages
byte messageLength = VW_MAX_MESSAGE_LEN; // the size of the message
const int RX_DIO_Pin = 11; // default 11
void setup()
{
Serial.begin(9600);
Serial.println("Ready to receive:");
vw_set_rx_pin(RX_DIO_Pin); // Initialize RX pin
vw_setup(2000); // Transfer speed : 2000 bits per sec
vw_rx_start(); // Start the receiver
}
void loop()
{
if (vw_get_message(message, &messageLength)) // Non-blocking
{
Serial.print("Received: ");
for (int i = 0; i < messageLength; i++)
{
Serial.write(message[i]);
}
Serial.println();
}
}
-------------------------------------------------------
이렇게 구동하고 나서 각각의 송/수신 Arduino에 업로드 하고, receive모듈의 시리얼 모니터를 구동(Arduino IDE에서 Ctrl+Shift+M)하면 아래와 같이 일정 간격으로 신호를 받는 것을 확인할 수 있다.
<수신 모듈 탑재 Arduino에서 시리얼 모니터 통신 화면>
간단하게 두 아두이노 간의 통신이 되었다. 다음 회차에서는 이를 응용하여 온/습도 정보를 무선으로 송/수신하는 아두이노를 만들어보자.
▶ 구매 가이드
433/315Mhz 송수신 모듈 : http://www.aliexpress.com/item/RF-wireless-receiver-module-transmitter-module-board-for-arduino-super-regeneration-315-433MHZ-DC5V-ASK-OOK/1446556872.html
433Mhz Spring 안테나 : http://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20150816080748&SearchText=433+spring+antenna
(위 설명한 안테나보다 성능이 다소 낮으나 크기가 작아 그냥 쓰는것보다는 낫다)
해외 직구 사이트에서433 arduino RF로 검색하면 구매 가능하다.
▶ 강의 키워드
아두이노 무선 통신, 433/315Mhz 무선통신, XY-FS, XY-MK-5V, 아두이노 RF
'아두이노 통신' 카테고리의 다른 글
[통신모듈/HC-12] 저렴하고 긴 거리 통신이 가능한 HC-12 (4) | 2020.08.22 |
---|---|
[네트워크/이더넷쉴드] W5200, W5100 칩셋을 쓴 이더넷 쉴드(Ethernet Shield)로 유선랜을 써보자 (0) | 2015.10.18 |
[통신/GPS] 위도 경도 값을 불러와 활용하는 GPS(NEO-6M) 모듈을 구동해보자 (5) | 2015.06.15 |
[통신/근거리고속] 2.4Ghz 양방향 통신을 nRF24L01 모듈로 구현하자 (11) | 2015.05.22 |
[통신/중단거리] 중단거리 양방향 통신이 가능한 serial 기반의 손쉬운 네트워크 모듈 APC220 (4) | 2015.04.10 |
[통신/WiFi] WiFi 모든 것을 활용하는 Arduino WiFi Shield (CC3000) (17) | 2015.03.24 |
[통신/WiFi] 저가로 WiFi를 구현할 수 있는 모듈(ESP8266) (10) | 2015.03.22 |
[통신/BLE] BLE / iBeacon을 아두이노에서 구현하게 해주는 HM-10 (18) | 2015.03.13 |
[통신/블루투스] Bluetooth 2.0을 구현하는 HC-06모듈, 스마트폰과 아두이노 연동 (7) | 2015.02.16 |