지난번에 설치한 Tizen 관련 환경을 토대로 본격적인 개발에 들어가겠다.


이번에 진행할 부분은 기어의 HRM 센서의 값을 핸드폰으로 전송하는 부분이다.


먼저 기어와 스마트폰의 블루투스 연결을 하고, 기어의 HRM 센서의 값을 받아올 것이다. 그리고 메시지 패킷을 만들어 스마트폰에 HRM 센서의 값을 전송할 것이다. 스마트폰에서는 이를 받아 출력하는 앱을 간단하게 만들 것이다.


- 사용 샘플


BLE : HelloAccessory

HRM Sensor : HRMSensorApp


HelloAccessory는 Provider와 Consumer로 구분되는데 HRM 센서의 값을 받을 것이기 때문에 Provider를 Gear(Tizen)로 Consumer를 Smartphone(Android)으로 하여 진행한다.

HRMSensorApp을 잘 뜯어보면 라이브러리가 잘만들어져 있어 이를 조금만 응용하면 모든 센서의 값들을 받아올 수 있다. 혹은 Sample에 UI -> (Circle)Sensors를 이용하여 센서들의 값을 받고 출력하는 것을 연습할 수 있다.(다만 Gear S3에서는 위의 샘플 프로그램 실행 시 에러) 모든 센서들의 값을 받고 출력하는 것은 다음 포스팅에서 작성하겠다.


샘플의 적용 방법에 관해 설명을 잠깐 하겠다.

HelloAccessory에서 Android는 Connect, Disconnect, Send 기능이 존재한다. BLE 연결 후 Connect(BLE 연결과는 다름 연결 후 한번 눌러야 함)한 상태에서 Send를 누르면 설정한 문구가 전송된다. (Send 시 초기 설정 문구 "Hello Accessory!")


Tizen에서는 SAP(Samsung Accessory Protocol) 를 통해 값을 받으면 이 메시지를 그대로 복사해 다시 Smartphone으로 보내게된다.

필자는 Gear S3에서 값을 받았을 때 다시 Smartphone으로 보내는 과정에서 HRMSensorApp을 사용하여 HRM sensor 값을 Smartphone으로 전송하려 한다.



※ 사용 샘플을 다운받을 수 있는 URL은 본문 마지막에 명시



- 네트워크 환경


Gear - Computer Wifi(같은 네트워크)

Gear - Smartphone : BLE


TIP : Gear S3의 경우 초기설정에서 블루투스 연결 시 와이파이 해제 라는 부분이 체크되어 있다. 이를 해제하고 와이파이를 항상 연결상태로 바꾸면 위의 네트워크 환경을 껏다 킬 필요 없이 항상 유지할 수 있다.

※ TIP : BLE는 SAP 방식의 블루투스를 사용하므로 이를 지원하기 위해 Smartphone에 Samsung Gear 앱을 설치한다. Tizen Studio 에서는 Package Manager에서 Extension SDK - Samsung Wearable Extension 을 설치한다.



- 사용툴

Tizen studio 1.2, werable SDK 2.3.1 (3.0도 가능), Android studio 2.3.1, Android SDK 4.2 (Android SDK 버전은 별로 큰 상관은 없는 듯)



- 순서


1. 위의 프로젝트의 네트워크 환경을 구축한다.


 - Gear S3 <-> Computer : Wifi(using Tizen studio)



 - Gear S3 <-> Smartphone : BLE

  위의 TIP 대로 Samsung Wearalbe Extension 과 Samsung Gear App 이 설치되어야 한다.


2. Smartphone의 작업을 먼저 하도록 하겠다. Android Studio를 실행해서 HelloAccessory를 Import 한다. 위에서 설명했듯이 Provider는 Tizen, Consumer는 Android다. 따라서 Provider(Tizen)_Consumer(Android) 폴더안에서 Consumer를 import한다. (Eclipse에서도 사용 가능)


 - File - open 에서 해당 폴더 선택 후 확인



 - 사용자 개발환경에 따라 아래와 같은 창이나 오류가 뜰 수 있음 적절하게 해결하면 된다. 아래 그림은 내가 Open 중에 나온 창과 오류들이다. 보통의 경우 Build Tool 이 맞지 않아 생기는 오류이므로 클릭만으로 해결가능하다. (설치된 버전에 따라 오류가 안날수도 내용이 다를수도 있다.)



Update 를 누른다.



Update Build Tools version and sync project Open File을 누른다.


- 모든 오류가 해결되면 아래와 같이 정상적으로 프로젝트가 Open된다.



3. Android 소스코드에 대해서는 따로 언급하지 않겠다. 관심 깊게 볼 부분은 ConsumerActivity.java에서 mOnClick 의 buttonSend 부분과 ConsumerService.java에서 ServiceConnection Class의 OnReceive 메쏘드 부분이다. 말 그대로 Send 버튼을 눌렀을 때와 Gear에서 주는 Message를 받았을 때의 처리 부분이다. 이를 원하는 방향으로 수정한다. 필자는 일단 Send Message를 수정하고 다른것은 건드리지 않았다.


