기본 콘텐츠로 건너뛰기

[BLE] TI CC2540 Mini DK 사용하기 - Notifications


1. 들어가기

    KeyFob과 USB 동글이 서로 연결을 맺고 있다. KeyFob이 어떤 상태를 감지하고 나서 USB 동글 쪽으로 데이터를 보내는 방법에는 두 가지가 있다.
 
        Notifications
        Indications

    Notification은 보내고 나서 수신 확인을 하지 않는 것이고, Indication은 보내고 나서 수신자로부터 확인을 받는 것이다. KeyFob에서 가속도의 변화를 감지할 때마다 USB 동글 쪽으로 가속도 값을 보내는 상황에서는 어느 방식이 더 적합할까? 대개의 경우 시간에 따른 가속도 값의 변화 추이를 살펴 보는 것이 완벽한 수신율을 보장하는 것보다 더 중요하기 때문에 수신 확인을 받을 필요가 없는 Notification이 Indication을 사용하는 것보다 적합할 것이다.
 
    그렇다면 KeyFob이 제공하는 characteristic 중에서 Notification 방식으로 보내는 것이 무엇인지 어떻게 알 수 있는가? 그리고 그 값을 Notification 방식으로 보내도록 하려면 어떻게 해야 하는가? KeyFob은 현재 KeyFobDemo 애플리케이션을 실행하고 있는 중이다.

2. 가속도 측정 및 전송

    KeyFobDemo 애플리케이션이 제공하고 있는 가속도계 서비스는 블루투스 SIG 표준이 아니라 TI에서 예제로 구현한 것이다. 아래 문서의 Figure 27에서 가속도계 서비스에 대한 attribute 테이블을 찾을 수 있다.

        Bluetooth Low Energy CC2540/41 Mini Development Kit User's Guide (http://www.ti.com/litv/pdf/swru270c)

    2.1 가속도계 구동

        Figure 27에서 가속도계를 구동시키는 것과 관련된 characteristic은 아래 두 줄의 attribute로 정의되어 있다.
     
            Handle  Type        Value               Permissions
            0x33    0x2803      0A 34 00 A1 FF      Read    
            0x34    0xFFA1      00                  Read/Write
     
        위의 테이블에서 각 줄의 attribute 유형이 의미하는 바는 다음과 같다.
     
            0x2803      하나의 characteristic을 선언하는 attribute이다.
            0xFFA1      가속도계 구동을 결정하는 값을 담고 있는 attribute이다.
                 
        characteristic을 선언하고 있는 attribute의 값이 의미하는 바를 살펴 보도록 하자.
     
            0x0A        - characteristic의 값에 대하여 읽기(0x02)와 쓰기(0x08)를 할 수 있다.
            0x0034      - characteristic의 값은 핸들 0x0034로 접근할 수 있다.
            0xFFA1      - characteristic의 값은 가속도계 구동을 결정하는 것이다.
                 
        따라서 가속도계를 구동시키려면 BTool의 Characteristic Write 영역에서 아래와 같이 지정하고 Write 버튼을 누르면 된다.
     
            Characteristic Value Handle: 0x0034
            Value: 01:00

    2.2 가속도계의 X-축 값 전송 시작
 
        Figure 27에서 가속도계의 X-축 값과 관련된 characteristic은 아래 네 줄의 attribute로 정의되어 있다.
     
            Handle  Type        Value                   Permissions
            0x39    0x2803      10 3A 00 A3 FF          Read    
            0x3A    0xFFA3      00 00                   (none)  
            0x3B    0x2902      00 00                   Read/Write
            0x3C    0x2901      "Accel X-Coordinate"    Read    
 
        위의 테이블에서 각 줄의 attribute 유형이 의미하는 바는 다음과 같다.
     
            0x2803      하나의 characteristic을 선언하는 attribute이다.
            0xFFA3      가속도계 X-축 값을 담고 있는 attribute이다.
            0x2902      characteristic에 대한 설정을 담고 있는 attribute이다.
            0x2901      characteristic에 대한 설명을 담고 있는 attribute이다.
     
        characteristic을 선언하고 있는 attribute의 값이 의미하는 바를 살펴 보도록 하자.
     
            0x10        - characteristic의 값에 대하여 Notify(0x10)을 받을 수 있다.
            0x003A      - characteristic의 값은 핸들 0x003A로 접근할 수 있다.
            0xFFA3      - characteristic의 값은 가속도계의 X-축 값이다.
         
        위의 테이블에서 핸들 0x3A의 Permissions를 살펴 보면 X-축 값을 직접 읽거나 쓰는 것은 허용되지 않음을 알 수 있다. 그렇다면 가속도계 서비스가 X-축 값을 Notification 방식으로 전송을 시작하도록 설정해 주어야 한다. 이러한 작업은 Characteristic Descriptor들 중에서 attribute 유형이 0x2902인 Client Characteristic Configuration을 통해서 이루어진다. 해당 descriptor의 bit 값은 다음과 같이 정의되어 있다.
     
            0x0001      Notification
            0x0002      Indication
         
        따라서 Notification을 시작하도록 명령하는 것은 핸들 0x3B의 값을 0x0001로 바꾸어 주는 것이다. BTool의 Characteristic Write 영역에서 아래와 같이 지정하고 Write 버튼을 누른다.

            Characteristic Value Handle: 0x003B
            Value: 01:00
             
        이제 KeyFob을 움직여 보자. 그러면 BTool의 로그창에 가속도계의 X-축 값이 나타날 것이다. 단 한 차례만 Notification을 보내는 것이 아니라 값의 변화가 있을 때마다 그 값을 보내 준다.
           
