이번 포스팅에서는 433MHz 무선통신 모듈 사용에 대해 전해드리겠습니다.


우선 보통 무선통신 모듈 하면 블루투스나 와이파이가 가장 흔히 사용이 되는데, 아무래도 통신거리에 제한이 많기때문에 원거리 조종이  필요한 경우에는 RF 모듈을 사용하죠.


이번에 사용할 모듈스펙을 볼까요? 

모듈명 : AS07-M1101S (중국 카피제품인듯 합니다ㅎㅎ 'CC1101 Module' 로 검색하시면 자료를 더 찾으실 수 있어요!)

RF주파수 : 420 ~ 450MHz

통신 거리 : ~ 1Km

인가 전압 : 1.8 ~ 3.6V

가동 온도 : -40 ~ 85 

데이터 전송 속도 : ~ 500Kb/s

소모 전류 : ~17mA(수신), ~30mA(송신)


이 모듈을 이용하면 최장 1km가 떨어진 거리에서도 데이터 송수신이 가능하다고 합니다...!!

(하지만 장애물이 있는 실내의 경우 테스트결과 100~200m 만 넘어가도 데이터 송수신이 원활하지가 않더라구요...ㅠㅠ)



이번엔 아두이노 보드 2개와 433MHz 통신모듈 2개로 각각 송신기기, 수신기기를 만들어보겠습니다.


우선 핀배치가 1.27pitch여서 기존 빵판(2.54 pitch)에 사용할수 없기때문에 손수 납땜을 통해 와이어링을 했습니다.


납땜에 자신이 없으신 분은 1.27pitch 에서 2.54pitch로 변환해주는 보드를 구매하시거나, 1.27pitch의 PCB 만능기판에 납땜하셔서 1칸씩 건너뛰어 와이어링 하시면 2.54pitch에 맞게 사용하실 수 있어요^^



자 이제 전선도 뽑아냈으니, 아두이노와 연결해볼까요~?


우선 본 무선통신 모듈은 아두이노와 연결되어 SPI통신을 통해 데이터를 주고받습니다.

SPI통신이란 Serial Peripheral Interface의 줄임말로, 모토로라에서 고안해낸 통신방식입니다.

이 통신은 하나의 Master 모듈과 여러개의 Slave 모듈이 연결되는 (Peripheral) 방식의 통신으로, 


MISO (Master Input Slave Output) : Master기준 입력신호

MOSI (Master Output Slave Input) : Master기준 출력신호

SCK (Serial Clock) : Master로부터 나오는 Clock (신호 동기화를 위한 Clock)

SS (Slave Select) : 여러개의 Slave모듈이 연결되었을때, 특정 모듈을 선택하여 통신할수 있게끔 해주는 신호 (Enable 핀과 비슷한 역할을 합니다)


위와 같은 총 네개의 핀으로 통신을 합니다.

더 구체적인 내용들은 통신에 대한 설명 포스팅에서 자세히 다루겠습니다^^


자 그럼 아두이노와 무선모듈을 어떻게 연결하면 될까요?


  <433MHz 모듈>    <아두이노>


GOD0    ------       2

GOD2    ------       9

CSN/SS  ------      10

MISO*    ------      11

MOSI     ------      12

SCK       ------      13

VCC       ------    3.3V

GND      ------    GND


(아무래도 GOD1핀에 대한 설명이 부족해서 찾질 못했지만, 테스트해보니 MISO핀이 맞습니다.)



송신모듈 (Transmitter)



#include <ELECHOUSE_CC1101.h>


#define size 11


byte TX_buffer[size]={0};

byte i;


void setup()

{

  Serial.begin(9600);

  ELECHOUSE_cc1101.Init();

  for(i=0;i<size;i++)

  {

     TX_buffer[i]=i;

  }

}


void loop()

{

  ELECHOUSE_cc1101.SendData(TX_buffer,size);

  delay(1);

}




수신모듈(Receiver)





#include <ELECHOUSE_CC1101.h>

 

 void setup()

{

  Serial.begin(9600);

  ELECHOUSE_cc1101.Init();

  ELECHOUSE_cc1101.SetReceive();

}


byte RX_buffer[11]={0};

byte size,i,flag;


void loop()

{

  if(ELECHOUSE_cc1101.CheckReceiveFlag())

  {

    size=ELECHOUSE_cc1101.ReceiveData(RX_buffer);

    for(i=0;i<size;i++)

    {

      Serial.print(RX_buffer[i],DEC);

      Serial.print("  ");

    }

    Serial.println("");

    ELECHOUSE_cc1101.SetReceive();

  }

}




각각의 모듈에 위 코드를 심어주고, Receiver모듈을 잡아서 시리얼 모니터를 보시게되면 아래와 같이 0~10까지 Transmitter 모듈에서 전송된 숫자가 나타나게 됩니다.




위 예제코드는 첨부파일로 올려두겠습니다^^

CC1101.zip

Panstamp.zip


위 코드는 CC1101에 해당하는 예제이고, Panstamp는 조금더 복잡한, RSSI, Data length, CRC 등등을 확인하는 함수들을 사용한답니다ㅎㅎ


Panstamp코드를 실행하면 아래와 같이 신호강도(RSSI), 데이터 길이, 패킷정보 등 다양하게 확인할 수 있고, 이 함수를 이용해 실질적으로 프로젝트에 사용할 수 있습니다.



이렇게 433mHz 무선통신 모듈의 사용법을 알아보았습니다^^


디테일한 설명들이 부족하긴 하지만, 궁금한점이 있으시면 댓글 남겨주세요~!


+ Recent posts