树莓派安装蓝牙适配器+蓝牙音箱播放

By | 2018-11-26

硬件条件:  Pi 1B+ 512Mb  +  ORICO BTA-401蓝牙适配器  +  魅动蓝牙音箱

该文案采用  Bluez + Pulseaudio 方案, 即 Bluez 负责蓝牙设备间的连接, Pulseaudio 负责音频输出的通道

1)先 lsusb 看看是否识别蓝牙适配器,不是太旧的Linux都能识别.

2)安装以下组件

apt-get install libdbus-1-dev libdbus-c++-dev libudev-dev libical-dev libtinfo-dev systemd autoconf libtool automake make   #编译环境
apt-get install dbus glib2.0 bluez blueman alsa-utils bluetooth bluez-utils bluez-compat bluez-alsa pulseaudio pulseaudio-module-bluetooth  
#安装bluez pulseaudio
apt-get install pavucontrol xauth   #如果使用图形界面请安装

如果bluez安装报错,先按下面编译安装:

wget https://mirrors.edge.kernel.org/pub/linux/bluetooth/bluez-5.9.tar.gz
tar xvf bluez-5.49.tar.gz
cd bluez-5.49
./configure
make
sudo make install
sudo reboot

3) 加载蓝牙设备以及查询设备名称

aplay -l   #查看现时声音的输入输出设备

root@raspberrypi:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

插上USB蓝牙适配器后

lsusb     #看到红字部分表示系统已经识别蓝牙适配器

root@raspberrypi:~# lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter
Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
在root下pulseaudio无法运行的, 通过以下命令把root加入到pulseaudio的群组就可以了
adduser root pulse-access 

pacmd

会进入蓝牙管理控制台”>>>”命令行状态, 退出控制台只需 exit 即可.

list-cards    — 查看音频输出的各通道, 例如: 原机上alsa声卡/USB 声卡等等信息

list-modules    — 查看加载了那些模块

其他看 help 吧!

这里使用另外一个命令来连接音箱以及启动时自动连接

pactl list sinks

会输出以下这类信息:

Sink #1
State: RUNNING
Name: bluez_sink.A0_E9_DB_23_17_BB
Description: Meidong
Driver: module-bluetooth-device.c
Sample Specification: s16le 2ch 44100Hz
Channel Map: front-left,front-right
Owner Module: 24
Mute: no
Volume: 0:  93% 1:  93%
        0: -1.80 dB 1: -1.80 dB
        balance 0.00
Base Volume: 100%
            0.00 dB
Monitor Source: bluez_sink.A0_E9_DB_23_17_BB.monitor
Latency: 50984 usec, configured 45317 usec
Flags: HARDWARE DECIBEL_VOLUME LATENCY 
Properties:
bluetooth.protocol = "a2dp"
device.description = "Meidong"
device.string = "A0:E9:DB:23:17:BB"
device.api = "bluez"
device.class = "sound"
device.bus = "bluetooth"
device.form_factor = "headset"
bluez.path = "/org/bluez/2451/hci0/dev_A0_E9_DB_23_17_BB"
bluez.class = "0x240404"
bluez.name = "Meidong"
device.icon_name = "audio-headset-bluetooth"
device.intended_roles = "phone"
Formats:
pcm

有以上信息即代表蓝牙音箱已经被系统识别并连接成功!

4) 每次启动自动连接蓝牙音箱

在 /etc/rc.local 里加入以下命令行

sudo /usr/bin/bluez-test-audio connect a0:e9:db:23:17:bb

 

5) 最后处理播放器MPD

您应该会在桌面上的主raspbian菜单中看到管理脉冲音频设置的选项。

因此,这将设置基本的pulseaudio到蓝牙管道,如果您安装了pavucontrol,它将适用于大多数桌面应用程序。我不熟悉MPlayer,但MPD确实是通过控制台工作的。首先我安装了MPC和MPD:

sudo apt-get install mpd mpc

然后我配置MPD输出到脉冲:

sudo nano /etc/mpd.conf

您想要注释掉ALSA输出:

# An example of an ALSA output:
#
#audio_output {
#       type            "alsa"
#       name            "My ALSA Device"
#       device          "hw:0,0"        # optional
#       mixer_type      "hardware"      # optional
#       mixer_device    "default"       # optional
#       mixer_control   "PCM"           # optional
#       mixer_index     "0"             # optional
#}

然后启用pulseaudio输出:

audio_output {
    type            "pulse"
    name            "My Pulse Output"
    server          "127.0.0.1"             # optional
    sink            "bluez_sink.A0_E9_DB_23_17_BB"  # optional
}

如果没有指定接收器和服务器不能正常工作。 最后编辑pulseaudio以允许此连接:

sudo nano /etc/pulse/default.pa

添加以下行(它没有参数,默认情况下注释掉)

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16

现在重新启动,通过Bluez连接到蓝牙音箱,MPD将输出到蓝牙音箱。您可以在MPD上查找详细信息,MPC是一个命令行客户端,无需额外配置即可正常运行。

 

 

排错:

1) 错误:  Failed to get d-bus connection no connection to service manager.

解决:  升级系统吧, wheezy太老了, 使用init 启动; 要使用 Jessie或以上版本才支持 systemd , 可以参考”升级文档“把系统升级.

2) 错误: [warn] PulseAudio configured for per-user sessions … (warning).

解决:  修改 /etc/default/pulseaudio

改成以下:

PULSEAUDIO_SYSTEM_START=1

3) 如果安装 blueman 报错

apt-get remove blueman
apr-get autoremove
apt-get purge
apt-get update
apt-get upgrade
apt-get install blueman

 

以下是另外的信息记录, 无需理会

3)编辑 nano /etc/bluetooth/main.conf , 找到以下两行并修改为以下:

Name = Raspberrypi Class = 0x20041C
如果需要用USB声卡或者USB-DAC,请修改树莓派的默认声音设备:
在 /usr/share/alsa/alsa.conf 找到以下两行:

defaults.ctl.card 0
defaults.pcm.card 0

把两个“0”改为“1”,重启后即使用USB声卡作为默认声音输出。

發佈留言