4. Build하고 앱을 Smartphone에 설치한다.


 - 다음은 정상 실행 화면


HelloAccessory Consumer 초기 UI


5. Tizen Studio에서 HelloAccessory Provider를 Import한다. (Tizen Studio는 Eclipse와 같은 UI이기때문에 Eclipse를 할 줄 아는 사람은 쉽게 다룰 수 있다. Tizen Studio에서 오류로 튕기거나 Tizen Studio를 작업표시줄에서 오른쪽 클릭하면 Eclipse.exe 라고 뜨는건 안비밀..)


 - 사실 HelloAccessoryProvider를 직접 사용하는 것이 아니라 필요한 파일이 있어서 import 한 것이다 따로 import 안하고 파일만 가져와도 상관없다. 여기서 필요한 파일은 Gear 와 통신할 수 있게해주는 sap.c다.


/---- 생략 가능

 - Import는 Tizen - Tizen Project로 하며 된다.



 - Project 경로를 찾는다.



 - Load된 프로젝트 정보를 확인하고 Import 한다.



 - Import 된 결과



생략 가능 ----/


 - HRMSensorApp도 마찬가지로 Import하자.




 - 정상적으로 import 된 결과



 - HelloAccessory Provider 에서 sap.c 를 src 디렉토리 안에 복사한다.

 

 - sap.c 에서 main_app.h 를 include 한다. (#include "main_app.h")


 - sap.c 에서 update_ui 부분은 프로그램 실행 시 오류를 유발하므로 모두 지운다. (main_app.c 에서도 지울 것이다.)


 - sap.c 에서 on_data_recived 메소드를 보자 (received 를 오타낸 것 같다.) 코드를 보면 받은 데이터와 길이를 DLOG 로 출력해주고 이를 그대로 전송한다. 우리가 수정해야할 부분이다. 이곳을 기억해두고 main_app.c에서 작업을 하자. 주요하게 볼 부분은 on_sensor_event 메소드와 _sensor_start_cb 메소드다.


 - _sensor_satrt_cb에서는 센서 init 부터 실행까지의 코드가 있고(다른 센서를 테스트하고하자할 때 여기서 작업한다.) on_sensor_event 의 경우 실시간으로 실제로 센서 데이터를 받아오는 부분이다. 여기서 원하는 대로 수정하도록 하자. 필자는 HRM의 출력을 위해 HRM 센서의 값을 HRM_data라는 변수에 소수점 1자리까지 저장시켰다.



 - sap 에서 receive 작업을 하기전에 sap를 실행하는 코드를 넣도록 하자 main_app.c 에 app_create 메소드로 가자. 거기서 initialize_sap();를 추가하도록 하자.



 - 이제 sap.c 로 가자. 아까 봐둔 장소에 HRM 센서 값을 message로 넣어 전송하도록 하자. 필자는 HRM 을 측정하기 전 준비단계 및 오류값(-3) 일때는 Not Ready HRM 이라고 표시할 수 있도록 하였다.



-이제 테스트를 해보자. Smartphone 과 Gear에서 모두 앱을 실행해보자. (Network연결 필수)


Gear S3 앱 실행 화면


Start 버튼 클릭


안드로이드 앱에서 Send Test


※ TIP : 센서들의 값을 확인하기 모호한 경우가 있는데 이 경우에는 DLOG 기능을 이용하여 값들을 LOG 창에서 확인하면 된다.




< - Error - >


1. HRMSensorApp에 sap.c 를 복사 후 빌드를 했는데 sap.h 를 못찾는 다는 오류 발생 시  Package Manager에서 Extension SDK - Samsung Wearable Extension 을 설치한다.




- 소스코드 출처


HRMSensorApp : https://developer.tizen.org/community/tip-tech/accessing-heart-rate-monitor-hrm-sensor-data-native-applications?langswitch=en

HelloAccessory : http://developer.samsung.com/gear/develop/sdk# 에서 Accessory SDK를 다운로드 하고 압축을 풀으면 Sample이 있음 혹은 인터넷에 HelloAccessory라고 쳐도 됨.

블로그 이미지

Refrin

일상생활 끄적 IT 프로젝트 끄적

댓글을 달아 주세요

  • 2017.08.25 18:35  수정/삭제  댓글쓰기

    비밀댓글입니다

  • lsh 2018.03.08 14:14 신고  수정/삭제  댓글쓰기

    main_app.c 에서 app_create 메소드에서

    안드로이드와 통신을 위해 initialize_sap(); 를 call하면

    앱이 실행되지 않습니다.

    이 문제에 대해서 조언 좀 구할 수 있을까요?

    ps. tizen-manifest.xml을 수정해서 privilege와 metadata 를 추가해 준 상태이구요.
    res 폴더 안에는 accessoryservices.xml을 복사해다 붙여 놨습니다.