ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Raspberry Pi 3와 Android 앱 간에 Bluetooth 통신 테스트
    Raspberry Pi/Bluetooth 2019. 11. 26. 22:02





    bluetoothctl 명령을 사용하여 Bluetooth 모듈이 내장되어 있는 Raspberry Pi 3와  안드로이드폰 간에 페어링을 하고나서 Bluetooth 통신 테스트를 진행했습니다.


    Android 앱에서 문자열을 전송하면 Raspberry Pi 3에서 실행 중인 서버 프로그램이 문자열을 에코해줍니다.




    다음 순서로 진행합니다. 



    1. Raspberry Pi 3와 안드로이드폰 페어링


    2. Raspberry Pi 3의 Bluetooth 에코 서버와 Android앱 간의 통신 테스트




    2016.07.03 - 최초작성

    ~~~~~~~~

    2019.11.26





    Raspberry Pi 3와 안드로이드폰 페어링


    1. 페어링 작업 중 폰의 화면이 꺼지지 않도록 화면 켜짐 유지로 설정을 변경합니다.





    2. Raspberry Pi 3에서 검색할 수 있도록 폰에서 블루투스 설정 화면을 띄워놓습니다. 





    3. Raspberry Pi 3의 터미널에서 안드로이드폰과  페어링을 하기 위해서 bluetoothctl  명령을 실행합니다.


    pi@raspberrypi:~ $ bluetoothctl




    4. 폰의 블루투스 모듈 맥어드레스를 검색합니다.

    폰화면이 꺼지지 않아야 검색이 되며 폰의 이름이 보일 때까지 기다려야 합니다.


    [bluetooth]# scan on
    Discovery started
    [CHG] Controller B8:27:EB:DA:FA:66 Discovering: yes
    [CHG] Device 6D:C7:0B:20:60:50 RSSI: -79
    [CHG] Device 78:D7:A5:67:52:90 RSSI: -86
    [CHG] Device 04:52:C7:7C:5E:BF RSSI: -72
    [CHG] Device 04:52:C7:7C:5E:BF TxPower: 4
    [CHG] Device A8:7C:01:FD:ED:A1 RSSI: -81
    [NEW] Device D0:13:FD:EE:43:2E V20
    [CHG] Device 78:D7:A5:67:52:90 ManufacturerData Key: 0x004c




    5. 폰의 블루투스 모듈 맥어드레스를 확인했으면 검색을 중지하고 에이전트를 활성화 합니다.


    [bluetooth]# scan off
    [CHG] Device 72:E4:6C:89:73:CF RSSI is nil
    [CHG] Controller B8:27:EB:DA:FA:66 Discovering: no
    Discovery stopped
    [bluetooth]# agent on
    Agent registered
    [bluetooth]# default-agent
    Default agent request successful




    6. 안드로이드폰과 페어링을 진행하기 위해  pair 명령과 안드로이드 폰의 블루투스 모듈 맥어드레스를 같이 적어주면 페어링이 진행됩니다.


    화면에 보이는 passkey를 확인하고..


    [bluetooth]# pair D0:13:FD:EE:43:2E
    Attempting to pair with D0:13:FD:EE:43:2E
    [CHG] Device D0:13:FD:EE:43:2E Connected: yes
    Request confirmation
    [agent] Confirm passkey 020589 (yes/no): 



    안드로이드 폰에서 키값이 동일하다면  등록을 선택합니다. 




    라즈베리파이에서 yes를 입력하고 엔터를 입력합니다. 


    [bluetooth]# pair D0:13:FD:EE:43:2E
    Attempting to pair with D0:13:FD:EE:43:2E
    [CHG] Device D0:13:FD:EE:43:2E Connected: yes
    Request confirmation
    [agent] Confirm passkey 020589 (yes/no): yes



    안드로이드 폰에서 페어링이 완료된 것을 볼 수 있습니다. 




    라즈베리파이에서도 페어링 성공여부가 확인됩니다.


    [bluetooth]# pair D0:13:FD:EE:43:2E
    Attempting to pair with D0:13:FD:EE:43:2E
    [CHG] Device D0:13:FD:EE:43:2E Connected: yes
    Request confirmation
    [agent] Confirm passkey 020589 (yes/no): yes
    [CHG] Device D0:13:FD:EE:43:2E Modalias: bluetooth:v00C4p13A1d1000
    [CHG] Device D0:13:FD:EE:43:2E UUIDs: 00001105-0000-1000-8000-00805f9b34fb
    [CHG] Device D0:13:FD:EE:43:2E UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
    [CHG] Device D0:13:FD:EE:43:2E UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
    [CHG] Device D0:13:FD:EE:43:2E UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
    [CHG] Device D0:13:FD:EE:43:2E UUIDs: 00001112-0000-1000-8000-00805f9b34fb
    [CHG] Device D0:13:FD:EE:43:2E UUIDs: 00001116-0000-1000-8000-00805f9b34fb
    [CHG] Device D0:13:FD:EE:43:2E UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
    [CHG] Device D0:13:FD:EE:43:2E UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
    [CHG] Device D0:13:FD:EE:43:2E UUIDs: 00001132-0000-1000-8000-00805f9b34fb
    [CHG] Device D0:13:FD:EE:43:2E UUIDs: 00001200-0000-1000-8000-00805f9b34fb
    [CHG] Device D0:13:FD:EE:43:2E UUIDs: 00001800-0000-1000-8000-00805f9b34fb
    [CHG] Device D0:13:FD:EE:43:2E UUIDs: 00001801-0000-1000-8000-00805f9b34fb
    [CHG] Device D0:13:FD:EE:43:2E ServicesResolved: yes
    [CHG] Device D0:13:FD:EE:43:2E Paired: yes
    Pairing successful




    7. 페어링 완료후, trust 명령을 해줘야 합니다.


    [bluetooth]# trust D0:13:FD:EE:43:2E
    [CHG] Device D0:13:FD:EE:43:2E Trusted: yes
    Changing D0:13:FD:EE:43:2E trust succeeded




    8. quit 명령으로 bluetoothctl를 종료합니다.


    [bluetooth]# quit
    Agent unregistered
    [DEL] Controller B8:27:EB:DA:FA:66 raspberrypi [default]
    pi@raspberrypi:~ $




    Raspberry Pi 3의 블루투스 에코 서버와 Android앱 간의 통신 테스트

    1. C/C++ 컴파일러와 관련 라이브러리, make 같은 도구들이 포함되어 있는 build-essential 패키지를 설치해줍니다. 

    다음처럼 이미 설치되어 있을 수도 있습니다. 


    pi@raspberrypi:~ $ sudo apt-get install build-essential
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    build-essential is already the newest version (12.3).
    0 upgraded, 0 newly installed, 0 to remove and 73 not upgraded.




    2. 예제 코드를 컴파일 해줍니다. 코드는 다음 포스트 마지막에 있습니다. 


    Raspberry Pi 3 블루투스 페어링 방법(bluetoothctl) 및 C언어 블루투스 서버 예제

    https://webnautes.tistory.com/1137 


    pi@raspberrypi:~ $ gcc bluetooth_server.c -o bluetooth_server -lbluetooth  -lpthread



    컴파일시 다음과 같은 에러가 나면  libbluetooth-dev 패키지가 설치 안되어 있어서 입니다.


    pi@raspberrypi:~ $ gcc bluetooth_server.c -o bluetooth_server -lbluetooth  -lpthread
    bluetooth_server.c:6:33: fatal error: bluetooth/bluetooth.h: No such file or directory
    #include <bluetooth/bluetooth.h>
                                    ^
    compilation terminated.



    libbluetooth-dev 패키지에는 블루투스 프로그래밍을 하기 위해 필요한 라이브러리가 포함되어 있습니다. 설치 해주고 나서 ..


    pi@raspberrypi:~ $ sudo apt-get install libbluetooth-dev



    다시 컴파일해보면 문제 없이 완료됩니다.


    pi@raspberrypi:~ $ gcc bluetooth_server.c -o bluetooth_server -lbluetooth  -lpthread
    pi@raspberrypi:~ $




    3. 실행시켜 보면 세그멘테이션 폴트(Segmentation Fault)가 발생합니다. 


    pi@raspberrypi:~ $ ./bluetooth_server
    Registering UUID 00001101-0000-1000-8000-00805f9b34fb
    Segmentation fault




    에러를 해결하기 위해서는 SDP Server를 활성화시켜 줘야합니다.

    dbus-org.bluez.service 파일을 편집기로 열어서 


    pi@raspberrypi:~ $ sudo nano /etc/systemd/system/dbus-org.bluez.service



    아래 부분을 찾아서 빨간색 부분을 추가해줍니다.


    ExecStart=/usr/lib/bluetooth/bluetoothd --compat




    4. 재부팅해줘야 설정이 적용됩니다. (데몬 재시작으로는 반영이 안됩니다.)


    pi@raspberrypi:~ $ sudo reboot




    5. 재부팅 완료 후,  퍼미션 문제를 해결하기 위해 다음 한줄을 실행합니다.

    재부팅할때 마다 실행시켜 주어야 세그멘테이션 폴트가 나지 않습니다. 


    pi@raspberrypi:~ $ sudo chmod 777 /var/run/sdp



    부팅할때 마자 실행되도록   홈디렉토리에 있는 .bashrc 파일 끝에 추가해두어도 됩니다. 


    pi@raspberrypi:~ $ sudo nano ~/.bashrc




    페어링은 한번 해주면  다시 할 필요가 없습니다.



    6. Raspberry Pi에서 블루투스 서버를 실행시킵니다.


    pi@raspberrypi:~ $ ./bluetooth_server




    7. 안드로이드앱을 실행시킨 후,  페어링된 디바이스 목록에서 raspberrypi를 선택합니다.




    테스트에 사용한 Android 앱 소스코드는 다음 포스팅에 있습니다.



    Android와 PC JAVA 프로그램 간 블루투스 통신 예제

    http://webnautes.tistory.com/849 





    8. Raspberry Pi에서 실행중인 서버에 연결되면 앱 상단에 다음과 같은 메시지가 보입니다.

    connected to raspberrypi





    9. Raspberry Pi의 터미널에서 폰의 블루투스 모듈 맥어드레스를 보여주며 접속되었다는 것을 알려줍니다. 





    10. 폰에서 문자열을 입력 한 후, SEND를 터치하면...





    11. Raspberry Pi의 터미널에서 수신한 문자와 다시 에코에서 보낸 문자를 보여줍니다. 





    12. 폰에서도 전송한 문자(Me:)와 Raspberry Pi로부터 수신 받은 문자열(raspberrypi:)을 확인 할 수 있습니다. 





    13. 앱에서 백버튼을 눌러서 종료하면  서버도 같이 종료됩니다. 






    포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
    댓글로 알려주시면 빠른 시일내에 답변을 드리겠습니다.

    여러분의 응원으로 좋은 컨텐츠가 만들어집니다. 지금 본 내용이 도움이 되었다면 후원 또는 유튜브 구독 부탁드립니다. 감사합니다 : )

    유튜브 구 독 하 기
    후 원 하 기


    댓글 170

    • 이전 댓글 더보기
    • starter 2018.11.26 11:22


      예제따라 열심히 공부하고 있는 학생입니다.
      리눅스 서버 구현을 C가 아닌 자바스크립트로 할 수는 없는건가요?
      자바스크립트로 연동하는 안드로이드와 리눅스 사이의 블루투스통신에 대해 아무리 구글링해봐도 원하는 자료를 얻기 힘들어 댓글 남깁니다...

    • 정용원 2018.12.19 00:57


      안녕하세요. 라즈베리파이로 홈iot 시스템 구축을 하는 프로젝트를 하고있습니다.

      좋은 정보 남겨주셔서 감사드립니다.

      제가 여쭤보고싶은 건. 지금 C파일로 작성된 블루투스 서버는 앱에서 종료하게되면 세션이 종료가 되는데

      앱 종료가 안되도 블루투스 연결이 해제가 안되게 할 수 있나요?

      항상 좋은 정보 감사합니다.

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2018.12.19 10:28 신고


        안드로이드가 접속을 끊어도 블루투스 서버가 종료되지 않게 하는걸 물어보신거라면..

        다음처럼 수정하면 되지 않을까 싶습니다.

        int main()
        {
        while(1){
        int client = init_server();


        while(1)
        {
        char *recv_message = read_server(client);
        if ( recv_message == NULL ){
        printf("client disconnected\n");
        break;
        }

        write_server(client, recv_message);
        }
        }
        }

    • dbstjdlk 2018.12.26 21:15


      잘보았습니다.
      질문이 하나 있는데 라즈베리파이에서 make discoverable 를 해서 핸드폰에서 블루투스 탐색 후
      연결 신청하면 라즈베리파이에 페어링 요청 확인이 뜨는데
      요것을 자동으로 수락하게 하는 방법이 무엇이 있을까요?

    • 윤진 2019.05.07 20:13


      포스팅 정말 잘 보았습니다. 궁금한 점이 있어 질문드립니다.

      라즈베리파이 3 b+, 무게 센서를 통해 0이상의 값이 인식되어 물체가 인지되면, 제가 만든 앱으로 센서 값을 보내주고 싶은데요,
      Thonny 파이썬을 실행시켜서 python코드를 통해 센서 값을 읽는 코드를 실행하고,터미널창에서 해당 파이썬 코드를 실행시킴으로써 값을 출력하여 확인할 수 있는 상태입니다.

      해당 포스팅을 보고 이해한 내용으로는, 블루투스 서버 c파일 코드의 write_server 함수를 통해 앱으로 데이터를 전송할 수 있는데,,
      토니 파이썬과 터미널창으로 구한 센서 값을, write_server함수에서는 알 수 없을텐데,, 어떻게 앱으로 보낼 수 있을지 잘 모르겠네요.ㅠ.ㅠ

      아니면 다른 좋은 방법은 없을까요? ㅠㅠ 감사합니다..

    • 윤진 2019.05.07 22:29


      네 ㅠ 답변 정말 감사합니다.
      혹시.. 센서를 인식하는 코드를 c 로 작성한 후
      님이 올려주신 bluetooth_server.c 서버 코드와 합쳐서 이용하면 가능한 것인가요?
      main에서 while로 센서 값을 읽다가, 조건에 부합하면 write_server 부분으로 앱에 전송하는 식으로
      구현하면 가능할까요?

      감사합니다...

    • 동삭동칼잽이 2019.05.10 18:56


      안녕하세요 올려주신 게시물 천천히 읽고 댓글도 보며 열심히 따라하고 있는 라즈베리파이 초짜입니다.

      친절하신 설명과 캡쳐본 정말 감사합니다.

      도움이 많이 되고있습니다.

      몇가지 실행중 난관이 있어 이어나가지 못하는데요. 비슷한 사례가 댓글에 있어 따라해보았지만 잘 안되드라구요...
      ㅠㅠㅠ 너무 답답하여 댓글 남겨봅니다ㅜ

      안드로이드 핸드폰과 라즈의 블루투스 페어링을 시도하고있는데요.
      안드로이드 핸드폰 어플에 라즈베리파이를 connect 시키고 싶습니다.

      'pair 맥어드레스' -> yes -> 휴대폰과 connected yes -> Paired successful 이 뜨고난뒤 1초뒤 바로 conneced no 가 뜹니다. trust는 성공이라 뜨고요ㅠㅠ info 어드레스해서 보았을 때 pair yes,trust yes는 뜨지만 connected 는 no 입니다... 그래서 어플에 자꾸 not connected라 뜹니다. 어디가 잘못되어서 이렇게 된것인지 여쭈어도 될까요...

      또 하나 'sudo chmod 777 /var/run/sdp' 후 파일을 찾을 수 없다고 하여 말씀하신 'sudo apt-get install libbluetooth-dev'도 해보았지만 여전히 되지않습니다... '/var/run/sdp' 는 무슨의미인가요??

      아직 초짜이지만 사소한 점부터 궁금한 점이 너무 많습니다ㅠㅠ 질문이 많아서 죄송합니다 답변해주시면 감사합니다...

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.10 19:32 신고


        원래 다음 포스트를 진행하고 나서 하는 거라 내용이 빠져있습니다.
        따라 진행하신 후.. 지금 보고 있는 포스트를 진행하면 문제 없을 겁니다.
        그리고 "Bluetooth 서버 예제 테스트" 부분에서 --compat 추가하는 부분을 참고하세요.

        Raspberry Pi 3 블루투스 페어링 방법(bluetoothctl) 및 C언어 블루투스 서버 예제
        https://webnautes.tistory.com/1137

    • 동삭동칼잽이 2019.05.10 20:49


      성공했습니다ㅠㅠ 정말 감사합니다!! 하트 이모티콘까지 라즈베리파이에 전송됩니다. 정말 감사합니다!!!!!!

    • 라즈베리베리 2019.05.24 08:19


      안녕하세요 라즈베리를 배우고있는 학생입니다.질문이있는데 라즈베리와 폰간에 블루투스가 연결이되었는디 앱을열고 블루투스를 찾으면 연결이 되지않습니다. 이럴땐 어떻게해야하나요

    • 라즈베뤼파이 2019.05.27 09:08


      안녕하세요 .
      라즈베리파이로 핸드폰과 블루투스 연결은 되어서 파일까지 전송이 되는데
      핸드폰에서 앱을켜 라즈베리파이의 블루투스와 연결을 시도하면 되지않습니다.
      이문제는 어떻게 해야하나요?

    • youmg 2019.05.29 23:55


      read sever 함수에서 system함수호출하고 서버에 시그널 ctrl c주고나서 다시 라즈베리파이에서 서버키면 bind값이 -1나오면서 무한루프를돌개되는데 ㅜㅜ해결방안있을ㅋ가요? System(omxplayer) 넣는순간 서버한테시그널주면 그대로 계손반복되네요ㅜㅜ

      • youmg 2019.05.30 02:13


        bind 에 perror 해서확인해보니 주소가 이미사용됫다고뜨는데 .. 아무리 netstat 로확인해도 사용중인게안뜨네요 ㅠㅠ

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.05.30 07:16 신고


        ctrl c를 눌렀을때 서버 소켓을 닫는 처리를 해주면 되지 않을까 싶습니다.

    • 안녕하세요 2019.06.01 19:54


      라즈베리파이에서 안드로이드로 데이터를 전송할 때

      write_server를 사용하여 원하는 메시지를 안드로이드로 전송하면 됩니다.

      while(1)
      {
      char *recv_message = read_server(client);
      if ( recv_message == NULL ){
      printf("client disconnected\n");
      break;
      }

      write_server(client, recv_message);
      }

      위의 소스코드의 부분만 수정하면 된다고 하셨는데 어디를 수정해야 할 지 모르겠습니다
      제가 문자를 입력하면 안드로이드에 그 문자가 전송되도록 하고 싶어요ㅠㅠ
      이해가 잘 가지 않습니다

    • Jooankim 2019.08.21 15:30


      해주신 모든 예제를 모두 실행하고, 라즈베리에서 ./bluethooth_server 컴파일도 완료했습니다. 안드로이드에서 java앱 실행도 완료 했습니다. 연결도 초반에는 잘 되었는데요, 다만 ./bluethooth_server 명령 실행후에 안드로이드에서 목록에 보이는 라즈베리파이를 선택하면 Unable to connect device 라고 뜨고 연결에 실패합니다. 답변 꼭 부탁드립니다.

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.08.21 16:48 신고


        라즈베리파이와 안드로이드 스튜디오의 로그캣에서 어떤 오류가 나나요?

      • Jooankim 2019.08.22 22:57


        org.bluez.error.alreadyexists 라는 에러가 있습니다만, 로그캣은 내일 학교에 가서 다시 연결을 시도해 봐야 할 것 같습니다. ㅠㅠ 일단 저 에러는 원인이 무엇일런지....

        앗 그리고 gdbus.error.org.bluez 도 있었습니다....

        sudo rfcomm watch hci0 커맨드로는 연결이 가능했었습니다. 다만 gcc로 컴파일된 exe파일로는 연결이 실패합니다.

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.08.23 00:51 신고


        org.bluez.error.alreadyexists 에러는 페어링이 되어 등록이 되었다는 의미입니다.

        paired-devices로 페어링된 장치의 맥어드레스를 확인해서 다음처럼 페어링 취소하고 다시해보세요..

        remove F8:63:3F:27:10:E0

      • jooankim 2019.08.28 11:26


        2019-08-28 11:24:05.706 13201-13201/com.example.rb_bt_ex E/ViewRootImpl: sendUserActionEvent() mView == null
        2019-08-28 11:24:05.706 13201-13201/com.example.rb_bt_ex D/ViewRootImpl@bc25226[MainActivity]: MSG_WINDOW_FOCUS_CHANGED 0
        2019-08-28 11:24:05.708 13201-13201/com.example.rb_bt_ex D/SEM_CLIP_SemClipboardManager: isCocktailBarDisplayed : false
        2019-08-28 11:24:05.896 13201-13201/com.example.rb_bt_ex D/InputTransport: Input channel destroyed: fd=77
        2019-08-28 11:24:05.906 13201-13201/com.example.rb_bt_ex D/ViewRootImpl@bc25226[MainActivity]: mHardwareRenderer.destroy()#1
        2019-08-28 11:24:05.931 13201-13201/com.example.rb_bt_ex D/ViewRootImpl@bc25226[MainActivity]: Relayout returned: oldFrame=[0,0][1440,2560] newFrame=[0,0][1440,2560] result=0x5 surface={isValid=false 0} surfaceGenerationChanged=true
        2019-08-28 11:24:05.931 13201-13201/com.example.rb_bt_ex W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
        2019-08-28 11:24:05.931 13201-13201/com.example.rb_bt_ex W/IInputConnectionWrapper: reportFullscreenMode on inexistent InputConnection
        2019-08-28 11:24:05.931 13201-13201/com.example.rb_bt_ex W/IInputConnectionWrapper: finishComposingText on inactive InputConnection
        2019-08-28 11:24:06.293 13201-13201/com.example.rb_bt_ex D/ViewRootImpl@bc25226[MainActivity]: mHardwareRenderer.destroy()#4
        2019-08-28 11:24:06.293 13201-13201/com.example.rb_bt_ex D/ViewRootImpl@bc25226[MainActivity]: dispatchDetachedFromWindow
        2019-08-28 11:24:06.305 13201-13201/com.example.rb_bt_ex D/InputTransport: Input channel destroyed: fd=71
        2019-08-28 11:24:10.319 13201-13208/com.example.rb_bt_ex I/art: System.exit called, status: 1
        2019-08-28 11:24:10.319 13201-13208/com.example.rb_bt_ex I/AndroidRuntime: VM exiting with result code 1, cleanup skipped.

        안드로이드 에서 로그캣 확인하였습니다. 맨 첫줄이 빨강으로 표시되었습니다.

      • jooankim 2019.08.28 11:27


        블루투스가 잠시 연결되었다가 다시 끊겼다가 합니다...

      • 3R 2019.08.28 11:34


        [bluetooth]# pair 90:00:DB:BA:4A:C8
        Attempting to pair with 90:00:DB:BA:4A:C8
        [CHG] Device 90:00:DB:BA:4A:C8 Connected: yes
        Request confirmation
        [agent] Confirm passkey 104845 (yes/no): yes
        [CHG] Device 90:00:DB:BA:4A:C8 Modalias: bluetooth:v0075p0100d0200
        [CHG] Device 90:00:DB:BA:4A:C8 UUIDs: 00001105-0000-1000-8000-00805f9b34fb
        [CHG] Device 90:00:DB:BA:4A:C8 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
        [CHG] Device 90:00:DB:BA:4A:C8 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
        [CHG] Device 90:00:DB:BA:4A:C8 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
        [CHG] Device 90:00:DB:BA:4A:C8 UUIDs: 00001115-0000-1000-8000-00805f9b34fb
        [CHG] Device 90:00:DB:BA:4A:C8 UUIDs: 00001116-0000-1000-8000-00805f9b34fb
        [CHG] Device 90:00:DB:BA:4A:C8 UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
        [CHG] Device 90:00:DB:BA:4A:C8 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
        [CHG] Device 90:00:DB:BA:4A:C8 UUIDs: 00001132-0000-1000-8000-00805f9b34fb
        [CHG] Device 90:00:DB:BA:4A:C8 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
        [CHG] Device 90:00:DB:BA:4A:C8 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
        [CHG] Device 90:00:DB:BA:4A:C8 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
        [CHG] Device 90:00:DB:BA:4A:C8 ServicesResolved: yes
        [CHG] Device 90:00:DB:BA:4A:C8 Paired: yes
        Pairing successful
        [CHG] Device 90:00:DB:BA:4A:C8 ServicesResolved: no
        [CHG] Device 90:00:DB:BA:4A:C8 Connected: no
        [CHG] Device 90:00:DB:BA:4A:C8 Connected: yes
        [CHG] Device 90:00:DB:BA:4A:C8 Connected: no

        _________________________________
        위와 같이 pairing은 성공 하였지만, 연결이 계속 끊기는 현상이 발생 합니다.

        bluetooth연결이 끊기고
        앱을 통해 연결을 시도하면
        '[bluetooth]'과 '[Galaxy S6 edge]'가 서로 번갈아 가며 나타나고 앱에서는 Unable to connect 알림이 뜨게 됩니다.

        제발 ,,, 왜 이러는 걸까요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.08.28 11:36 신고


        sendUserActionEvent() mView == null는 무시해도 되는 에러라고 하네요.

        블루투스가 연결되어 통신이 잘되다가 끊어지나요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.08.28 11:39 신고


        원인을 찾으려면 다음 포스팅에 나온대로 PC와 해서 안드로이드 쪽에 문제없는지 먼저 테스트해보는게 좋을 듯합니다.

        Android와 PC에 JAVA 프로그램 간 블루투스 통신 예제
        http://webnautes.tistory.com/849

      • 3R 2019.08.28 11:46


        안드로이드 핸드폰과 커널에서 pair명령을 사용하여 pairing할 때

        Connection failed-
        GDBus.Error.bluez.Error.Failed: Protocol not available. Try to connect manually

        라는 에러가 발생 합니다....
        왜이러는걸까여ㅠㅠㅠㅠㅠㅠㅠㅠㅠ흑

      • jooankim 2019.08.28 11:53


        통신예제는 방금 또 해보았습니다만.. 잘 작동합니다...

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.08.28 11:55 신고


        @3R

        블루투스 패키지를 설치했나요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.08.28 11:57 신고


        @Jooankim

        라즈비안이 이번에 새로 나온 최신버전이라면 패키지 구성이 달라 문제가 생길 수도 있을 듯합니다.



      • jooankim 2019.08.28 12:08


        @webnautes

        혹시 라즈비안 버전을 몇으로 하면 될까요??

        @3R->@webnautes
        블루투스 패키지는 Bluez 인스톨을 말씀 하시는 거죠??

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.08.28 12:12 신고


        라즈비안은 포스트 작성 시점 이전꺼로 하면 될듯합니다.

        libbluetooth-dev 패키지를 설치하면 됩니다.

    • KimHyeonJoon 2019.09.03 12:16


      안녕하세요 블로그 자주보고 많이 배워가는 학생입니다.
      조그만한 질문 하나만 드리겠습니다.

      ./bluetooth_server 를 실행하면
      ~~ accept() returned 5 인 상태에서 앱 이랑 라즈베리파이랑 연결이 되면
      앱 측에서는 connected to rasberryppi 가 보여지고
      라즈베리파이 측에서는 accepted connection from 맥 주소 이렇게 보여져야 하는데
      앱 측에서만 보여지고 라즈베리측에서는 ~~ accept() returned 5 이후 연결 되었다는 accepted connection from 맥 주소 부분이 뜨질 않습니다.. 무엇이 문제일까요ㅠㅠ?

    • KimHyeonJoon 2019.09.04 00:21


      역시 블로그가 문제될건 1도 없는것 같아요
      파이썬부터 차근차근 다시 설치하고 따라갔더니 연결 잘 됐고요
      제가 라즈베리파이 에서 안드로이드로 메시지를 보내게끔 원했는데
      선생님께서 위에 다른분께 피드백 주신거보고 찾아서 결국 완벽하진않지만
      안드로이드로 메시지를 보낼 수 있게 되었습니다.
      감사합니다ㅎㅎ

    • jooankim 2019.09.04 15:05


      이전에 질문했던 사람인데요!! 여기서 연결 해서 문제는 해결되었습니다만, 저희가 라즈베리파이 와 모바일에서 서로 데이터를 송수신해야 하는 상황입니다. 혹시 지금처럼 안드로이드에서 일방적으로 데이터를 보내는 것이 아닌, 라즈베리파이에서도 송수신이 가능하게 하는 방법이 있을까요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.09.04 15:08 신고


        라즈베리파이용 서버코드에 데이터를 send하는 함수가 있습니다. 필요시 호출해주면 됩니다. 안드로이드는 송수신이 가능하도록 작성되어있어 수정할 필요가 없습니다.

      • jooankim 2019.09.04 15:57


        안드로이드에 onProgressUpdate 함수가 있는데 이것을 사용하지는 않으신 것 같아요... ... 제 부족한 생각에는.. 그런데 실제로 에코는 되는 것 같은데 라즈베리에서 메세지를 scanf 로 입력받아서 전송은 하는데 폰에서는 나타나질 않아서 혹시나 안드로이드 코드를 읽어보는 중이었어요 혹시 받은 문자열을 뽑는 부분이 어디인지 알 수 있을까요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.09.04 16:09 신고


        onProgressUpdate에서 수신받은 문자열을 화면에.출력합니다.

    • 강한빛 2019.09.09 16:45


      bluetoothctl을 쳐봐도 sudo bluetoothctl을 쳐봐도 아무것도 안뜨는데 이유가 뭘까요? 핸드폰으로 해도 안되고 hc-06 을 사용해도 뜨지를 않습니다...ㅠㅠ

    • 송진호 2019.10.18 00:36


      게시물과 반대로 pyhthon을 사용하여 라즈베리에서 어플로 데이터를 전송해주고 싶은데 어떻게 해야 될까요?
      알려주실수 있나요 ㅜㅜ

    • 통공실 2019.11.21 19:57


      어플에서 연결되었다 떠도 라즈베리파이에서 accepted가 안떠용 ㅠ

    • 통공실2 2019.11.24 16:58


      혹시 안드로이드와 라즈베리파이3와 블루투스 송수신을하는데 http://webnautes.tistory.com/1137이링크의 내용을 따라해야하는게 맞나요? 라즈베리파이와 윈도우와 페어링을 진행하던데..

    • 3학년전자공학 2019.11.26 00:26


      안녕하세요.. 대학교 과제로 라즈베리파이와 앱간의 데이터 통신을 위해 공부를 하고있는 학생입니다.
      앱에서 라즈베리와 연결은 되었다고 뜨는데, 라즈베리의 터미널에서는 calling accept() 이후로
      제 핸드폰의 맥주소가 나오지 않습니다. 어떤부분에서의 문제인지 여쭙고 싶습니다.

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.26 09:24 신고


        테스트를 해보고 알려드리겠습니다.

      • 3학년전자공학 2019.11.26 17:54


        감사합니다. 부탁드리겠습니다.

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.26 22:06 신고


        확인해보니 별 문제 없이 잘됩니다.

        안드로이드 코드를 androidx에 맞게 수정했으니 다시 프로젝트를 생성하여 진행해보세요.

      • 3학년전자공학 2019.11.27 02:18


        AndroidX에 맞게 수정해주셔서 정말로 감사합니다. 앱을 빌드하는데에서는 큰 문제없이 하였고 다시금 연결을 해보았지만
        라즈베리 터미널에서는 핸드폰과 연결되었다는 맥주소를 확인할 수 없었습니다.
        또한 앱에서 라즈베리파이와 초기에 연결했을때
        raspberrypi:AT+VGS=7
        raspberrypi:AT+VGM=15의 메세지가 보였습니다..

      • 3학년전자공학 2019.11.27 02:19


        추가로 궁금한건, Android Studio에서
        import v7,과 같은 구문에서
        V7의 오류가 왜 나오는지 너무나 궁금합니다. 해외의 글들을 보니
        AndroidX로 마이그레이션을 해야한다.
        캐시를 한번 지우면된다.등 많은 방법이 있었지만, 딱히 해결을 할 수 없었습니다..

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.27 08:41 신고


        로그캣을 BluetoothClient로 필터링해서 로그를 확인해보세요.


        android.support 라이브러리가 androidx에선 패키지 이름이 어떻게 바뀌었는지 보여주는 다음 링크를 참고하면 변환을 빨리할 수 있습니다. 패키지 이름만 바뀌고 함수 사용방법은 동일한 듯합니다.

        https://developer.android.com/jetpack/androidx/migrate/class-mappings

      • 3학년전자공학 2019.11.27 09:55


        라즈베리파이 터미널 질문 관련해서 로그캣을 BluetoothClient로 필터링해보면 알수있는건가요??

      • 3학년전자공학 2019.11.27 16:45


        짧은 시간동안 많은 질문을 드렸는데,
        답변 정말로 감사합니다.

        가장 중요한 질문인데, 위의 과정을 통해서 블루투스 서버를 활성화 있어서의 문제인지 라즈베리파이 내부에서 파일관리자, 휴지통을 열면 그냥 꺼져버립니다.
        이 문제가 뭔지 알 수 있을까요?

      • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2019.11.28 08:46 신고


        필터링하면 로그캣에 블루투스 통신과정을 보여줍니다.

        OpenCV를 설치한 후에도 발생한다고 하네요..

        혹시 모르니 패키지 업그레이드를 해보세요.

        sudo apt-get update
        sudo apt-get upgrade

Designed by Tistory.