2016년 10월 3일 월요일

CommBluetooth

아두니티에서 블루투스 통신을 하려면 CommBluetooth를 사용해야 합니다.


CommBluetooth는 Bluetooth SPP 통신을 의미하고 안드로이드에서만 사용할 수 있습니다.
PC에서 블루투스 통신을 할 때는 CommBluetooth가 아닌 CommSerial을 사용해야 합니다. 그 이유는 Windows/Mac에서는 Bluetooth SPP가 시리얼 포트를 통해 이루어지기 때문입니다.
CommBluetooth가 iOS를 지원하지 않는 이유는 Bluetooth SPP의 경우 Apple에 별도 인증을 받은 모듈만 가능하기 때문입니다.
즉, 일반 블루투스 장치를 통해 Bluetooth SPP 통신을 하려면 안드로이드에서만 가능합니다.
CommBluetooth의 Inspector 설정은 다음과 같습니다.
  • searchTimeout: 블루투스 장치 검색 시간
  • OnOpen: 블루투스 장치가 연결되었을 때
  • OnClose: 블루투스 장치 연결이 해제되었을 때
  • OnOpenFailed: 블루투스 장치 연결을 실패했을 때
  • OnErrorClosed: 블루트스 장치 연결이 강제로 해제되었을 때
  • OnStartSearch: 블루투스 장치 검색이 시작되었을 때
  • OnStopSearch: 블루투스 장치 검색이 종료되었을 때
CommBluetooth를 사용하려면 ArdunityApp과 연결되어야 합니다.

유니티 에디터에서는 CommBluetooth를 테스트할 수 없는데, 그 이유는 실제 안드로이드 기기에서만 작동되기 때문입니다.
따라서, 회로 작동 제어를 테스트할 때는 CommSerial을 사용하고 안드로이드 기기에서 테스트할 때만 CommBluetooth를 연결하여 사용할 것을 추천합니다.
유니티 에디터에서 테스트할 때는 각 컴포넌트의 Inspector 메뉴를 사용할 수 있었지만, 빌드가 된 이후에는 오직 GUI로만 테스트해야 합니다.
유니티 에디터에서는 Inspector 메뉴를 이용해 테스트할 수 있다.

유니티 빌드 후에는 GUI가 있어야 테스트할 수 있다.

이 말은 CommBluetooth를 사용하기 위해서는 먼저 유니티 UI로 사용자가 조작할 수 있는 GUI를 만들어줘야 한다는 의미입니다.
아두니티에는 CommBluetooth 테스트를 위해 예제를 제공하고 있습니다.
(ARDUnity/Examples/ConnectionUI/BluetoothConnection)
이 예제를 사용하면 CommBluetooth를 위한 GUI를 쉽게 구현할 수 있습니다.
기본으로 Connect/Quit 버튼이 생깁니다.

블루투스 장치 검색 및 선택을 위한 UI가 있습니다.

이제 남은 것은 유니티에서 안드로이드 빌드를 해서 APK파일을 만드는 것입니다.
유니티에서 안드로이드 빌드 절차는 "유니티 안드로이드 빌드" 글을 참고하시기 바랍니다.
그냥 안드로이드 빌드를 하면 블루투스 장치가 검색되지 않는 문제를 겪게 될 것입니다.
이 문제가 발생하는 이유는 한 가지를 빼먹었기 때문인데, 바로 AndroidManifest.xml을 수정하지 않았기 때문입니다.

모든 안드로이드 앱은 AndroidManifest.xml을 갖고 있으며 이 파일에는 앱 관리 및 실행에 필요한 모든 정보가 기입되어 있습니다.
AndroidManifest.xml 파일의 내용 예

여러분이 이 파일을 직접 작성하는 것이 아니고 Android Studio와 같은 안드로이드 앱 개발 도구가 자동으로 만들어줍니다.
유니티도 마찬가지로 AndroidManifest.xml 파일을 자동으로 만들어주기때문에 여러분들이 신경쓸 필요가 없었습니다.
문제는 유니티가 제공해주지 않는 기능을 사용할 때는 여러분이 직접 AndroidManifest.xml을 수정해야 한다는 것입니다.
블루투스 통신은 유니티가 제공하지 않는 기능입니다. 안드로이드 블루투스와 유니티가 서로 연결되도록 하는 것은 아두니티의 역할입니다.
그러나, 여러분이 만든 앱의 실행 권한은 여러분이 직접 AndroidManifest.xml에 기입해줘야 합니다.
작성할 주 내용은 다음과 같습니다.
  • 본 앱은 블루투스 장치를 사용합니다.
    <uses-permission android:name="android.permission.BLUETOOTH"/>
  • 본 앱은 블루투스 장치 관리자 권한이 필요합니다.
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
  • 본 앱이 실행하는 기기에는 블루투스 장치가 내장되어야 합니다.
    <uses-feature android:name="android.hardware.bluetooth" android:required="true"/>
위와 같은 내용을 AndroidManifest.xml에 삽입해야 블루투스 장치를 검색하고 테스트할 수 있습니다.

아두니티는 이런 번거로움을 최소화하기 위해 미리 수정된 AndroidManifest.xml 파일을 제공합니다. 따라서, 여러분은 이 파일을 사용하면 AndroidManifest.xml파일을 찾거나 수정하는 번거로움없이 블루투스 통신을 성공할 수 있습니다.
먼저, 아두니티 에셋에서 AndroidManifest.xml파일을 찾습니다.
(ARDUnity/Plugins/Android/AndroidManifest.xml)
그 다음으로 Project Window에서 Plugins/Android 폴더를 만듭니다.
이 에셋 폴더를 만드는 이유는 유니티가 수정된 AndroidManifest.xml를 Plugins/Android 폴더에서 찾기 때문입니다.
마지막으로 아두니티 에셋에 있는 AndroidManifest.xml 파일을 복사하여 앞에서 만든 Plugins/Android 폴더에 넣습니다.

이 과정을 마친 다음 다시 유니티에서 안드로이드 빌드를 한 후 스마트 기기에서 앱을 실행하면 블루투스 장치가 검색되는 것을 확인할 수 있습니다.

만약, 다른 에셋이 이미 수정된 AndroidManifest.xml을 사용하고 있어서 아두니티 에셋의 AndroidManifest.xml파일을 복사할 수 없는 경우는 앞에서 언급한 내용을 직접 이미 사용 중인 AndroidManifest.xml에 삽입하면 됩니다.

댓글 2개:

  1. 如果有這篇能有影片輔助教學,我會很感激您的!

    답글삭제
    답글
    1. I would like to ask you a question on the ARDUnity Forum.
      (https://groups.google.com/forum/#!forum/ardunity-forum)

      삭제