树莓派连接天猫精灵音箱通过蓝牙播放音乐的方法
使用bluealsa通過命令行指定某個藍牙音箱播放
安裝bluealsa有兩種方法,第一種是通過apt安裝,第二種是通過源碼安裝。
1. 通過apt安裝bluealsa
1.1 安裝并啟動bluealsa服務
sudo apt-get install bluealsa sudo service bluealsa start1.2 將pi加入對應用戶組
sudo adduser pi bluetooth sudo adduser pi audio1.3 修改/lib/systemd/system/bluetooth.service
sudo nano /lib/systemd/system/bluetooth.service將ExecStart=/usr/lib/bluetooth/bluetoothd修改為ExecStart=/usr/lib/bluetooth/bluetoothd --noplugin=sap --plugin=a2dp
文件最后添加(似乎不加也行)
1.4 重啟服務
sudo systemctl daemon-reload sudo systemctl restart bluetooth1.5 連接藍牙音箱
sudo bluetoothctl然后依次輸入power on 和 scan on:
[bluetooth]# power on Changing power on succeeded [bluetooth]# scan on Discovery started [CHG] Controller xx:xx:xx:xx:5F:11 Discovering: yes [NEW] Device XX:XX:XX:5A:19:8A xx-xx-xx-5A-19-8A [NEW] Device XX:XX:XX:84:81:86 xx-xx-xx-84-81-86 [NEW] Device XX:XX:XX:48:0D xx-xx-xx-8A-48-0D [NEW] Device XX:XX:XX:85:84:9E LYWSD03MMC [NEW] Device XX:XX:XX:DD:21:84 LYWSD03MMC [CHG] Device XX:XX:XX:30:CB:5C RSSI: -65 [CHG] Device XX:XX:XX:84:81:86 RSSI: -45 [CHG] Device XX:XX:XX:84:81:86 ManufacturerData Key: 0x004c [CHG] Device XX:XX:XX:84:81:86 ManufacturerData Value:xx xx xx 59 75 0d de c3 15 f6 85 e9 c7 .....`Yu........ [CHG] Device XX:XX:XX:DD:21:84 RSSI: -77 [CHG] Device XX:XX:XX:84:81:86 RSSI: -54 [CHG] Device XX:XX:XX:DD:21:84 RSSI: -87輸入devices查看設備列表
[bluetooth]# devices Device XX:XX:XX:DD:21:84 LYWSD03MMC Device XX:XX:XX:85:84:9E LYWSD03MMC Device XX:XX:XX:8A:48:0D xx-xx-xx-8A-48-0D Device XX:XX:XX:84:81:86 xx-xx-xx-84-81-86 Device XX:XX:XX:5A:19:8A xx-xx-xx-5A-19-8A Device XX:XX:XX:30:CB:5C 方糖(6C:7C)我要連接我的天貓精靈方糖(列表中的方糖(6C:7C),XX:XX:XX:30:CB:5C是它的mac地址)。首次連接,需要pair并trust(trust之后下次會自動連接),如果你的天貓精靈不在列表里,那就語音喚醒天貓精靈并說“打開藍牙”,然后重新scan on一次。
pair XX:XX:XX:30:CB:5C trust XX:XX:XX:30:CB:5C首次pair可能需要手動輸入yes確認。
[bluetooth]# pair XX:XX:XX:30:CB:5C Attempting to pair with XX:XX:XX:30:CB:5C [CHG] Device XX:XX:XX:30:CB:5C Connected: yes Request confirmation [agent] Confirm passkey 529316 (yes/no): yes [CHG] Device XX:XX:XX:30:CB:5C Modalias: bluetooth:v000Fp1200d1436 [CHG] Device XX:XX:XX:30:CB:5C UUIDs: 0000110b-0000-1000-8000-00805f9b34fb [CHG] Device XX:XX:XX:30:CB:5C UUIDs: 0000110c-0000-1000-8000-00805f9b34fb [CHG] Device XX:XX:XX:30:CB:5C UUIDs: 0000110e-0000-1000-8000-00805f9b34fb [CHG] Device XX:XX:XX:30:CB:5C UUIDs: 00001200-0000-1000-8000-00805f9b34fb [CHG] Device XX:XX:XX:30:CB:5C UUIDs: 00001800-0000-1000-8000-00805f9b34fb [CHG] Device XX:XX:XX:30:CB:5C UUIDs: 00001801-0000-1000-8000-00805f9b34fb [CHG] Device XX:XX:XX:30:CB:5C ServicesResolved: yes [CHG] Device XX:XX:XX:30:CB:5C Paired: yes Pairing successful [CHG] Device XX:XX:XX:30:CB:5C ServicesResolved: no [CHG] Device XX:XX:XX:30:CB:5C Connected: no[bluetooth]# trust XX:XX:XX:30:CB:5C [CHG] Device XX:XX:XX:30:CB:5C Trusted: yes Changing XX:XX:XX:30:CB:5C trust succeeded我要連接我的天貓精靈方糖,使用connect命令即可:
connect XX:XX:XX:30:CB:5C連接成功后前面的提示符會從[bluetooth]變成設備名(本例為[方糖(6C:7C)]):
[bluetooth]# connect XX:XX:XX:30:CB:5C Attempting to connect to XX:XX:XX:30:CB:5C [CHG] Device XX:XX:XX:30:CB:5C Connected: yes Connection successful [CHG] Device XX:XX:XX:30:CB:5C ServicesResolved: yes [方糖(6C:7C)]#1.6 播放wav音頻
連接成功以后exit退出,就可以使用aplay命令通過該設備播放音頻了:
aplay -D bluealsa:DEV=XX:XX:XX:30:CB:5C,PROFILE=a2dp ./cat1.wav $ aplay -D bluealsa:DEV=XX:XX:XX:30:CB:5C,PROFILE=a2dp ./cat1.wav D: ../../../src/asound/bluealsa-pcm.c:1309: Getting BlueALSA PCM: PLAYBACK XX:XX:XX:30:CB:5C a2dp D: ../../../src/asound/bluealsa-pcm.c:1062: /org/bluealsa/hci0/dev_xx_xx_xx_30_CB_5C/a2dpsrc/sink: Setting constraints Playing WAVE './cat1.wav' : Signed 16 bit Little Endian, Rate 16000 Hz, Mono D: ../../../src/asound/bluealsa-pcm.c:532: /org/bluealsa/hci0/dev_xx_xx_xx_30_CB_5C/a2dpsrc/sink: Initializing HW D: ../../../src/asound/bluealsa-pcm.c:567: /org/bluealsa/hci0/dev_xx_xx_xx_30_CB_5C/a2dpsrc/sink: FIFO buffer size: 1024 frames D: ../../../src/asound/bluealsa-pcm.c:576: /org/bluealsa/hci0/dev_xx_xx_xx_30_CB_5C/a2dpsrc/sink: Selected HW buffer: 4 periods x 24000 bytes == 96000 bytes D: ../../../src/asound/bluealsa-pcm.c:600: /org/bluealsa/hci0/dev_xx_xx_xx_30_CB_5C/a2dpsrc/sink: Initializing SW D: ../../../src/asound/bluealsa-pcm.c:600: /org/bluealsa/hci0/dev_xx_xx_xx_30_CB_5C/a2dpsrc/sink: Initializing SW D: ../../../src/asound/bluealsa-pcm.c:600: /org/bluealsa/hci0/dev_xx_xx_xx_30_CB_5C/a2dpsrc/sink: Initializing SW D: ../../../src/asound/bluealsa-pcm.c:600: /org/bluealsa/hci0/dev_xx_xx_xx_30_CB_5C/a2dpsrc/sink: Initializing SW D: ../../../src/asound/bluealsa-pcm.c:639: /org/bluealsa/hci0/dev_xx_xx_xx_30_CB_5C/a2dpsrc/sink: Prepared D: ../../../src/asound/bluealsa-pcm.c:600: /org/bluealsa/hci0/dev_xx_xx_xx_30_CB_5C/a2dpsrc/sink: Initializing SW D: ../../../src/asound/bluealsa-pcm.c:356: /org/bluealsa/hci0/dev_xx_xx_xx_30_CB_5C/a2dpsrc/sink: Starting D: ../../../src/asound/bluealsa-pcm.c:226: /org/bluealsa/hci0/dev_xx_xx_xx_30_CB_5C/a2dpsrc/sink: Starting IO loop: 8 D: ../../../src/asound/bluealsa-pcm.c:600: /org/bluealsa/hci0/dev_10_9E_3A_30_CB_5C/a2dpsrc/sink: Initializing SW D: ../../../src/asound/bluealsa-pcm.c:607: /org/bluealsa/hci0/dev_10_9E_3A_30_CB_5C/a2dpsrc/sink: Changing SW avail min: 6000 -> 1 D: ../../../src/asound/bluealsa-pcm.c:600: /org/bluealsa/hci0/dev_10_9E_3A_30_CB_5C/a2dpsrc/sink: Initializing SW D: ../../../src/asound/bluealsa-pcm.c:607: /org/bluealsa/hci0/dev_10_9E_3A_30_CB_5C/a2dpsrc/sink: Changing SW avail min: 1 -> 6000 D: ../../../src/asound/bluealsa-pcm.c:231: /org/bluealsa/hci0/dev_10_9E_3A_30_CB_5C/a2dpsrc/sink: Pausing IO thread D: ../../../src/asound/bluealsa-pcm.c:392: /org/bluealsa/hci0/dev_10_9E_3A_30_CB_5C/a2dpsrc/sink: Stopping D: ../../../src/asound/bluealsa-pcm.c:161: /org/bluealsa/hci0/dev_10_9E_3A_30_CB_5C/a2dpsrc/sink: IO thread cleanup D: ../../../src/asound/bluealsa-pcm.c:392: /org/bluealsa/hci0/dev_10_9E_3A_30_CB_5C/a2dpsrc/sink: Stopping D: ../../../src/asound/bluealsa-pcm.c:592: /org/bluealsa/hci0/dev_10_9E_3A_30_CB_5C/a2dpsrc/sink: Freeing HW D: ../../../src/asound/bluealsa-pcm.c:443: /org/bluealsa/hci0/dev_10_9E_3A_30_CB_5C/a2dpsrc/sink: Closing但是通過-D bluealsa:DEV=10:9E:3A:30:CB:5C來每次指定設備,還要通過PROFILE=a2dp指定profile很麻煩,我們可以設置指定默認的播放設備和profile。編輯用戶配置文件~/.asoundrc即可。
nano ~/.asoundrc內容改為:
pcm.!default {type plugslave.pcm {type bluealsadevice "XX:XX:XX:30:CB:5C"profile "a2dp"} } pcm.fangtang {type plugslave.pcm {type bluealsadevice "XX:XX:XX:30:CB:5C"profile "a2dp"} }注:還有一個全局配置文件/etc/asound.conf
1.7 播放MP3格式音頻
aplay無法播放MP3格式的音頻,我們需要mplayer
sudo apt install mplayer mplayer cat.mp3 #或者使用alsa默認設備 mplayer -ao alsa cat.mp3 #或者指定設備 mplayer -ao alsa:device=fangtang cat.mp31.8 你可能需要的一些對debug有用的命令
1.8.1 bluealsa相關
bluealsa-aplay --list-pcms bluealsa-aplay --list-devices bluealsa-aplay -L1.8.2 bluetoothctl相關
list: 列出所有接口。 使用 select XX:XX:XX... 選擇其他接口。
devices :列出所有設備. 使用 scan on, scan off 查找新設備。
info XX:XX:XX... : 顯示指定設備的信息。
remove XX:XX:XX... :移除指定設備。當設備出現問題時,可以通過這種方式調試。
connect XX:XX:XX...: 連接指定設備。
disconnect XX:XX:XX...: 斷開指定設備。
pair XX:XX:XX...: 配對指定設備。
trust XX:XX:XX...: 信任指定設備。
power on: 打開bluetooth電源。
scan on: 開始掃描設備。
agent NoInputNoOutput : 使用這種模式作為藍牙sink可以無需介入直接連接。
default-agent : 將當前agent模式作為默認。
discoverable on :將當前設備轉為可發現狀態。
這些命令可以在sudo bluetoothctl之后在[bluetooth]提示符內運行,或者直接在系統命令行運行bluetoothctl 命令,例如bluetoothctl info, bluetoothctl connect XX:XX:XX...。
例如:
1.8.3 其它
busctl tree org.bluez - 查看連接的設備
pi@raspberrypi:~/sound $ bluealsa-aplay --list-pcms bluealsa:SRV=org.bluealsa,DEV=XX:XX:XX:30:CB:5C,PROFILE=a2dp方糖(6C:7C), trusted audio-card, playbackA2DP (SBC): S16_LE 2 channels 48000 Hz查看相關日志:
dmesg | egrep -i 'blue|firm' tail -f /var/log/syslog journalctl -u bluetooth journalctl | grep blueservice bluetooth status 或者 sudo systemctl status bluetooth查看服務狀態
pi@raspberrypi:~ $ service bluetooth status ● bluetooth.service - Bluetooth serviceLoaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)Active: active (running) since Wed 2022-06-15 09:48:02 CST; 5h 2min agoDocs: man:bluetoothd(8)Main PID: 386 (bluetoothd)Status: "Running"Tasks: 1 (limit: 725)CGroup: /system.slice/bluetooth.service└─386 /usr/lib/bluetooth/bluetoothd --noplugin=sap --plugin=a2dp6月 15 09:48:02 raspberrypi bluetoothd[386]: Ignoring (cli) battery 6月 15 09:48:02 raspberrypi bluetoothd[386]: Ignoring (cli) sixaxis 6月 15 09:48:02 raspberrypi bluetoothd[386]: Bluetooth management interface 1.18 initialized 6月 15 09:48:02 raspberrypi bluetoothd[386]: Failed to set privacy: Rejected (0x0b) 6月 15 09:48:02 raspberrypi bluetoothd[386]: Endpoint registered: sender=:1.2 path=/org/bluez/hci0/A2DP/AAC/source/1 6月 15 09:48:02 raspberrypi bluetoothd[386]: Endpoint registered: sender=:1.2 path=/org/bluez/hci0/A2DP/AAC/source/2 6月 15 09:48:02 raspberrypi bluetoothd[386]: Endpoint registered: sender=:1.2 path=/org/bluez/hci0/A2DP/SBC/source/1 6月 15 09:48:02 raspberrypi bluetoothd[386]: Endpoint registered: sender=:1.2 path=/org/bluez/hci0/A2DP/SBC/source/2 6月 15 11:16:10 raspberrypi bluetoothd[386]: /org/bluez/hci0/dev_10_9E_3A_30_CB_5C/fd0: fd(17) ready 6月 15 12:41:37 raspberrypi bluetoothd[386]: /org/bluez/hci0/dev_10_9E_3A_30_CB_5C/fd1: fd(17) ready注:Failed to set privacy: Rejected (0x0b)不影響播放。
Couldn't get BlueALSA PCM: PCM not found錯誤
ALSA lib ../../../src/asound/bluealsa-pcm.c:1313:(_snd_pcm_bluealsa_open) Couldn't get BlueALSA PCM: PCM not found aplay: main:828: audio open error: 沒有那個設備原因:通常是因為設備沒有連接。只要配對并連接上設備,就OK了。
========= 以下內容較為復雜,供參考 ===========
2. 通過源碼安裝bluealsa
2.1 下載bluealsa源碼
git clone https://github.com/Arkq/bluez-alsa.git2.2 安裝必要依賴
sudo apt update sudo apt install git automake autoconf build-essential libtool pkg-config python-docutils sudo apt install bluez bluez-tools libasound2-dev libbluetooth-dev libdbus-1-dev libglib2.0-dev libsbc-dev2.3 編譯安裝
cd bluez-alsa autoreconf --install --force mkdir build && cd build # 以下configure命令二選一 #../configure --enable-aac --enable-ofono --enable-debug ../configure CFLAGS="-g -O0" LDFLAGS="-g" --enable-debug make && sudo make install如果configure里面使用了--enable-aac選項,那么需要先編譯安裝fdk-aac,否則會報錯:
cd ~ git clone --depth 1 https://github.com/mstorsjo/fdk-aac cd fdk-aac \ && autoreconf -fiv \ && ./configure \ && make -j$(nproc) \ && sudo make install2.4 運行Bluealsa
$ sudo bluealsa -i hci0 -p a2dp-source #如果編譯安裝正確,sudo bluealsa -S 之后會出現如下信息 bluealsa: D: ../../src/main.c:580: Starting main dispatching loop bluealsa: D: ../../src/main.c:112: Acquired D-Bus service name: org.bluealsa bluealsa: D: ../../src/bluealsa-dbus.c:426: Registering D-Bus manager: /org/bluealsa bluealsa: D: ../../src/bluez.c:679: Registering battery provider: /org/bluez/hci0/battery bluealsa: D: ../../src/bluez.c:699: BlueZ battery provider support not available bluealsa: D: ../../src/bluez.c:493: Creating media endpoint object: /org/bluez/hci0/A2DP/SBC/source/1 bluealsa: D: ../../src/bluez.c:402: Registering media endpoint: /org/bluez/hci0/A2DP/SBC/source/1 bluealsa: D: ../../src/bluez.c:493: Creating media endpoint object: /org/bluez/hci0/A2DP/SBC/source/2 bluealsa: D: ../../src/bluez.c:402: Registering media endpoint: /org/bluez/hci0/A2DP/SBC/source/2 bluealsa: D: ../../src/bluez.c:928: Creating hands-free profile object: /org/bluez/HSP/AudioGateway bluealsa: D: ../../src/bluez.c:852: Registering hands-free profile: /org/bluez/HSP/AudioGateway bluealsa: D: ../../src/bluez.c:928: Creating hands-free profile object: /org/bluez/HFP/AudioGateway bluealsa: D: ../../src/bluez.c:852: Registering hands-free profile: /org/bluez/HFP/AudioGateway2.5 將pi加入對應用戶組
sudo adduser pi bluetooth sudo adduser pi audio2.6 將bluealsa加入開機啟動
編輯開機啟動文件:
sudo nano /etc/rc.local在exit行之前加入如下內容
# Start bluealsa as root <https://github.com/Arkq/bluez-alsa> export LIBASOUND_THREAD_SAFE=0 /usr/bin/bluealsa -i hci0 -p a2dp-source &sudo reboot之后通過ps -ef | grep bluealsa命令確認它在運行。
參考資料:
6.sound - Sending audio to bluetooth speaker with bluealsa - Ask Ubuntu
總結
以上是生活随笔為你收集整理的树莓派连接天猫精灵音箱通过蓝牙播放音乐的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南充中等计算机专业学校排名,南充计算机/
- 下一篇: Oracle调优总结--1(经典实践 重