[아두이노] Zigbee 통신하기
본문 바로가기
펌웨어/Arduino

[아두이노] Zigbee 통신하기

by Macgyvering2 2020. 10. 11.

들어가며

아두이노와 라즈베리파이가 Zigbee 통신을 하기 위해서는 일단 서로의 Zigbee칩에 어떤 정보를 주고받을 것인지에 대한 펌웨어를 넣어줘야 한다. 그것을 도와주는 것이 XCTU 프로그램이다. 두 칩에 펌웨어만 넣으면 아두이노끼리 혹은 라즈베리파이끼리 혹은 아두이노와 라즈베리파이 사이의 통신 등 원하는대로 자유롭게 통신할 수 있다.

 

여기서 사용한 Zigbee는 Xbee 시리즈1로서 점대 점 간의 통신만 가능한 시리즈이다. 

시리즈1은 Xbee칩 로고 밑에 S1이라고 적혀있다.

XCTU 설치

설치 파일 다운로드는 여기서 하면 된다.

http://www.digi.com/xctu

 

위 사이트에 들어가서 

Download XCTU를 클릭하고 운영체제와 버전을 선택하여 다운로드 받아서 exe파일을 실행하여 디폴트로 설치한다.

이 글은 버전 6.5.3을 기준으로 작성되었다.

 

Xbee에 프로그램 넣기

Zigbee USB 연결

일단 Xbee 칩을 USB Adapter에 연결하고 컴퓨터에 연결해준다. 

사진에서는 여러 가지 모듈을 사용하느라 서로 제조사와 모양은 다르지만 동일한 기능을 한다.

사진의 연결 제품은 Zigbee USB Adapter, Zigbee USB 동글, Zigbee USB to Serial 등으로 검색해주면 나온다.

파란 불이 들어오는 제품은 모두 알고 있겠지만 그냥 USB 허브다.

어차피 XCTU 프로그램을 통해서는 펌웨어를 넣는 것만이 목적이므로 USB 동글이 하나밖에 없다면 하나로 진행해도 충분하다. 

 

포트번호 찾기

다음은 장치 관리자에서 포트번호를 찾아야 한다.

6번 포트와 8번 포트임을 알 수 있다.

(정말 그 포트가 맞는지는 장치를 뺐다가 다시 연결하면서 새로고침하면 확인할 수 있을 것이다.)

 

XCTU 실행 및 장치 추가

먼저 XCTU 프로그램을 실행하면 메인 화면으로 다음과 같은 창이 뜬다. 

 

여기서 왼쪽 상단의 두번째 아이콘인 돋보기 아이콘을 클릭하여 장치를 찾는 작업을 해보자.

다음과 같은 화면이 뜰텐데 USB가 정상적으로 연결이 됐다면 Refresh Ports를 눌렀을 때 6번과 8번이 뜰 것이다.

Next를 클릭한다.

 

여기서는 전송속도, 한번에 보내는 데이터의 수, 패리티 비트 규칙, 스톱 비트의 수, 흐름 제어 등을 설정할 수 있다.

여기서는 그냥 Finish를 누르겠다. 

 

그럼 장치를 찾으며 다음과 같이 두가지 장치를 찾았다고 나올 것이다.

Add selected devices를 눌러서 바로 추가해주면 된다. 

 

정상적으로 추가됐다면 다음과 같이 두가지 장치가 뜬다.

각 장치를 누르면 UI를 업데이트하는 등의 초기셋팅이 될 것이다.

 

파라미터 설정(중요)

현재 상태의 Zigbee는 공장에서 나온 그대로의 상태이기 때문에 통신을 위한 파라미터들을 설정해주는 것이 중요하다.

 

전송을 위해 다음의 조건들을 맞춰주자.

 

1. 장치 모두의 CH와 ID가 같은 값이어야 한다.

CH와 ID 값을 찾아서 0000~FFFF 사이의 임의의 값으로 바꿔도 되고 그대로 써도 좋은데, 값을 통일해줘야 한다.

값을 적절하게 바꿨다면 연필 모양의 버튼을 클릭하여 write를 해주도록 하자.

 

2. DH, DL값 설정

여기서는 가지고 있는 Xbee의 버전에 따라 다를 수 있다.

검색 버튼을 눌러 파라미터 "MY" 를 찾아보고 파라미터가 있는지 없는지에 따라 다음을 적용하면 된다.

 

1) MY 파라미터가 있는 장치의 경우

장치1의 DL에 장치2의 MY값을 통일해주고, 장치2의 DL에 장치1의 MY값을 통일해준다.

이때 장치1의 MY와 장치2의 MY값은 달라야 할 것이다.

ex) 장치1의 MY: 1234, 장치2의 MY: 4321

 

2) MY 파라미터가 없는 장치의 경우

장치1의 DH와 DL에 각각 장치2의 SH와 SL값을 넣어주고

장치2의 DH와 DL에 각각 장치1의 SH와 SL값을 넣어준다.

SH와 SL은 고정된 값이므로 임의의 값은 설정하지 못할 것이다.

 

내 Xbee의 경우 MY가 없는 장치이기 때문에 이렇게 설정하였다.

장치1
장치2

 

전송테스트

적절하게 입력했다면 전송이 되는지 테스트를 해봐야 한다.

다음 그림과 같이 오른쪽 상단에 터미널 아이콘을 클릭하여 탭을 전환한다.

그리고 화면의 빨간 표시 된 부분을 클릭하여 Close 상태로 만들고(테스트를 위해 연결하는 것을 의미)

장치2도 마찬가지로 Close 상태로 만든다.

 

그리고 장치1에서 Console log의 빈공간을 클릭하여 키보드 입력을 해본다.

파란색으로 나타나는 글자는 송신되는 글자이다.

 

장치2를 클릭해보면 다음처럼 빨간색 글자로 abcd1234(Enter)를 수신한 것을 확인할 수 있다.

아스키 코드로 전송됐으므로 위에서 설정한대로 8비트 단위로 수신되는 것을 확인할 수 있다.

여기서 다시 hello라고 추가적으로 송신하였다.

 

장치1에서도 hello가 수신되는 것을 확인할 수 있다.

아두이노 프로그래밍

아두이노에서는 특별히 설정할 것 없이 Zigbee 실드에 연결하기만 하면 된다. 

테스트할 소스코드는 다음과 같다.

 

1. 송신부

#include <Arduino.h>

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

void loop()
{
    Serial.write('H');
    delay(1000);
    Serial.write('L');
    delay(1000);
}

 

2. 수신부

#include <Arduino.h>
#define POUT_LED 13

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

void loop()
{
    char ch = Serial.read();
    if (ch == 'H')
    {
        digitalWrite(POUT_LED, HIGH);
    }
    else if (ch == 'L')
    {
        digitalWrite(POUT_LED, LOW);
    }
}

 

아두이노 두대를 놓고 송신부와 수신부를 따로 작성하여 테스트할 수 있다. 

송신과 수신이 제대로 작동했다면 수신부에서는 내부 LED가 깜빡거릴 것이다.

 

오늘은 아두이노에서 Zigbee 통신하는 방법을 알아보았다. 

추후에 라즈베리파이와 통신하는 방법도 올려보도록 하겠다.

댓글