기본 콘텐츠로 건너뛰기

[BLE] TI CC2540 Mini DK 사용하기 - JavaSimplePeripheral 프로그램


1. 들어가기

    USB 동글과 KeyFob이 서로 연결되어 있는 상태에서 PC 프로그램인 JavaSimplePeripheral을 사용하여 다음 두 가지를 테스트해 보았다.
 
        1) KeyFob의 단추 누름 상태를 Notification 방식으로 전송하도록 JavaSimplePeripheral이 KeyFob의 설정을 변경한다.
        2) JavaSimplePeripheral은 KeyFob의 단추 누름 상태를 전송받아서 화면에 표시한다.

2. 이미지 다운로드

    USB 동글에는 HostTestRelease 이미지, 그리고 KeyFob에는 SimpleBLEPeripheral 이미지를 SmartRF Flash Programmer 프로그램을 이용하여 각각 다운로드한다. HostTestRelease는 외부 장치로부터 HCI 명령을 전달받아서 실행하고, 이벤트나 응답을 외부 장치로 전달하는 역할을 수행한다. SimpleBLEPeripheral은 Simple Keys Service를 구현하고 있다.

    2.1 USB 동글용 프로젝트 및 이미지 위치
 
        프로젝트:
         
            BLE-CC254x-1.3\Projects\ble\HostTestApp\CC2540\HostTestRelease.eww
         
        이미지:
     
            BLE-CC254x-1.3\Accessories\HexFiles\CC2540_USBdongle_HostTestRelease_All.hex

    2.2 KeyFob용 프로젝트 및 이미지 위치
 
        프로젝트:
         
            BLE-CC254x-1.3\Projects\ble\SimpleBLEPeripheral\CC2540DB\SimpleBLEPeripheral.eww

        이미지:
     
            BLE-CC254x-1.3\Accessories\HexFiles\CC2540_keyfob_SimpleBLEPeripheral.hex
     
3. BTool로 테스트하기

    BTool을 사용하여 USB 동글과 KeyFob을 서로 연결하고 Simple Keys Service에 대한 attribute 테이블을 파악한 다음 Client Characteristic Configuration descriptor의 값을 Notification으로 설정한다.

    3.1 장치 발견 및 연결

        1) USB 동글을 PC에 연결한다. 장치 관리자에서 USB 동글의 포트 번호를 확인한다.
        2) BTool을 실행한다. 직렬포트 설정 대화 상자에서 USB 동글의 포트 번호를 지정한다. 다른 항목은 기본으로 설정된 값을 사용한다.
        3) KeyFob의 오른쪽 버튼(B3)을 눌러 Discoverable 모드로 진입한다.
        4) BTool의 Discover/Connect 탭에서 장치 발견 및 연결을 실행한다.
            - 'Discovery' 섹션의 'Scan' 버튼을 누른다. 잠시 후 "Devices Found"의 값이 1로 바뀌는 것을 확인한다.
            - 'Link Control' 섹션의 Slave BDA에서 발견된 장치의 주소를 선택하고 'Establish' 버튼을 누른다. 왼쪽 패널에 "Connection info" 항목이 추가되는 것을 확인한다.

    3.2 Simple Keys Service
 
        Simple Keys Service에 대한 UUID는 0xFFE0이고, BTool의 Adv.Commands 탭에서 GATT_DiscAllCharDesc 명령을 실행하면 아래와 같은 attribute 테이블을 얻을 수 있다.
     
            Handle  Type    Value               Permissions     Notes
            0x0034  0x2800  E0:FF               Read            Start of Simple Keys Service
            0x0035  0x2803  10:36:00:E1:FF      Read            Key Press State characteristic declaration
            0x0036  0xFFE1  00                  (none)          Key Press State characteristic value
            0x0037  0x2902  00:00               Read/Write      Key Press State characteristic configuration
            0x0038  0x2901  "Key Press State"   Read            Key Press State characteristic user description
     
    3.3 Notification 설정하기
 
        BTool의 Read/Write 탭을 열고 Characteristic Write 영역에서 핸들과 값을 아래와 같이 지정한 후 Write 버튼을 누른다.

            핸들: 0x0037
            값: 01:00
 
    3.4 테스트
 
        KeyFob의 왼쪽, 오른쪽 단추를 눌러 가면서 BTool의 로그창에 표시되는 값을 확인한다.
     
            0: 단추 누르지 않음
            1: 왼쪽 단추 누름
            2: 오른쪽 단추 누름
            3: 왼쪽, 오른쪽 단추 동시에 누름
 
