페어링 과정
1 휴태폰의 블루투스 를 켜고 검색한다
2. 파이 명령어 ( GUI 에서는 블루투스 아이콘을 이용하기)
pi@raspberrypi:~ $ bluetoothctl
3. 폰의 블루투스 모듈 맥어드레스를 검색
[bluetooth]# scan on
5. 폰의 블루투스 모듈 맥어드레스를 확인했으면 검색을 중지하고 에이전트를 활성화 합니다.
[bluetooth]# scan off
[bluetooth]# agent on
[bluetooth]# default-agent
6. 안드로이드폰과 페어링을 진행하기 위해 pair 명령과 안드로이드 폰의 블루투스 모듈 맥어드레스를 같이 적어주면 페어링이 진행됩니다.
[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):
화면에 보이는 passkey를 확인하고.. 안드로이드에서 키값을 입력
(yes/no): yes
라즈베리파이에서도 yes 입력
7. 페어링 완료후 트러스트명령 해주기
[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
통신과정
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. 앱에서 백버튼을 눌러서 종료하면 서버도 같이 종료됩니다.
'아두이노, IOT' 카테고리의 다른 글
라즈베리파이 와이파이 문제 관련 (0) | 2021.11.07 |
---|---|
VNC 프로그램 설치 | 라즈베리파이 화면을 내 컴퓨터에서 보기 위한 VNC 사용 (0) | 2021.09.17 |
라즈베리파이용 카메라 모듈 5647 사용기 (0) | 2021.08.15 |
[IOT] 라즈베리파이 제로 W 시작 (0) | 2021.08.08 |
아두이노 4핀 버튼 예제 (풀다운 저항) (0) | 2021.07.10 |
댓글