이 블로그는 Web 환경을 이용한 원격 제어 기술에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 Raspberry Pi와 Raspberry Pi Pico, ATmega128 보드, Arduino Mega 보드(ATmega2560), WiFi 모듈을 사용 합니다.

ras-zigbee-serial-comm

Zigbee remote control - Raspberry PI 3
Raspberry Pi에서 Serial 통신을 이용한 Zigbee Module의 설정과 제어


  • USB-Serial 변환 Module을 사용한 Serial 통신
    • USB-Serial 변환 Module
    • PC 또는 Raspberry Pi의 USB Port를 이용 하여 5V 전원 전압을 공급 받고 다른 장치와와 Serial 통신을 가능 하도록 한다.

      USB - Serial 변환 모듈에 대한 자료는 https://choavrweb.blogspot.com/p/usb-uart-converter.html 페이지를 참고 바람.

    • Raspberry Pi에서 Serial 통신을 위한 설정
    • Raspberry Pi에서 Serial 통신을 사용하기 위하여는 UART 통신을 위한 설정이 필요하다.

      Raspberry Pi에서 Serial 통신을 사용하기 위한 설정은 https://cho-raspberry.blogspot.com/p/python-serialport.html 페이지를 참고 바람.

      Raspberry Pi에서 USB-Serial 변환 Module을 사용하여 Serial 통신을 하는 경우 Device name은 /dev/ttyUSB0 이다.

  • Raspberry Pi에서 Serial 통신에 사용하는 Terminal emulator
    • 터미널 에뮬레이터(Terminal emulator)는 컴퓨터 터미널의 기능을 에뮬레이트하는 프로그램이다.

      Terminal emulator는 컴퓨터 터미널 기능을 수행하는 별도의 장치 대신에 PC 등에서 Software로 기존 컴퓨터 터미널과 동일한 기능(작업)을 실행 한다.

      이 페이지에서는 Linux(Raspberry Pi의 기본 OS가 Debian 기반의 OS 임) 환경에서 실행하는 Terminal emulator 프로그램으로 장치의 설정과 제어에 사용하기에 적합한(기능이 너무 복잡하기 않은) Minicom의 설치와 사용에 대하여 설명 한다.

    • Minicom 설치와 사용
      • minicom 설치하기
        • 아래 명령으로 minicom을 설치 한다.
        • sudo apt install minicom

      • minicom 설정하기
        • 아래 명령을 실행하면 minicom의 설정을 위한 Command 모드가 된다.
        • sudo minicom -s

          Minicom 설정을 위한 메세지 창

        • Up, Down 화살표 Key를 사용하여 "Serial port setup"을 선택하고 Enter Key를 누르면 아래와 같이 Serial port 설정을 위한 메세지가 출력 된다.
        • Serial port 설정을 위한 메세지 창

        • 위 창의 메세지에 표시된 설정 문자를 누르면 해당 명령을 실행 할 메세지가 출력 된다. 이 메세지 창에서 원하는 명령에 해당하는 문자를 입력하여 필요한 설정을 변경 한다. 아래 그림은 Serial port의 Baudrate를 설정 하기 위한 창의 예 이다. 각 명령 창의 설정 종료는 Enter 입력으로 실행 된다.
        • Serial port Baudrate 설정을 위한 메세지 창

        • 설정 저장하기: Minicom 설정을 위한 메세지 창에서 "Save setup as dfl"을 선택하고 Enter Key를 누르면 현재 설정이 다음에 minicom을 시작 할 때 사용되도록 저장된다.
        • Minicom 설정을 위한 메세지 창에서 "Exit"을 선택하고 Enter Key를 누르면 설정이 종료 되고 minicom 실행 모드(Serial 통신을 할 수 있는 Terminal emulator 상태)로 돌아 간다.
        • minicom Command 모드(minicom 명령을 실행하기 위한 상태)
          • minicom 실행 모드에서 Ctrl+A 를 입력하면 아래와 같이 minicom Command 모드가 되어 minicom Command를 실행 한다.
          • minicom Command 모드 메세지 창: minicom Command 모드인 경우 아래 예와 같이 창의 아래 부분네 "CTRL-A Z for help" 메세지와 현재 설정 상태가 표시 된다.

          • 아래 그림은 minicom Command 모드(Ctrl+A)에서 'Z' 명령(Help screen)을 실행한 결과 이다. 이 창에서 Enter를 입력하면 다시 minicom 실행 모드로 돌아 간다.
          • minicom Command 모드 메세지 창에서 'Z' 명령(Help screen)을 실행한 결과: 명령은 Command 모드(Ctrl+A)에서 명령 문자(예: Z <- Help screen)를 입력 하면 실행 된다.

        • minicom 종료하기
          • minicom Command 모드(Ctrl+A)에서 'X' 명령을 입력하면 "Leave Minicom?" 메세지가 출력된다. 이 메세지창에서 Up, Down 화살표 Key로 "Yes"를 선택하고 Enter를 입력 한다.
      • minicom 사용 하기
        • minicom 명령 실행하기
          • 윗 "minicom 설정하기"에서 바르게 설정하고 Default 설정으로 저장 한 경우 아래 명령으로 minicom을 실행 할 수 있다. minicom 명령이 정상으로 실행되면 Serial port 가 연결되고 현재 연결된 Serial port에 대한 정보와 Help 명령을 실행하기 위한 필요한 정보(CTRL-A Z)가 표시 된다.
          • minicom

        • minicom을 이용하여 MS Windows PC와 Raspberry Pi 사이에 Serial 통신 하기
        • MS Windows PC - Raspberry Pi Serial 통신을 위한 연결 예

          주의: USB-Serial 변환 Module은 Vdd가 5V이고 ZigBee module은 3.3V 인 경우가 많기 때문에 전원 연결 시 주의 할 것.


          • PC에서 UART 통신을 위한 터미널 프로그램(예: Tera Term 프로그램 등)을 실행 한다.
          • 터미널 프로그램에서 시리럴 포트 번호(PC의 장치 관리자에서 USB - Converter 변환 모듈의 포트 번호를 확인) 와 Baudrate(9600 : Raspberry Pi 3의 기본 설정이 9600 이다.)을 설정한다.
          • 주의: PC 창에서 입력한 문자를 PC 창에도 출력되도록(Local Echo 기능) 하는 경우에는 터미널 프로그램 설정에서 Local Echo 가 Enable 되어야 한다. 또한 Data 수신시 CR 코드가 입력되면 LF를 출력하는 기능도 Enable 되어야 한다.
          • Raspberry Pi에서 UART 통신을 위한 터미널 프로그램(예: minicom 프로그램)을 실행 한다.
          • 주의: Raspberry Pi 창에서 입력한 문자를 Raspberry Pi 창에도 출력되도록(Local Echo 기능) 하는 경우에는 터미널 프로그램 설정에서 Local Echo 가 Enable(Screen and keyboard 설정에서 Q(Local echo)를 Yes로 설정 한다.)로 설정 되어야 한다. 또한 Data 수신시 CR 코드가 입력되면 LF를 출력하는 기능도 Enable(Screen and keyboard 설정에서 P(Add linefeed)를 Yes로 설정 한다.)로 설정 하여야 한다.
          • PC에서 Test 문자열을 전송하고 Raspberry Pi에서 정상 수신 여부를 확인 힌다.
          • Raspberry Pi에서 Test 문자열을 전송하고 PC에서 정상 수신 여부를 확인 힌다.
        • minicom을 이용하여 Raspberry Pi와 ZigBee module 사이에 Serial 통신 하기
        • Raspberry Pi - ZigBee module Serial 통신을 위한 연결 예

          주의: USB-Serial 변환 Module은 Vdd가 5V이고 ZigBee module은 3.3V 인 경우가 많기 때문에 전원 연결 시 주의 할 것. 5V to 3.3V 변환용 IC를 사용하면 USB-Serial 변환 Module의 5V 전원을 3.3V로 변환 할 수 있다.


          • Raspberry Pi에서 UART 통신을 위한 터미널 프로그램(예: minicom 프로그램)을 실행 한다.
          • minicom 창에서 "AT" 문자(ZigBee Command)를 입력하고 "OK" 가 출력되는지 확인 한다.
          • 주의: ZigBee module은 수신한 문자를 송신측에 Echo 하는 기능이 있기 때문에 minicom의 터미널 프로그램 설정에서 Local Echo 가 Disable(Screen and keyboard 설정에서 Q(Local echo)를 No로 설정 한다.)로 설정 되어야 한다. 또한 Data 수신시 CR 코드가 입력되면 LF를 출력하는 기능도 Disable(Screen and keyboard 설정에서 P(Add linefeed)를 No로 설정 한다.)로 설정 하여야 한다.
  • Serial 통신용 Terminal emulator를 이용한 ZigBee 설정과 제어
    • ZigBee Network 개요
      • ZigBee Network는 코디네이터(Coordinator), 라우터(Router), 엔드디바이스(End device)로 구성된다. ZigBee Network는 최소한 하나의 코디네이터(Network의 Root와 Bridge로 동작)로 구성 된다.

      • 코디네이터(Coordinator): 코디네이터는 ZigBee Network를 구성하는 근간(Root)으로 다른 지그비 네트워크와 연결되기 위한 통로로서 사용된다. 각각의 ZigBee Network에는 하나의 코디네이터 만 존재 한다. 코디네이터는 Trust Center(네트워크에 참여하고자 하는 새로운 장치를 인증, 네트워크 키를 주기적으로 관리하고, 장치간 보안 설정 등의 역활을 한다.)로 동작하거나 보안키의 저장소 역할을 수행하는 등 해당 네트워크 고유의 정보들을 저장하고 관리하는 역할을 한다.
      • 라우터(Router): 라우터는 지그비 노드들간의 데이터를 중계하는 역할을 한다. 코디네이터는 라우터 역할도 같이 수행 할 수 있기 때문에 지그비 네트워크 구성 시 라우터가 생략(Coordinator와 End device 만으로 Network 구성이 가능 함)될 수 있다.
      • 엔드 디바이스 (End-Device): 엔드 디바이스는 지그비 네트워크의 단말에 위치하여 코디네이터 또는 라우터와만 통신한다. 따라서 데이터 중계 역할은 수행하지 않는다.
      • 슬리피 엔드 디바이스(Sleepy End-Device): 슬리피 엔드 디바이스는 일반 엔드 디바이스와 동일하지만 보다 오랜 시간 동안 슬립모드를 유지하기 때문에 전력 소모가 매우 적다. 따라서 전력 소모량이 중요한 경우 효과적으로 사용될 수 있다.
      • Zigbee Topologie 예: ZigBee Network는 아래와 같이 다양한 형태로 구성 할 수 있다.

    • AT Command를 이용한 ZigBee 설정과 제어
    • 이 페이지에서는 ZigBee 설정과 제어 설명에 ProBee-ZE20 ZigBee module(ZE20은 ZE10에 비교하여 GPIO Pin과 채널 수가 더 많다는 것을 제외하면 거의 같기 때문에 호환 하여 사용 가능)을 예로 하여 설명 한다.

      이 페이지에서는 ProBee-ZE20 사용자 설명서 내용 중 중요한 내용만 요약하여 설명 한다. 더 자세한 자료을 필요로 하는 경우에는 "ProBee-ZE20 사용자 설명서"를 참고 바람.

      • 사용하는 터미널 프로그램
      • 이 페이지에서는 Raspberry Pi와 ZigBee module 사이의 통신에 Terminal emulator(Minicom)을 사용한다.

      • 설정과 제어를 위하여 사용하는 통신 프로토콜(AT Command)
      • AT Command(Hayes command set)는 모템 제어에 사용하기 위환 명령 Set으로 처음 개발되었지만 현재에는 여러 종류위 통신장치( 블루투스, ZigBee, WiFi 등)의 제어에 사용되는 통신 프로토콜 이다.

      • Raspberry Pi - ZigBee module 사이의 Serial 통신을 위한 연결
      • 윗 그림 "Raspberry Pi - ZigBee module Serial 통신을 위한 연결 예"를 참고 할 것.

      • Raspberry Pi - ZigBee module의 동작 확인
        • Raspberry Pi - ZigBee module 사이의 Serial 통신을 위한 연결을 참고하여 TxD, Rxd, GND 선을 연결 한다.
        • Raspberry Pi에서 Minicom을 실행 한다. 위에 있는 "minicom을 이용하여 Raspberry Pi와 ZigBee module 사이에 Serial 통신 하기"를 참고 할 것.
        • minicom 창에서 "AT" 문자(ZigBee Command)를 입력하고 "OK" 가 출력되는지 확인 한다.
    • ZE20을 코디네이터로 설정하기
      • 모든 ZigBee Network는 Coordinator로 동작하는 노드가 시작되면서 ZigBee Network 구성이 시작된다. 코디네이터는 일반적으로 슬립모드에 들어가서는 안되며 항상 전원이 들어와 있어야 한다.

      • 노드 형태(Node type)를 코디네이터로 설정하기
        • ZE20 모듈은 아래 AT 명령으로 노드 형태를 설정 한다. 아래 명령에서 n 값을 1로 설정하면 코디네이터로 설정됨.
        • AT+NODETYPE=n or AT+NT=n

          윗 명령의 n의 값(0 - 4)에 따라 노드 형태가 설정된다. 0 = none, 1 = coordinator, 2 = router, 3 = end-device, 4 = sleepy end-device

        • 노드 형태을 다시 설정하면 ATZ 명령(리셋 명령)을 실행하여 변경 내용이 적용되도록 하여야 한다.
        • ZE20을 코디네이터로 설정하는 명령 예
        • AT+NODETYPE=1<CR> # Set node type as the coordinator

          OK<CR> # Response

          ATZ<CR> # Apply the change

          OK<CR> # Response

      • 코디네이터 채널 마스크 설정하기
      • 지그비 코디네이터가 시동되면 코디네이터는 지정된 주파수 채널을 검색하여 다른 무선 장비들과 가장 간섭이 적은 채널을 선택하여 해당 지그비 네트워크용 채널로 사용한다.

        • 코디네이터가 검색할 주파수 채널들을 아래 AT 명령어를 이용하여 지정할 수 있다.
        • AT+CHMASK=n or AT+CM=n

          윗 명령의 n의 값은 채널 마스크 이다. 기본값 = 0x07FFF000

          • 채널 마스크는 32비트(16진 수로 표시)로 해당 채널의 사용 여부를 설정 한다.
          • 예: 채널 12~15를 사용하기 위해서는 채널마스크의 12~15번 비트값을 1으로 설정하고 나머지 비트들은 0으로 설정되어야 한다.
          • 기본값은 0x7FFF000이며 이는 채널 12~26를 사용한다는 의미 이다.
          • ZE20은 채널 12~26만 지원하기 때문에 0~11비트 및 27~31비트는 항상 0으로 설정되어야 한다.
      • 코디네이터의 PAN ID 설정
      • 모든 지그비 네트워크는 네트워크를 식별하기 위하여 고유한 PAN ID(각각의 ZigBee network(PAN: Personal Area Network)는 고유한 PAN ID로 정의(구분)되어야 함)가 설정되어야 한다. PAN ID가 0000으로 설정되는 경우 ZE20은 임의의 16비트 난수를 발생하여 PAN ID로 사용한다.

        • 사용자가 PAN ID를 직접 설정하고자 할 경우에는 아래의 AT명령어를 사용한다.
        • AT+PANID=xxxx or AT+PI=xxxx

          xxxx는 사용할 PAN ID. 예를 들어서 1234. 기본값 = 0000

          • PAN ID를 지정 할 때는 같은 PAN ID를 가지는 지그비 네트워크가 존재하지 않는 것을 확인하여야 한다.
        • 필요한 경우 아래 AT 명령어를 이용하여 64-비트 확장 PAN ID를 지정할 수 있다. 지정한 확장 PAN ID가 0000000000000000 일 경우 ZE20은 자신의 IEEE 주소를 확장 PAN ID로서 사용한다.
        • AT+EPID=xxx…xxx or AT+EI= xxx…xxx

          xxx…xxx는 사용할 PAN ID. 예를 들어서 0123456789ABCDEF , 기본값 = 000…000

          • PAN ID를 지정 할 때는 같은 PAN ID를 가지는 지그비 네트워크가 존재하지 않는 것을 확인하여야 한다.
      • 참여 허용(Permit Joining)
      • 라우터 또는 엔드디바이스가 지그비 네트워크에 참여하고자 할 경우에는 이를 허용하는 코디네이터 또는 이미 네트워크에 참여한 라우터가 하나 이상 존재하여야 한다.

        • ZE20은 아래와 같은 세가지 방법으로 네트워크 참여를 허용한다.
          • 참여 허용 설정을 항상 참여 허용으로 설정하여 항상 참여를 허용
          • AT 명령에 의한 일시적인 참여 허용
          • 디지털 입력 신호에 의한 일시적인 참여 허용
        • 항상 참여가 허용되도록 설정하려면 아래와 같은 AT명령을 사용한다.
          • AT+PERMIT=255 or AT+PJ=255

        • 네트워크 참여를 일시적으로 허용하기 위해서는 아래의 AT명령을 사용한다.
          • AT+PERMIT=n or AT+PJ=n

            n은 참여를 허용하는 시간(초). 허용범위 = 1~254

        • 디지털 입력 GPIO0 값에 따라서 네트워크 참여를 허용하기 위해서는 아래 예와 같이 AT 명령어를 사용한다.
          • AT+GPIO0=5 or AT+IO0=5

            이 경우 GPIO0의 값이 On에서 Off로 변경되는 시점부터 S-레지스터 22(S22)에 설정된 시간 동안 네트워크 참여가 허용된다. S22 값을 변경하려면 아래 AT 명령어를 이용한다.

            • S22 값을 변경하려면 아래 AT 명령어를 사용한다.
            • ATS22=n

              n은 참여를 허용하는 시간(초). 허용범위 = 1~254. 기본값 = 255

              S22가 255로 설정되면 다른 노드의 네트워크 참여를 항상 허용한다. 또한 코디네이터 또는 라우터가 재시동 할 때에도 이 S22 시간 간격만큼 다른 노드의 네트워크 참여를 허용한다.

    • ZE20을 라우터로 설정하기
      • 라우터는 메시지를 중계하는 노드로서 다른 노드의 패런트 노드로서 동작할수 있다. 라우터 노드들은 항상 전원이 켜진 상때이어야 하며 슬립 상태에 들어갈 수 없다.

      • 라우터 노드 형태 지정
        • ZE20을 라우터로 지정하기 위해서는 아래 AT 명령어를 사용한다.
        • AT+NODETYPE=2 or AT+NT=2

          노드 형태를 지정된 다음에는 ATZ 명령을 실행하여 변경 내용이 적용되도록 하여야 한다.

          • ZE20을 라우터 노드로 설정하는 명령 예
          • AT+NODETYPE=2<CR> # Select router mode

            OK<CR> # Response

            ATZ<CR> # Apply the change

            OK<CR> # Response

      • 라우터 채널 마스크 설정
      • ZE20 라우터나 엔드디바이스가 네트워크에 참여하고자 할 경우 설정된 채널마스크에 해당하는 모든 채널들을 검색한 후 발견된 지그비 네트워크에 참여한다. 따라서 채널 마스크 설정시 참여하고자 하는 네트워크의 코디네이터가 사용하고 있는 채널이 포함되어야 한다.

        코디네이터 채널 마스크 설정을 참고 할 것.

      • 라우터 PAN ID 설정
      • 지그비 라우터 또는 엔드디바이스의 PAN ID 또는 확장 PAN ID는 참여하고자 하는 네트워크의 코디네이터의 PAN ID/확장 PAN ID와 동일하여야 한다.

        • 코디네이터가 자동으로 생성된 PAN ID를 이용할 경우 아래 AT명령어를 코디네이터에서 실행하여 운용중인 PAN ID를 알수 있다.
        • AT+OPPANID or AT+OI

      • 참여 허용 (Permit joining)
      • 지그비 라우터는 코디네이터와 마찬가지로 다른 노드들의 네트워크 참여를 제어 할 수 있으며, 설정 방법은 코디네이터와 동일하다.

    • ZE20을 엔드디바이스로 설정하기
      • 엔드 디바이스는 네트워크의 가장 말단에 위치하여 패런트 노드와 만 통신하는 장비이다. 따라서 엔드 디바이스는 메시지 중계를 하지 않는다.

      • 엔드 디바이스로 설정은 아래의 단계를 따라 설정된다. 설정 방법은 라우터의 경우와 동일 하기 때문에 자세한 설명은 생략 한다.
        • ZE20을 엔드디바이스 노드 형태로 지정한다.
        • 채널 마스크를 지정한다. 채널마스크를 지정하지 않으면 기본 채널 마스크를 사용한다.
        • PAN ID 또는 확장 PAN ID를 지정한다. 명시되지 않을 경우 ZE20은 주변의 지그비 네트워크를 검색하여 자동적으로 참여를 시도한다.
        • 폴 시간제한(poll timeout)과 폴 주기(poll period)를 설정한다.
      • 엔드 디바이스의 폴 주기 (poll period)와 폴 시간제한 (poll timeout)
        • 엔드 디바이스는 패런트 노드(코디네이터나 라우터)에 속하게 되며 패런트 노드는 해당 엔드 디바이스의 정보를 차일드 테이블이라고 불리우는 테이블에 저장하여 메시지를 중계하기 위한 목적으로 사용한다. 이 테이블은 엔드 디바이스가 일정 시간마다 패런트 노드를 폴(poll)하는 동안은 계속 유지가 되지만 그렇지 않은 경우 패런트 노드는 해당 엔드 디바이스를 테이블로 부터 삭제하고 더이상 메시지를 중계하지 않는다. 이 일정 시간을 폴 시간제한(poll timeout)이라고 하며 패런트 노드에서 설정된다. 또한 엔드디바이스에서 패런트 노드를 폴 하는 시간 간격은 폴 주기(poll period)라고 하고 엔드 디바이스에서 설정한다. 폴 주기는 폴 시간제한보다 같거나 짧게 설정되어야 의도하지 않게 엔드 디바이스가 차일드 테이블에서 삭제되는 것를 방지할 수 있다.

        • ZE20의 폴 간격은 아래와 같이 S-레지스터의 값을 설정함으로 지정 할 수 있다.
          • ATS51=n, 이때 n = 폴 시간제한 (poll timeout) 값 (초). 기본값 = 60

            n 값은 패런트 노드에서 설정되는 값이다. S51에 지정된 시간(초)내에 엔드디바이스가 패런트 노드에게 폴 요청(poll request) 메시지를 보내지 않으면 패런트 노드는 엔드 디바이스가 네트워크를 떠났다고 간주하고 차일드 테이블(child table)에서 삭제한다.

        • ZE20의 폴 주기 (poll period)는 아래와 같이 S-레지스터의 값을 설정함으로 지정 할 수 있다.
          • ATS56=n, 이때 n = 폴 주기 (poll period) 값 (s). 기본값 = 5

            엔드 디바이스는 S56에 지정된 폴 주기를 이용하여 패런트 노드를 폴 한다.

    • ZE20을 슬리피 엔드 디바이스(Sleepy End-Device)로 설정하기
      • 슬리피 엔드 디바이스는 일반 엔드디바이스와 동일하나 슬립 모드(sleep mode)에서 무선 송수신부의 동작을 꺼서 전력 소모를 줄일 수 있는 노드 형태이다.

      • ZE20을 슬리피 엔드 디바이스로 설정은 아래의 단계를 따라른다. 설정 방법은 라우터의 경우와 동일 하기 때문에 자세한 설명은 생략 한다.
        • ZE20을 슬리피 엔드 디바이스 노드 형태로 지정한다.
        • 채널 마스크를 지정한다. 채널마스크를 지정하지 않으면 기본 채널 마스크를 사용한다.
        • PAN ID 또는 확장 PAN ID를 지정한다. 명시되지 않을 경우 ZE20은 주변의 지그비 네트워크를 검색하여 자동적으로 참여를 시도한다.
        • 슬립 (sleep) 간격을 설정한다.
    • 자주 사용하는 S-레지스터 설정
      • ZigBee 사용 시 사용 방법에 따라 S-레지스터 설정을 변경 하여야 한다. 여기서는 자주 사용하는 S-레지스터 설정을 요약 설명 한다.

      • S11: 커맨드 모드에서 수신한 메시지 표시.
        • S11 = 1 : 수신한 메시지의 표시 한다.
        • S11 = 0 : 수신한 메시지를 표시 하지 않는다.
      • S12: 명령의 에코(표시) 여부를 설정.
        • S12 = 1 : 수신한 명령을 에코(표시) 한다.
        • S12 = 0 : 수신한 명령을 에코(표시) 하지 않는다.
      • S13: 명령의 실행 결과 응답(표시) 여부를 설정.
        • S13 = 1 : 명령의 실행 결과를 응답(OK or ERROR)를 한다.
        • S13 = 0 : 명령의 실행 결과를 응답(OK or ERROR)를 표시 하지 않는다.
      • S-레지스터 설정 예: S12 레지스터의 현재 설정(1: 수신한 명령을 에코)을 0((수신한 명령을 에코 안함)으로 변경 하는 명령 예
        • ATS12?    # S12 레지스터의 현재 설정 상태를 출력 한다.

          1         # S12 레지스터의 현재 설정 상태(수신한 명령을 에코)를 출력 한다.

          OK

          ATS12=0<CR>  # S12 레지스터를 0로 설정(수신한 명령을 에코 안함) 한다.

          OK

          ATZ<CR>     # 설정 변경을 적용 한다.

          OK

          ATS12?    # 입력한 명령(ATS12?)이 표시되지 않는다.

          0         # S12 레지스터의 현재 설정 상태를 출력 한다.

          OK

          주: Terminal emulator(예: minicom)를 사용하여 ZigBee 모듈을 제어하는 경우에는 명령과 응답이 표시 되도록 S11, S12, S13 레지스터를 1로 설정 하고, 프로그램으로 ZigBee 모듈을 제어하는 경우에는 명령과 응답이 출력 되지 않도록 S11, S12, S13 레지스터를 0로 설정하는 것이 일반적 이다.

    • 데이터 송수신
    • ZE20은 유니캐스트(unicast), 멀티캐스트(multicast), 브로드캐스트(broadcast)의 세가지 서로 다른 종류의 데이터 송신을 지원한다. 유니캐스트는 한 개의 특정 지그비 장비에게 데이터를 전송하는것을 의미한다. 멀티캐스트는 특정 지그비 장비 그룹에게 데이터를 보내는 것을 의미한다. 브로드캐스트는 네트워크 상에 존재하는 모든 지그비 장비에게 데이트를 전송하는 것을 의미한다.

      ZE20은 아래와 같이 두가지 동작 모드(커맨드 모드, 데이터 모드)가 있다.

      • 커맨드 모드 (Command mode): ZE20의 설정과 동작을 위한 AT 명령어를 전송하는 모드로, AT 명령어를 이용하여 허용되는 데이터 양을 한번만 보낸다.
      • 데이터 모드 (Data mode): 지그비 장비로 많은 양의 데이터를 보내기 위한 모드이다. 많은 양의 데이터를 보낼 경우 데이터 모드로 변환하여 데이터를 연속적으로 보낸다. 데이터 모드를 빠져 나오려면 “+++”를 입력한다.
      • 이 페이지에서는 장치의 제어에 유용한 유니캐스트(Unicast) 방식의 커맨드 모드 (Command Mode)에 대하여만 설명 한다.

      • 유니캐스트(Unicast) 방식의 커맨드 모드 (Command Mode)
        • 유니캐스트는 하나의 전송 장비(Source device)로부터 다른 하나의 특정한 목표 장비(Destinationdevice)로만 데이터가 전송된다. 목표 장비는 지그비 네트워크에 존재하는 어떤 지그비 장비도 될수 있다. 목표 장비를 지정하기 위해서는 해당 목표 장비의 지그비 주소(ZigBee address)가 필요하다.

          각 지그비 장비는 64-비트 와 16-비트의 두가지 지그비 주소를 가지고 있다. 64-비트 주소는 생산 과정에서 부여되는 장비 고유의 주소이다. 16-비트 주소는 지그비 네트워크에 참여할때 부여되는 주소이다. ZE20은 목표 장비를 16-비트 또는 64-비트 주소중 한가지를 이용하여 지정할수 있다.

        • 유니캐스트 명령을 위한 AT명령은 아래와 같다.
          • AT+UNICAST=<node_id>,<MSG><CR> or AT+UC=<node_id>,<MSG><CR>

            위에서 <node_id> 는 16-비트 또는 64-비트 주소, <MSG> 는 전송할 데이터

            위 명령을 이용하여 보낼수 있는 데이터의 최대 길이는 90 바이트(암호화시 72 바이트)이다.

      • 유니캐스트(Unicast) 방식의 커맨드 모드 (Command Mode)를 이용한 데이터 전송 예
      • ZigBee 데이터 전송을 실험 위한 시스템 구성 예

        • 윗 그림과 같이 실험을 위한 ZigBee Network를 구성 한다.
        • putty로 Raspberry Pi에 연결하고 Serial 통신을 위한 minicom을 실행 한다.
        • ZigBee Module 1을 코디네이터로 설정하고, 채널 마스크 <= 0x03FFF000, PAN ID <= 1230, 참여 허용 <= 255으로 설정 한다. PAN ID는 현재 사용되지 않는 번호를 임의 지정 함.
        • PC에서 UART 통신을 위한 터미널 프로그램(예: Tera Term 프로그램 등)을 실행 한다.
        • 터미널 프로그램에서 시리럴 포트 번호(PC의 장치 관리자에서 USB - Converter 변환 모듈의 포트 번호를 확인) 와 Baudrate(9600 : Raspberry Pi 3의 기본 설정이 9600 이다.)을 설정한다.
        • PC에서 터미널 프로그램에서 ZigBee Module 2을 엔드디바이스로 설정하고, 채널 마스크 <= 0x03FFF000, PAN ID <= 1230, 참여 허용 <= 255으로 설정 한다. 한다.
        • Raspberry Pi에서 아래 명령으로 Data를 전송한다.
        • AT+UC=<node_id>,ZigBee testing<CR>

          <node_id>는 ZigBee Module에서 확인 할 수 있다. ZE20인 경우 ZigBee Module에 16진 숫자 10자리가 인쇄되어 있고, 이 숫자 앞에 000195 숫자(6자리)를 첨부하여 64Bits 주소가 됨. <node_id> 예: 000195000000B37E

        • PC에서 터미널 프로그램에 "ZigBee testing" 메세지가 정상으로 수신 되었는지 확인 한다.
        • 아래 예는 Raspberry pi에 연결된 Coordinator에서 Windows PC에 연결된 End-Device로 "ZigBee Test" 메세지를 전송하고 End-Device로 부터 "End device to Coordinator" 메세지를 수신한 경우이다.

          Raspberry pi 측 Terminal emulator(minicom) 창 예

          Windows PC 측 Terminal emulator(OC-Console) 창 예

    • 디지털 및 아날로그 입출력
      • 디지털 및 아날로그 입출력 실험을 위한 장치 만들기
      • 디지털 및 아날로그 입출력 실험을 위한 장치 구성도와 제작 예

        • 위 예에서는 USB-Serial 변환 모듈의 5V 전원을 5V-3.3V 변환 IC를 사용하여 3.3V로 변환하여 ZigBee 모듈의 전원으로 사용하였다.
        • LED는 디지털 출력을 관찰하기 위한 장치로 사용하였다. LED에 연결한 저항(보통 330옴을 사용)은 LED의 밝기를 결정한다.
        • Switch는 디지털 입력 실험을 위한 장치 이다.
        • 가변저항(5K)은 아날로그 입력 실험을 위한 장치 이다.
      • 디지털 및 아날로그 입출력 실험을 위한 장치 구성
        • 위 디지털 및 아날로그 입출력 실험을 위한 장치를 2개 만들어 하나는 코디네이터로 설정하고 다른 하나는 엔드디바이스로 설정 한다.
      • GPIO(General Purpose Inputs and Outputs) Port동작 모드 설정
        • 다음 명령으로 GPIO의 동작 모드를 설정 한다.
          • AT+GPIO=<values><CR> or AT+GPIO<number>=<value><CR>

            윗 명령의 <values> 값에 따라 아래와 같이 설정된다.

          • 0: 사용 안함
          • 1: 디지털 입력
          • 2: 디지털 출력, 기본값 = low
          • 3: 디지털 출력, 기본값 = high
          • 4: 아날로그 입력, 싱글 엔디드 (GPIO9~14만 적용 가능)
          • 5: 핀에 할당된 특정 기능용으로 사용
        • 다음 명령으로 GPIO의 설정 상태를 읽을 수 있다.
          • AT+GPIO?<CR> or AT+GPIO<number>?<CR>

          • N(Gpio 수) 개의 정수(0 - 5)가 출력 된다. 각 정수는 대응하는 GPIO의 설정 상태(GPIO 설정에서 사용한 0-5 사이 값)를 표시 한다.
      • GPIO Port를 디지털 입출력 장치로 이용하기
        • GPIO Port를 디지털 입출력 장치(SW 상태 읽기, 모터 등 장치의 제어 신호로 사용)로 이용 할 수 있다.

        • 다음 명령으로 GPIO Port를 디지털 출력 모드로 설정 한다.
          • AT+GPIO13=2<CR>

            ATZ<CR> # Apply the change

            윗 예는 GPIO13번을 디지털 출력, 기본값 = low로 설정하는 예 이다.

        • 다음 명령으로 GPIO Port를 디지털 입력 모드로 설정 한다.
          • AT+GPIO14=1<CR>

            ATZ<CR> # Apply the change

            윗 예는 GPIO14번을 디지털 입력으로 설정하는 예 이다.

        • 다음 명령으로 GPIO Port 현재 상태를 읽을 수 있다.
          • AT+DIO?<CR> or AT+DIO<number>?<CR>

            위에서 <number> 는 0 ~ 16 사이의 GPIO 번호 이다.

            디지털 입력 또는 출력으로 설정된 핀의 상태는 0(Low) 과 1(High)로 표시되고 아날로그 입력으로 설정되어 있는 핀은 *로서 표시 된다.

        • 다음 명령으로 디지털 출력 모드로 설정된 GPIO Port의 값을 설정 할 수 있다.
          • AT+DIO=<value><CR> or AT+DIO<number>=<value><CR>

            위에서 <number> 는 0 ~ 16 사이의 GPIO 번호이고, <values> = 0 또는 1, 또는 0과 1로 이루어진 문자열. 0 = Low, 1 = High 이다.

          • GPIO13번을 디지털 출력을 1(High)로 설정하는 예는 아래와 같다.
          • AT+DIO13=1<CR>

          • GPIO13번을 디지털 출력을 0(Low)로 설정하는 예는 아래와 같다.
          • AT+DIO13=0<CR>

        • 원격 노드의 입출력 값을 읽거나 제어하기 위해서는 아래와 같이 원격 AT명령을 통한 AT+DIO 또는 AT+AI 명령을 실행한다.
          • AT+REMOTE=<address>,<AT command><CR>

          • 원격 AT 명령의 예는 아래와 같다.
          • AT+REMOTE=0001950000003BA1,AT+DIO?<CR>

            1000100011100*010

            OK

      • GPIO Port를 아날로그 입력 장치(아날로그 센서의 값을 읽는데 사용)로 이용하기
        • 다음 명령으로 GPIO Port를 아날로그 입력 모드로 설정 한다.
          • AT+GPIO3=4<CR>

            ATZ<CR> # Apply the change

            윗 예는 아날로그 입력 3번(GPIO12번)을 아날로그 입력으로 설정하는 예 이다.

          • 아날로그 입력값은 AT+AI 명령을 이용하여 아래와 같이 읽을 수 있다.
          • AT+AI?<CR> or AT+AI<number>?<CR>

            위에서 <number> = 0 ~ 5 사이의 아날로그 입력 번호

            위 명령의 응답값은 16비트 16진수로 표시되고 0~2EE0(0~1200.0mV) 사이의 값을 가지며 단위값은 0.1mV에 해당한다. 해당 핀이 디지털 입출력용으로 설정된 경우에는 ****로서 표시된다.

          • 16진수 출력값을 실제 측정된 전압 값으로 변경하는 공식은 아래와 같다.
          • 출력값이 0 ~ 7FFF 인 경우, Voltage (mV) = Value * 0.1, 출력값이 8000 ~ FFFF 인 경우 Voltage (mV) = (Value – 65536) * 0.1

      • GPIO Port의 주기적 샘플링 (Periodic Sampling)
        • AT 명령을 이용하여 ZE20S가 일정 시간 간격으로 입출력 상태를 원격 노드에게 전달하도록 설정할 수 있다.

        • 원격 노드 주소 설정하기
          • AT+DESTLA=<IEEE address><CR> or AT+DL=<IEEE address><CR>

            윗 예에서 <IEEE address> 는 데이터를 전달할 원격 노드의 64-비트 주소 이다.

        • 샘플링 주기 (초) 설정하기
          • ATS42=<value><CR>

            윗 예에서 <value> 는 GPIO 샘플링 주기(초), 0 일 경우 GPIO 샘플링 사용 안함 이다.

        • 전송할 노드를 설정하기
          • ATS43=<value><CR>

            윗 예에서 <value> 는 GPIO 값을 전송할 노드를 설정 한다. 0이면 AT+DESTLA 로 설정된 노드로 GPIO 값을 전송하고, 1이면 싱크 노드로 GPIO 값을 전송 한다.

          리셋 명령(ATZ)을 실행하여 변경된 설정을 적용 한다.

      • GPIO Port의 변화 감지 샘플링(Change Detection Sampling)
        • AT 명령을 이용하여 ZE20 디지털 I/O 핀의 상태가 변할 때 즉시 I/O Port 값을 원격 노드로 전송할 수 있다.

        • 원격 노드 주소 설정하기
          • AT+DESTLA=<IEEE address><CR> or AT+DL=<IEEE address><CR>

            윗 예에서 <IEEE address> 는 데이터를 전달할 원격 노드의 64-비트 주소 이다.

        • GPIO 값을 전송할 노드 설정 설정하기
          • ATS43=<value><CR>

            윗 예에서 <value> 는 GPIO 값을 전송할 노드를 설정한다. 0이면 AT+DESTLA 로 설정된 노드로 GPIO 값을 전송하고, 1이면 싱크 노드로 GPIO 값을 전송 한다.

        • GPIO 변화 감지 샘플링 모드 설정하기
          • ATS44=<value><CR>

            윗 예에서 <value> 가 1일 경우 변화 감지 샘플링 사용하기로 설정되고, 0일 경우 변화 감지 샘플링 사용 안 하기로 설정 된다.

          리셋 명령(ATZ)을 실행하여 변경된 설정을 적용 한다.

      • GPIO 원격 제어(GPIO Remote Control)
        • ZE20S 모듈은 원격 노드에서 디지털 입력 핀을 전환하여 로컬 노드의 디지털 출력 상태를 변경하는 것을 지원한다. 이 때 로컬 노드는 원격 노드의 GPIO 감시가 가능한 상태(원격 노드의 GPIO 감시 주기, S42 > 0)이거나 원격 노드의 GPIO 변화 감지 샘플링이 가능한 상태(원격 노드의 GPIO 변화 감지 샘플링 모드, S44 = 1)이어야 한다.

        • 디지털 출력 상태 변경을 허용할 특정 원격 노드 주소 설정하기
          • AT+SOURCELA=<IEEE address><CR> or AT+SL=<IEEE address><CR>

            윗 예에서 <IEEE address> 는 디지털 출력 상태 변경을 허용할 특정 소스 노드의 64-비트 주소 이다. 이 주소가 “FFFFFFFFFFFFFFFF”으로 설정된 경우 모든 원격 노드가 로컬 노드의 GPIO 상태를 제어할 수 있도록 허용한다.

        • GPIO 원격 제어 모드 설정하기
          • ATS45=<value><CR>

            윗 예에서 <value> 가 1일 경우 GPIO 원격 제어 허용하기로 설정되고, 0일 경우 GPIO 원격 제어 허용 안함으로 설정 된다.

            주의: 이 기능은 디지털 I/O에서만 사용할 수 있다.