부록. 참고 자료
 
    1. 문서
 
        가. Bluetooth Low Energy CC2540/41 Mini Development Kit User's Guide (http://www.ti.com/litv/pdf/swru270c)
            4. Using BTool
            Appendix
        나. Bluetooth Core Specifications 4.0 (https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=229737)
        다. Assigned Numbers for Bluetooth GATT services (http://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx)
 
    2. 소프트웨어

        가. Bluetooth low energy software stack and tools 1.3 (www.ti.com/blestack)
            - KeyFobDemo 애플리케이션과 BTool을 포함하고 있다.

댓글

  1. 질문좀 드려도 될까요? 핸들은 링크가 될때마다 달라질수가 있는것인지요? 아니면 0x003B 처럼 고정된 값인건가요?
    정확하게는 핸들의 의미가 궁금합니다. ^^

    답글삭제

댓글 쓰기

이 블로그의 인기 게시물

Windows에 AMP와 MediaWiki 설치하기

1. 들어가기     AMP는 Apache + MySQL +  Perl/PHP/Python에 대한 줄임말이다. LAMP (Linux + AMP)라고 하여 Linux에 설치하는 것으로 많이 소개하고 있지만 Windows에서도 간편하게 설치하여 사용할 수 있다.       이 글은 Windows 7에 Apache + MySQL + PHP를 설치하고 그 기반에서 MediaWiki를 설치하여 실행하는 과정을 간략히 정리한 것이다. 2. MySQL     * 버전 5.6.12     1) 다운로드         http://dev.mysql.com/downloads/installer/         MySQL Installer 5.6.12         Windows (x86, 32-bit), MSI Installer         (mysql-installer-web-community-5.6.12.0.msi)     2) 다운로드한 MSI 파일을 더블클릭하여 설치를 진행한다.           설치 위치:                   C:\Program Files\MySQL               선택 사항:                       Install MySQL Products             Choosing a Se...

MATLAB Rutime 설치하기

