고급 예제

다양한 도구들을 가지고 마음껏 응용해보세요.

ZigBee 사용하기

2014-11-18 14:05:19

개요


무선 통신 방법에는 Bluetooth나 Wifi, 적외선 등의 여러가지 방법이 존재 하지만
Zigbee는 다른 무선통신에 비해 낮은 가격과 저전력이라는 특징을 가지는 개인 근거리 무선통신 표준 기술이다.
주파수는 대부분 2.4Ghz를 사용하며 사무실이나 집 등에서 최대 100미터(이론상 1.2Km)까지 근거리 무선통신을 가능하게 한다.



Zigbee의 어원은 zig-zagBee의 합성어로 벌(bee)이 이리저리 날아다니면서(zig-zag) 다른 벌들과 의사소통을 하는 것에서 착안하여 벌처럼 단순하지만 효율적인 통신을 가능하게 한다는 의미에서 붙여진 이름이다.

지그비는 간단한 데이터 전송을 요구하면서도 긴 배터리 수명과 보안성을 요구하는 분야에서 사용된다. 저가라는 특징으로 인해 광범위한 영역에서 다량으로 사용하는 것이 가능하며 저전력이라는 특징은 배터리의 크기를 축소할 수 있게 하여 소형화를 가능하게 한다.
응용 분야에는 무선 조명 스위치나, 가내 전력량계, 교통 관리 시스템, 그 밖에 근거리 저속 통신을 필요로 하는 개인 및 산업용 장치 등에서 사용된다.

이번 튜토리얼에서는 간단한 사용법과 zigbee통신을 이용해서 아두이노 내장 13번 LED를 깜빡여 보자.

 

동영상

 

 

 

부품 목록

 

 

NO 부품명 수량 상세설명
1 아두이노 2 오렌지 보드
2 zigbee 모듈 2 Digi international Xbee S1
3 zigbee 쉴드 2  
8 9v 건전지 1  

 

부품명 아두이노 zigbee 모듈 zigbee 쉴드 9v 건전지
부품 사진  

 


지그비 쉴드에도 제조사마다 여러 종류가 있고 모듈도 안테나가 달려있는 것도 있고 없는 것도 존재하지만 연결방법은 모두 동일하다.




쉴드위쪽 중앙에 보면 핀 끼우는 곳이 존재한다. 이 곳이 바로 모듈을 끼우는 곳이다.
끼우는 방향을 그림으로 그려놓은 쉴드도 존재하지만 없어도 보통 이렇게 방패모양의 아랫부분을 바깥쪽으로 향하게 하여 꽂으면 된다.




쉴드는 아두이노 위에 덮어주면 된다. 덮었을때 양 아날로그, 디지털 핀이 다 들어가는 쉴드도 있고, 다 들어가지 않는 쉴드도 있다.

 

하드웨어 making

브레드 보드


아두이노 2개에 지그비 쉴드를 덮고 쉴드 위에 모듈을 끼워 맞추면 된다.

 

 

지그비 세팅하기

zigbee를 세팅하기 위해서는 xctu라는 프로그램이 필요하다.
xctu는 다음 링크에서 받을 수 있다.

xctu 받기

xctu의 최신버전을 실행하면 아래와 같은 창이 뜬다. 왼쪽 상단의 빨간 네모안의 버튼을 누르면 지그비 모듈을 추가할 수 있다.



위의 버튼을 누르면 뜨는 창이다. 현재 포트에 연결된 장치들이 뜬다.
아래 옵션에서는 통신 대역폭, 비트, 패리티비트 등 여러가지 설정을 할 수 있지만 신경쓰지 않고 Finish를 누르면 검색과정을 거쳐 목록에 추가 된다.




모듈 추가하는 과정




Finish버튼을 누르고 모듈을 추가하는 과정에서 다음과 같은 오류창이 뜰 수 도 있는데, 사용해보니 아두이노에 다른 코드가 업로드된 상태일 때 이런 오류창이 떴다.
아두이노에 업로드 된 코드를 초기화하고 올리면 창이 뜨지 않는다.(다른 이유도 있을 수 있겠지만 아직까지는 사용과정에서 발견하지 못했다)




