개요
bluetoothctl은 앞서 설치한 리눅스의 공식 블루투스 스택(bluetooth stack)을 개발하는 프로젝트인 bluez에서 제공하는 bluez-utils 패키지 포함되어 있는 명령줄(command line) 도구입니다.
라즈베리파이의 공식 운영체제인 라즈비언(raspbian)역시 리눅스이므로 해당 도구가 기본 설치되어 있습니다. 따라서 우리는 이 도구를 사용하여 간단히 블루투스 디바이스를 관리할 수 있습니다.
시작하기
라즈베리파이의 콘솔에서 아래의 명령을 실행합니다.
$ bluetoothctl
[bluetooth]#
프롬프트가 변경됩니다.
현재 정보 확인
라즈베리파이의 블루투스의 현재상태는 show
명령을 사용해 확인합니다.
[bluetooth]# show
Controller B8:27:EB:28:92:D8 (public)
Name: raspberrypi
Alias: raspberrypi
Class: 0x00480000
Powered: yes
Discoverable: no
Pairable: yes
UUID: Headset AG (00001112-0000-1000-800
0-00805f9b34fb)
UUID: Generic Attribute Profile (00001801-0000-1000-800
0-00805f9b34fb)
UUID: A/V Remote Control (0000110e-0000-1000-800
0-00805f9b34fb)
UUID: Generic Access Profile (00001800-0000-1000-800
0-00805f9b34fb)
UUID: PnP Information (00001200-0000-1000-800
0-00805f9b34fb)
UUID: A/V Remote Control Target (0000110c-0000-1000-800
0-00805f9b34fb)
UUID: Audio Source (0000110a-0000-1000-800
0-00805f9b34fb)
UUID: Handsfree Audio Gateway (0000111f-0000-1000-800
0-00805f9b34fb)
Modalias: usb:v1D6Bp0246d0532
Discovering: no
[bluetooth]#
라즈베리파이의 블루투스 모듈은 정상동작( Powered: yes
, Pairable: yes
)중 입니다.
주변장치 검색
연결하려는 블루투스 장치의 전원을 켠 후, 라즈베리파이에서 주변 블루투스 장치를 찾습니다.
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:28:92:D8 Discovering: yes
[NEW] Device BC:54:51:BE:53:A1 Galaxy On7 Prime
[NEW] Device FC:58:FA:0D:69:3A PISnet HIVE
핸드폰(BC:54:51:BE:53:A1
)과 블루투스 스피커(FC:58:FA:0D:69:3A
)의 주소 값을 찾았습니다. 필요한 정보를 확인하였으므로 검색은 중단합니다.
[bluetooth]# scan off
[CHG] Device FC:58:FA:0D:69:3A TxPower is nil
[CHG] Device FC:58:FA:0D:69:3A RSSI is nil
[CHG] Device BC:54:51:BE:53:A1 RSSI is nil
[CHG] Controller B8:27:EB:28:92:D8 Discovering: no
Discovery stopped
알아낸 장치의 주소값을 이용해 페어링을 시작합니다.
장치 페어링
블루투스에서 페어링이란 연결할 두 장치가 서로를 알아내는 것입니다. 여기서 핵심은 둘 간에 키(link-key)를 교환하여 통신의 보안성을 확보하는 절차입니다.
이때 장치의 종류에 따라 사용자의 확인을 요구하는 경우와 그렇지 않은 경우가 있습니다.
예시 1. 스피커와 페어링
스피커와 같은 사용자의 입력이 없는 단순한 장치는 페어링 시 키를 요구하지 않으며, 사용자의 확인도 요구하지 않습니다. 따라서 페어링을 명령하면 즉시 연결됩니다.
[bluetooth]# pair FC:58:FA:0D:69:3A
Attempting to pair with FC:58:FA:0D:69:3A
[CHG] Device FC:58:FA:0D:69:3A Connected: yes
[CHG] Device FC:58:FA:0D:69:3A UUIDs: 00001108-0000-1000-8000-00805f9b34fb
[CHG] Device FC:58:FA:0D:69:3A UUIDs: 0000110b-0000-1000-8000-00805f9b34fb
[CHG] Device FC:58:FA:0D:69:3A UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device FC:58:FA:0D:69:3A UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device FC:58:FA:0D:69:3A UUIDs: 0000111e-0000-1000-8000-00805f9b34fb
[CHG] Device FC:58:FA:0D:69:3A ServicesResolved: yes
[CHG] Device FC:58:FA:0D:69:3A Paired: yes
Pairing successful
[CHG] Device FC:58:FA:0D:69:3A ServicesResolved: no
[CHG] Device FC:58:FA:0D:69:3A Connected: no
예시 2. 안드로이드 폰과의 Pairing
반면 안드로이드 폰과 같은 장치의 경우 사용자에게 페어링 코드 확인 및 확정을 요청합니다.
페어링 코드를 교환하고 사용자에게 확인을 요구하는 작업을 진행할 대리인(agent)을 활성화합니다.
[bluetooth]# agent on
페어링을 시도합니다. 확인 메시지가 화면에 표시되면, yes
를 입력합니다.
[bluetooth]# pair BC:54:51:BE:53:A1
Attempting to pair with BC:54:51:BE:53:A1
[CHG] Device BC:54:51:BE:53:A1 Connected: yes
Request confirmation
[agent] Confirm passkey 433267 (yes/no): yes
[CHG] Device BC:54:51:BE:53:A1 Modalias: bluetooth:v0075p0100d0201
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 00001105-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 0000110a-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 0000110c-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 0000110e-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 00001112-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 00001115-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 00001116-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 0000111f-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 0000112f-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 00001132-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 00001200-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 00001800-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 UUIDs: 00001801-0000-1000-8000-00805f9b34fb
[CHG] Device BC:54:51:BE:53:A1 ServicesResolved: yes
[CHG] Device BC:54:51:BE:53:A1 Paired: yes
Pairing successful
[CHG] Device BC:54:51:BE:53:A1 ServicesResolved: no
[CHG] Device BC:54:51:BE:53:A1 Connected: no
연결하기
페어링이 완료되면 장치와 연결합니다.
[bluetooth]# connect FC:58:FA:0D:69:3A
Attempting to connect to FC:58:FA:0D:69:3A
Connection successful
[CHG] Device FC:58:FA:0D:69:3A ServicesResolved: yes
[PISnet HIVE]# exit
자동 재연결 설정
라즈베리파이의 주변에 해당 장치가 있으면 자동으로 페어링을 수행하도록 신뢰할 수 있는 장치 목록에 추가합니다.
[bluetooth]# trust FC:58:FA:0D:69:3A
[CHG] Device FC:58:FA:0D:69:3A Trusted: yes
Changing FC:58:FA:0D:69:3A trust succeeded
동작확인
블루투스 장치로 사운드 송신
라즈비언에 내장되어 있는 음성파일을 이용하여 간단히 스피커의 연결을 확인합니다.
$ aplay -D bluealsa:HCI=hci0,DEV=FC:58:FA:0D:69:3A /usr/share/sounds/alsa/Side_Right.wav Playing WAVE '/usr/share/sounds/alsa/Side_Right.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
음성이 잘 들린다면 문제없이 설정된 것입니다.
MP3 파일 재생
MP3 파일을 재생하기 위해서는 aplay
대신 mpg123
을 사용하도록 합니다.
$ mpg123 -a bluealsa:HCI=hci0,DEV=FC:58:FA:0D:69:3A test.mp3
기본 출력장치로 설정
매번 Bluetooth 스피커의 MAC 주소를 명령어에 입력하는 대신 이를 기본 오디오 출력장치로 설정하도록 하겠습니다.
아래의 내용을 ~/.asoundrc
에 추가하도록 합니다.
※ 해당 파일이 없는 경우 생성합니다.
※ FC:58:FA:0D:69:3A 는 여러분의 Bluetooth 스피커의 MAC 주소를 입력합니다.
pcm.btspeaker {
type plug
slave.pcm {
type bluealsa
device "FC:58:FA:0D:69:3A"
profile "a2dp"
}
hint {
show on
description "Bluetooth Speaker"
}
}
pcm.!default {
type plug
slave.pcm "btspeaker"
}
설정이 제대로 되었다면 다음과 같이 디바이스 정보를 입력하지 않더라도 오디오가 재생됩니다.
$ aplay /usr/share/sounds/alsa/Side_Right.wav
$ mpg123 test.mp3
오류 및 처리
증상
사용 중 다음과 같은 오류 메시지를 발생하며, 음악이 재생되지 않는 현상이 발생하였습니다.
$ mpg123 -a bluealsa:HCI=hci0,DEV=FC:58:FA:0D:69:3A test.mp3
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
version 1.23.8; written and copyright by Michael Hipp and others
free software (LGPL) without any warranty but with best wishes
Terminal control enabled, press 'h' for listing of keys and functions.
Playing MPEG stream 1 of 1: aWFWuecRPDU.mp3 ...
[src/libout123/modules/alsa.c:126] error: initialize_device(): cannot set hw params
main: [src/mpg123.c:333] error: out123 error 7: failed to open device
조치
원인 및 해결 방법을 찾아내지 못하여 소프트웨어를 재설치하였습니다.
$ sudo apt purge bluealsa
$ sudo apt install bluealsa
$ sudo reboot
참고
'라즈베리파이 > 기초' 카테고리의 다른 글
라즈베리파이 IP 고정하기 (0) | 2019.12.09 |
---|---|
SSH세션 종료시 실행중인 프로그램 종료 방지 (Screen) (0) | 2019.11.16 |
라즈베리파이 블루투스 스택(bluez) 업그레이드 (0) | 2019.06.19 |
라즈베리파이 USB 포트 출력전류 설정 (0) | 2019.05.18 |
라즈베리파이 - 원격접속 (0) | 2019.04.28 |