MATLAB Rutime 설치하기 미설치시 에러 MATLAB Runtime 을 설치하지 않은 환경에서 MATLAB 응용프로그램이나 공유 라이브러리를 사용하려고 하면 아래와 같은 에러 메시지가 표시될 것입니다. 처리되지 않은 예외: System.TypeInitializationException: 'MathWorks.MATLAB.NET.Utility.MWMCR'의 형식 이니셜라이저에서 예 외를 Throw했습니다. ---> System.TypeInitializationException: 'MathWorks.MATLAB.NET.Arrays.MWArray'의 형식 이니셜라이저에서 예외를 Throw했습니다. ---> System.DllNotFoundException: DLL 'mclmcrrt9_3.dll'을(를) 로드할 수 없습니다. 지정된 모듈을 찾을 수 없습니다. (예외가 발생한 HRESULT: 0x8007007E) 위치: MathWorks.MATLAB.NET.Arrays.MWArray.mclmcrInitialize2(Int32 primaryMode) 위치: MathWorks.MATLAB.NET.Arrays.MWArray..cctor() --- 내부 예외 스택 추적의 끝 --- 위치: MathWorks.MATLAB.NET.Utility.MWMCR..cctor() --- 내부 예외 스택 추적의 끝 --- 위치: MathWorks.MATLAB.NET.Utility.MWMCR.processExiting(Exception exception) 해결 방법 이 문제를 해결하기 위해서는 MATLAB Runtime 을 설치해야 합니다. 여러 가지 방법으로 MATLAB Runtime 을 설치할 수 있습니다. MATLAB 이 설치되어 있는 경우에는 MATLAB 설치 폴더 아래에 있는 MATLAB Runtime 설치 프로그램을 실행하여 설치합니다. ...

Wi-Fi 카드 2.4GHz로만 동작시키기

Wi-Fi 카드 2.4GHz로만 동작시키기 별도의 Wi-Fi AP 장치를 두지 않고 아래와 같은 기기들로만 Wi-Fi 네트워크를 구성하고자 할 때 주변 기기들이 2.4GHz만 지원하기 때문에 PC에서 실행하는 AP가 항상 2.4GHz를 사용하도록 Wi-Fi 카드를 설정해 주어야 합니다. 기기 Wi-Fi 카드 주파수 대역 Wi-Fi Direct 지원 PC (Windows 10) 2.4GHz, 5GHz O 주변 기기들 2.4GHz X Wi-Fi 카드별 주파수 대역 선택 방법 Windows 시작 메뉴에서 설정 을 클릭합니다. Windows 설정 화면에서 네트워크 및 인터넷 을 클릭합니다. 설정 화면의 왼쪽 메뉴바에서 Wi-Fi 를 클릭합니다. 화면 오른쪽 관련 설정 구역에 있는 어댑터 옵션 변경 을 클릭합니다. 설정을 바꾸고자 하는 Wi-Fi 카드 항목을 선택하고 마우스 오른쪽을 누른 다음 속성 메뉴를 클릭합니다. 대화상자의 네트워킹 탭 화면에 있는 구성 버튼을 클릭합니다. 장치 속성 대화상자의 고급 탭 화면으로 이동합니다. 제시되는 속성 항목들은 제품별로 다르며 자세한 사항은 아래의 제품별 설명을 참고하여 값을 설정하시기 바랍니다. Intel Dual Band Wireless-AC 7265 기술 사양 주파수 대역: 2.4GHz, 5GHz 무선 표준: 802.11ac 주파수 대역 선택 장치 속성 대화상자에서 아래와 같이 선택합니다. Wireless Mode 1. 802.11a => 5GHz 4. 802.11b/g => 2.4GHz (이 항목 선택) 6. 802.11a/b/g => 2.4GHz, 5GHz Intel Dual Band Wireless-AC 8265 기술 사양 주파수 대역: 2.4GHz, 5GHz 무선 표준: 802.11ac 주파수 대역 선택 장치 속성 대화상자에서 아래와 같이 ...