재료

  • 아두이노 우노 2개
  • XBee 쉴드 2개
  • USB 케이블 2개
  • XBee 모듈 2개

 지그비(Zigbee)는 블루투스의 고가격, 고전력 소비의 단점을 보완한 근거리 통신을 지원하는 IEEE 802.15.4 표준 중 하나를 말합니다. 가정과 사무실 등의 무선 네트워킹 분야에서 10∼20m 내외의 근거리 통신과 유비쿼터스 컴퓨팅을 위한 기술입니다. 벌이 Zig-Zag로 날아다니면서 다른 동료들에게 정보를 전달하는 정보전달 체계를 착안하여 분여진 명칭으로, 무선 리모컨, 조명 제어, 키보드, 마우스 등 다양한 분야에서 응용되고 있습니다.

 지그비는 산업, 과학, 의학용 무선 주파수 내에서 작동하며 블루투스와 같은 개인 통신망을 사용합니다. 오늘 프로젝트에서는 지그비를 이용하여 아두이노 보드 두 대에 각각 지그비 모듈을 설치하여 서로 통신하는 프로젝트를 진행해보도록 하겠습니다.



STEP1. 준비 과정

아두이노 보드 2개, USB 케이블 2개, Xbee module 2개, Xbee shield 2개


 

지그비는 통신 규약이고 이 통신 규약을 사용하는 모듈 중 하나인 XBee를 사용해서 프로젝트를 진행하려고 합니다. 이 XBee 모듈은 지그비 중에서도 가장 흔하게 사용되는 모듈 중 하나이니 아마 접하기 어렵지 않으실 거에요. XBee 모듈은 XBee 쉴드에 연결하셔서 사용하시면 아두이노와 XBee 모듈간 연결을 쉽게 하실 수 있기때문에 이번 프로젝트에서는 XBee 쉴드도 함께 사용하도록 하겠습니다.

 

   준비물을 준비하신 뒤에는 약간의 준비 과정이 추가로 더 필요합니다. X-CTU 프로그램을 깔아주셔야 합니다. 이 프로그램은 단순히 XBee 모듈들이 이상이 없는 지 통신 테스트를 하기 위함이 아니라 XBee 모듈 간 통신이 원활하게 이루어지기 위해서 약간의 설정이 필요합니다. 이 프로그램을 이용하시면 설정 작업들을 쉽게 하실 수 있을 겁니다.

 먼저 https://www.digi.com/support/productdetail?pid=3352 에 들어가셔서 소프트웨어를 다운 받아주세요.

자신에게 맞는 프로그램을 다운 받아 주시면 됩니다. 누르시면 아래의 화면이 보이는 데,



설치만 하실거면 등록하지 않고 다운 받으시면 됩니다.



위의 창이 뜨면 Next> 버튼을 누르시고 동의를 하신 후 저장 경로를 설정하시면 설치가 시작됩니다.



설치가 완료되면 위의 화면이 뜨게 됩니다.

왼쪽 상단의 + 버튼을 눌러서 모듈을 추가해주신 후에 제대로 모듈이 추가가 되었는 지 확인만 해주시면 됩니다. 설정은 기본적으로 되어 있는 것으로 두시고 FINISH를 누르시면 됩니다.


STEP2. 연결 방법

이번 프로젝트에서는 XBee 쉴드를 사용하기 때문에 추가적으로 브래드 보드를 통한 연결이 필요하지 않습니다. XBee 쉴드는 아래와 같이 아두이노 보드에 연결해주시면 됩니다.



노란색은 노란색끼리, 초록색은 초록색끼리, 파란색은 파란색끼리 맞물리게 연결하시면 됩니다.



다 연결하시면 아래와 같은 모습이 될겁니다.



이제 여기에 아두이노 전용 UBS  케이블을 연결하시면 됩니다.





STEP3. 코드

- 송신용 아두이노 스케치


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
int LED=13;
boolean ack=true;
int serIn;
char serInString[100];
int serInIdx;
int serOutIdx;
 
void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}
 
void loop() {
  // put your main code here, to run repeatedly:
  if(ack==true){
    digitalWrite(LED, HIGH);
    delay(1000);
 
    Serial.print("REQ");
    Serial.println();
 
    ack=false;
  }
 
  readSerialString();
 
  if(serInIdx>4){
    if(strncmp(serInString, "ACK", 2)==0){
      ack=true;
      digitalWrite(LED, LOW);
      delay(1000);
    }
    serOutIdx=0;
    serInIdx=0;
  }
}
 
void readSerialString(){
  int sb;
  if(Serial.available()){
    while(Serial.available()){
      sb=Serial.read();
      serInString[serInIdx]=sb;
      serInIdx++;
    }
  }
}
 
void printSerialString(){
  if(serInIdx>0){
    for(serOutIdx=0; serOutIdx<serInIdx; serOutIdx++)
      Serial.print(serInString[serOutIdx]);
  }
  serOutIdx=0;
  serInIdx=0;
}
 


- 수신용 아두이노 스케치

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
int LED=13;
boolean ack=true;
int serIn;
char serInString[100];
int serInIdx=0;
int serOutIdx=0;
 
void setup() {
  // put your setup code here, to run once:
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}
 
void loop() {
  // put your main code here, to run repeatedly:
  readSerialString();
  if(serInIdx>4){
    if(strncmp(serInString, "REQ", 2)==0){
      digitalWrite(LED, HIGH);
      delay(1000);
      Serial.print("ACK");
      Serial.println();
      digitalWrite(LED, LOW);
      delay(1000);
    }
    serOutIdx=0;
    serInIdx=0;
  }
}
 
void readSerialString(){
  int sb;
  if(Serial.available()){
    sb=Serial.read();
    serInString[serInIdx]=sb;
    serInIdx++;
  }
}
 
void printSerialString(){
  if(serInIdx>0){
    for(serOutIdx=0; serOutIdx<serInIdx; serOutIdx++)
      Serial.print(serInString[serOutIdx]);
  }
  serOutIdx=0;
  serInIdx=0;
  Serial.println();
}
 


스케치를 업로드하실 때 주의하실 점은 XBee 모듈이 XBee 쉴드에 연결되어 있는 상태에서는 스케치 업로드가 잘 되지 않습니다. 그러므로 스케치를 업로드하시기 전에 쉴드를 제거하시고 업로드한 후에 다시 연결해주셔야 합니다.


STEP4. 결과 확인

 결과를 보시면 수신용 아두이노의 LED가 깜빡깜빡 거리는 것을 확인하실 수 있습니다. LED를 별도로 연결하지 않았는 데에도 아두이노 보드의 LED가 깜빡거릴 수 있었던 것은 대부분의 보드가 13번 핀과 LED가 연결되어 있기 때문입니다.

 제대로 전송이 되었는지는 시리얼 모니터를 통해서도 확인이 가능합니다. 송신부에서 REQ 데이터를 수집하면 응답으로 ACK 데이터를 보내주는 것을 확인할 수 있습니다.


 더 간단하고 좋은 스케치와 결과를 구하게 되면 올리도록 하겠습니다:-)

댓글 2

MADE BY

김민정

사물인터넷, 아두이노
적외선으로 통신하기 다음글 지그비(Zigbee)로 아두이노 간 통신하기현재글 블루투스로 통신하기 이전글