4. JavaSimplePeripheral으로 테스트하기

    4.1 다운로드 위치
 
        http://processors.wiki.ti.com/index.php/Category:JavaSimplePeripheral
     
    4.2 eclipse 프로젝트로 import
 
        1) Select an import source:
            General - Existing Projects into Workspace
         
        2) Select root directory: <Location of the extracted JavaSimplePeripheral>
            Copy projects into workspace: Checked
 
    4.3 빌드 문제 수정
 
        프로젝트의 Build Path 설정을 보면 Libraries로 아래 네 가지 항목이 포함되어 있을 것이다. 이 중에서  RXTXcomm.jar만 남기고 나머지 세 개는 제거한다.
     
            RXTXcomm.jar
            rxtxParalle.dll
            rxtxSerial.dll
            SoftNetConsultUtils.2.01.slim.jar
 
    4.4 라이브러리 복사
 
        프로젝트 lib 디렉토리에 있는 세 개의 파일을 아래의 위치로 복사한다.
     
            %JAVA_HOME%\bin\rxtxParallel.dll
            %JAVA_HOME%\bin\rxtxSerial.dll
            %JAVA_HOME%\lib\ext\RXTXcomm.jar
     
    4.5 실행시 링크 에러 수정
 
        프로젝트에 포함되어 있는 RXTX 라이브러리는 32비트 버전인데, 64비트 JDK를 사용하고 있다면 링크 에러가 발생할 것이다.
     
            java.lang.UnsatisfiedLinkError: C:\Program Files\Java\jdk1.7.0_06\bin\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform thrown while loading gnu.io.RXTXCommDriver
     
        아래의 위치에서 64비트용 RXTX 라이브러리를 다운로드하여 설치한다.
     
            http://www.cloudhopper.com/opensource/rxtx/
         
    4.6 소스 코드 수정
 
        JavaSimplePeripheral을 실행하여 COM 포트를 지정하고 Connect 단추를 누르면 다음 세 가지 작업을 순차적으로 수행할 것이다.
     
            KeyFob 찾기
            KeyFob에 연결하기
            Key Press State에 대하여 Notification 설정하기
         
        만약 아래와 같은 메시지가 출력된다면 COM 포트를 제대로 지정했는지 확인해 보고, 이상이 없다면 KeyFob의 오른쪽 버튼(B3)을 눌러 Discoverable 모드로 진입하게 한 다음 다시 Connect 버튼을 눌러 본다.
     
            Error connecting to the device.
            Remove and insert again the USB dongle from the USB slot, restart the
             application and try again.
     
        KeyFob을 찾을 수 있었다면 다음과 같은 메시지를 출력할 것이다.
     
            Device found
            Enabling Key Notifications start:
            Enabling Key Notifications end:
 
        그럼에도 불구하고 Key Notify ON / Key Notify OFF 두 개의 단추가 활성화 되지 않는다면 아래 두 군데서 Key Press State characteristic configuration에 접근하기 위한 핸들값을 BTool을 통하여 파악한 값으로 바꾸어 준다.
     
            출력 버퍼의 9번째 바이트: 0x0020 ==> 0x0037
 
            < ConnectionManager.java >
     
                public void simpleKeysEnabler() {
                    System.out.println("Enable Keys \n");
                    //int[] outputBuffer ={ 0x01, 0x12, 0xfd, 0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00 };
                    int[] outputBuffer ={ 0x01, 0x12, 0xfd, 0x08, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x01, 0x00 };
                    new SerialWriter(this.sp,outputBuffer).write();
                }

                public void simpleKeysDisabler() {
                    System.out.println("Disable Keys\n");
                    //int[] outputBuffer ={ 0x01, 0x12, 0xfd, 0x08, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00 };
                    int[] outputBuffer ={ 0x01, 0x12, 0xfd, 0x08, 0x00, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00 };
                    new SerialWriter(this.sp,outputBuffer).write();
                }
         
    4.7 테스트
 
        KeyFob의 왼쪽, 오른쪽 단추를 눌러 가면서 eclipse의 Console 창에 표시되는 값을 확인한다.
     
            0: 단추 누르지 않음
            1: 왼쪽 단추 누름
            2: 오른쪽 단추 누름
            3: 왼쪽, 오른쪽 단추 동시에 누름
 
부록. 참고 자료

    1. 문서

        가. Bluetooth Low Energy CC2540/41 Mini Development Kit User's Guide (http://www.ti.com/litv/pdf/swru270c)
            5.3 Using SmartRF Flash Programmer Software
        나. CC2540/41 Bluetooth Low Energy Software Developer's Guide (http://www.ti.com/lit/pdf/swru271)
            4.3 SimpleBLEPeripheral Sample Project
            4.5 HostTestRelease Network Processor Project
        다. TI BLE Vendor Specific HCI Reference Guide
            BLE-CC254X-1.3\Documents\TI_BLE_Vendor_Specific_HCI_Guide.pdf

    2. 소프트웨어

        가. Bluetooth low energy software stack and tools 1.3 (www.ti.com/blestack)
            - 예제 애플리케이션과 BTool을 포함하고 있다.
        나. SmartRF Flash Programmer 1.12.6 (www.ti.com/tool/flash-programmer)

댓글

이 블로그의 인기 게시물

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 주파수 대역 선택 장치 속성 대화상자에서 아래와 같이 ...