본문 바로가기

AndroidApp/블루투스통신

블루투스 통신 어플 만들기

출처: http://cafe.naver.com/arduinostory/31826


 준비물:

HC-06 블루투스 모듈 

simpleBT.ino


SimpleBT_004 (1).zip


Step.1  아두이노측 준비 


 UNO 

 HC-06 

 Push Button Switch 1개 

 LED 1개 


그림처럼 대충 덕지덕지 붙여서 만듭니다.


LED는 수축튜브안에 200옴 저항 붙어 있습니다.


첨부 소스코드 보면 알 수 있겠지만

HC-06 의 TX는 pin.2

              RX는 pin.3


Push Button Switch 는 pin.4

LED는 pin.5 에 붙어 있습니다.


작동은 최소한으로 간략하게 되어 있습니다.


  1. 폰에서 LED On/Off를 합니다.

  2. Switch 를 누른 횟수는 폰에 표시됩니다.


 Step.2  통신 Protocol 만들기 


이제 통신 Protocol을 만들어 봅시다.


Protocol이라 하면 거창하게 들리지만 별것 없습니다.

  1. 시작과 끝을 명확히 하고

  2. 전달 내용이 있고

  3. 전송 오류가 있는지 checksum 붙이는 정도 입니다.

 

 시작은 '*' 

 끝은 <cr><lf> 로 합니다.

 머 대단한 것도 아닌데 checksum 붙이기는 귀찮아 생략합니다.


  아두이노 --> 안드로이드로 push button 상태를 보냅니다.

    *P11<cr><lf>    1번 push button이 한번 눌렸음.


  안드로이드 --> 아두이노로 LED On/Off를 지시합니다.

    *L10<cr><lf>    1번 LED를 꺼라

    *L11<cr><lf>    1번 LED를 켜라


 Step.3  이클립스 준비하기 


  1. 이클립스를 설치합니다.


    이클립스 설치에 대해서는 사방에 널려있는 문서나 동영상 강의를 참고하세요.

    이 동영상 강의 좋습니다 --> http://www.youtube.com/watch?v=MQJbULj1PcA  

    (이클립스 설치라는 표현은 맞지 않고요, 스케치처럼 다운로드한 상태에서 바로 실행이 됩니다)

  

  2. 첨부 파일 SimpleBT.zip 을 받아 압축을 풀면 SimpleBT 라는 폴더가 만들어 집니다.

 

  3. 이클립스를 시작합니다.

     Select a workspace 라는 조그만 화면이 처음 나오게 되는데 가급적 새로운 Workspace를 지정해 둡니다.

 

  4. SimpleBT 를 import 합니다.

     File > Import > General > Existing Projects into Workspace 에 click하고  Next > 

     Select root directory 에서 SimpleBT 폴더 지정 > Copy projcts into workspace 에 check하고 Finish

 

     "Project has no project.properties file! Edit the project properties to set one.

     라고 빨간 에러 메세지가 뜨지만 무시하고 잠깐 기다리면 없어집니다.


     "String literal is not properly closed by a double-quote"

     라고 나오거나 소스코드의 한글부분이 깨어져 보이면

      Window > Preferences > General > 우측 창으로 가서 Content Types > Text > Java Source File > Default encoding : UTF-8 > Update > OK

   

     이클립스와 API version이 맞지 않아 다량의 에러 메세지를 보게 될 수 있을 지도 모릅니다.

     앱의 API version 은  Package Explorer(좌측 창)에서 SimpleBT > res > project.properities 에 나와 있습니다.

     target=android-18

          

     에러가 대규모로 떠도 절대 당황하지 말고, 메세지를 하나 하나 보면서 시간낭비도 하지 마세요.

    

  5. 가지고 있는 폰이 Galaxy-S3 하나 뿐이라 여기서 코딩하고 테스트 되었습니다.

     Galaxy-S3 는 Android 4.3 API 18 입니다.

     그래서 SimpleBT는 API 18 로 되어 있습니다.


     Window > Android SDK Manager 로 가서 API 18이 설치되어 있는지 확인하고 안되어 있으면 

     API 18에 체크하고 Install Packages를 클릭합니다.


     끝. 이것으로 다 되었습니다.


 Step.4  이클립스에서 안드로이드 코딩하기 


     Package Explorer(좌측 창)에서 SimpleBT > src > arduino.BT.simpleBT 아래에 소스코드가 있습니다.

     

     3개 뿐입니다.

     

     BluetoothService.java --> Bluetooth를 처리하는 코드입니다. 볼 필요는 없습니다.

     DeviceListActivity.java --> Bluetooth paring 결과를 보여주는 코드입니다. 역시 볼 필요는 없습니다.

     MainActivity.java --> 여기만 수정하면 됩니다.

     

     정말 심플하게도 버턴 두개 숫자판 하나가 전부 입니다.






 1. 버턴 두개와 숫자판 하나를 XML로 그리기

     

     버턴 두개와 숫자판 하나를 폰 화면에 띄워주는 코드는 XML 입니다.

     

     Package Explorer(좌측 창)에서 SimpleBT > res > layout > main.xml 에서 확인 하세요

     

     XML은 오직 가독성이니까 대충 봐도 직관적으로 코드 내용을 이해 할 수 있으니 중요한 부분만 봅니다.


     <Button

       android:onClick="LedON"  --> 이 버턴은 LedON() 이라는 java function을 호출 합니다.


     <Button     

       android:onClick="LedOFF" --> 같은 방법으로 LedOFF() 가 호출됩니다.

     

     <TextView

       android:id="@+id/PushButtonCount" --> PushButtonCount 는 숫자를 표시할 부분의 id 입니다.


  2. 숫자판을 Java code에 연결하기 


     MainActivity.java에서 다음 코드를 찾아 봅니다. 

     

     //*************************************************************************

     // Arduino Interface

     //*************************************************************************

     private TextView mPushButtonCount; 

     private int pushCount = 0;


     mPushButtonCount = (TextView) findViewById(R.id.PushButtonCount);   //이제 mPushButtonCount 가 숫자판입니다.



  3. 아두이노에서 온 데이타 처리하기     


    //*************************************************************************

    // Arduino Interface (아두이노에서 수신)

    //*************************************************************************

    if( readBuf[0] == '*' &&

      readBuf[1] == 'P' &&

      readBuf[2] == '1' &&

      readBuf[3] == '1' ){      //*P11<cr><lf> 인거죠

       pushCount++;

       mPushButtonCount.setText("" + pushCount);    //count를 증가시키고 숫자판에 보여 줍니다.

    }


  4. 아두이노로 데이타 보내기


    //*************************************************************************

    // Arduino Interface (아두이노로 전송)

    //*************************************************************************

    public void LedON(View view){     

     sendMessage("*L11\r\n");        //*L11<cr><lf>    1번 LED를 켜라

    }

    public void LedOFF(View view){

     sendMessage("*L10\r\n");        //*L10<cr><lf>    1번 LED를 꺼라

    }



  5. 블루투스 페어링은 옵션 메뉴 키에서 처리 합니다.

  해당 디바이스를 클릭하면 연결을 시작합니다.

  주변에 있는 디바이스를 찾아 볼려면 아래 버턴 'Scan for devices' 를 클릭합니다.

     



 앱이 시작되면 마지막에 성공적으로 연결된 디바이스와 연결을 시도 합니다.

 매번 수동으로 페어링을 하지 않아도 됩니다.