※참고
zigbee쉴드에는 다음과 같은 스위치가 존재한다.아두이노를 USB로 연결해서 zigbee를 세팅 중이거나 스케치 코딩 중일때는 스위치가 USB쪽으로 있어야 하며, zigbee 통신을 할때에는 그 반대쪽으로 올려주어야 한다. 서로 반대쪽에 있을 경우 코딩이 업로드되지 않고 zigbee통신이 이루어 지지 않는다.




지그비 통신을 할 두개의 아두이노 보드를 발견하여 추가했다면 아래 사진의 왼쪽과 같이 두개의 지그비가 추가된다. 
둘 중 하나의 지그비를 누르게 되면 오른쪽에서는 여러가지 통신을 위한 값들을 세팅할 수 있다.




여러 값들 중에서 지그비 통신을 할때 많이 쓰는 값은 아래와 같다.



CH : zigbee 통신을 할 채널번호를 지정한다. 기본값은 0x0C로 설정되어 있으며 통신을 할 모듈끼리는 채널이 같아야 한다.
ID : zigbee 통신의 네트워크 ID를 지정한다. 기본값은 3332로 설정되어 있으며 역시 통신을 할 모듈끼리는 같은 ID를 가지고 있어야 한다.
DH : 도착주소 64bit중 상위 32bit를 지정한다. 기본값은 0으로 세팅되어 있으며 0x0부터 0xFFFF까지 설정 가능하다.
DL : 도착주소 64bit중 하위 32bit를 지정한다. 기본값은 0으로 세팅되어 있으며 0x0부터 0xFFFF까지 설정 가능하다.
MY : 나의 주소를 지정한다. 기본값은 0으로 세팅되어 있으며 0x0부터 0xFFFF까지 설정이 가능하다.

통신을 할 모듈끼리는 CH와 ID가 같아야 하며 DL과 MY가 서로를 가르키고 있어야 한다.(모듈1이 가지고 있는 DL주소는 모듈2의 MY주소이다.)

 

 

 

 

모듈1 모듈2
CH : C CH : C
ID : 3332 ID : 3332
DL : 5678 DL : 1234
MY : 1234 MY : 5678


세팅이 끝났다면 서로 연결이 되는지 확인해 보자.
아래 빨간색 네모안에 버튼을 눌러 연결이 되는 모듈이 존재하는지 확인한다.




다음과 같은 검색과정을 거쳐서 통신 모듈을 찾게 된다.




통신 모듈을 하나 찾았다. MAC Address를 확인해보자. 아래 연결한 두번째 모듈과 일치한다.




Add selected devices를 눌러 장치를 서로 연결하고 아래 사진의 오른쪽 상단 버튼을 눌러 창을 바꾼 다음 중앙에 보이는 Connect버튼을 모듈 다 눌러서 연결시키자.



Connect에 성공하였다면 콘솔창에 글씨를 입력하면 서로의 콘솔창에서 입력된 글씨를 볼 수 있다.
글씨의 색으로 송신과 수신을 구분할 수 있다.

 

 

소프트웨어 coding

Zigbee통신을 이용하여 13번 LED를 1초간격으로 깜빡여 보자

 

송신부

 

void setup() {
  Serial.begin(9600); //시리얼 통신 초기화
}

void loop() { //1초 간격으로 'H'와 'L'을 주기적으로 전송한다
  Serial.write('H');
  delay(1000);
  Serial.write('L');
  delay(1000);
}

송신부에서는 1초 간격으로 'H'와 'L'을 주기적으로 전송하게 된다.

 

수신부

void setup() {
  Serial.begin(9600);
}

void loop() {
  char ch = Serial.read(); //계속적으로 문자를 읽어들인다
  if(ch == 'H') { //'H'를 읽을 경우 LED을 ON 시킨다
    digitalWrite(13, HIGH);
  }
  else if(ch == 'L') { //'L'을 읽을 경우 LED를 OFF 시킨다
    digitalWrite(13, LOW);
  }
}

수신부에서는 Serial.read()를 통해 계속적으로 데이터를 읽는다.
읽어들인 데이터가 'H'라면 13번핀의 LED를 켜게 되고 읽어들인 데이터가 'L'이면 13번핀의 LED를 끄게 된다.
 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

zigbee 모듈, 아두이노, 오렌지보드