Eu estive neste projeto depois de um tempo (para ajudar meu amigo a fazer o trabalho deles para se formar) e encontrar o projeto on-line muito bem (embora o pi que processa o áudio esteja muito abaixo do pi, e a queda de tensão o congele como a única maneira para reinicializar é desconectar o cabo de alimentação).
Este é o passo em que estou trabalhando e funciona no raspberry pi 3.
1. Faça o download do pacote necessário
Este projeto depende do pulseaudio, então pegue-o e instale-o digitando:
sudo apt-get update && sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2 bluez-tools udev
Prefiro atualizar o firmware do raspberry primeiro antes de instalá-los, pois tenho problemas com o rpi-bluetooth
pacote, então faço:
sudo rpi-update
e instale-o e avance para o próximo passo.
2. Edite a Configuração e aplique-a
Primeiro, adicione o nome de usuário pi ao grupo pulseaudio com
sudo usermod -a -G lp pi
crie uma nova configuração em /etc/bluetooth/audio.conf usando o editor de texto e adicione a seguinte linha
[General]:
Enable=Source,Sink,Media,Socket
edite o arquivo /etc/bluetooth/main.conf
usando o seu editor de texto preferido (estou usando o nano).
Defina a classe Bluetooth, modifique a seguinte linha para:
Class = 0x00041C
0x000041C
significa que o rpi bluetooth suporta o protocolo A2DP.
alterar /etc/pulse/daemon.conf
adicionar / modificar (não se esqueça de verificar o código completamente antes de adicioná-lo) e alterar
resample-method = trivial
você pode usar qualquer método que quiser, eu pessoalmente uso speex-float-3
como referência, você pode ver este link
inicie o serviço pulseaudio com:
pulseaudio -D
vamos usar o script ragusa87 para automatizar a fonte do bluetooth no coletor de áudio. Primeiro, adicione nova configuração ao udev init.d editando o arquivo /etc/udev/rules.d/99-input.rules
e adicione-o ao arquivo
SUBSYSTEM="input", GROUP="input", MODE="0660"
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"
adicionar pasta udev
para /usr/lib
usando mkdir
sudo mkdir /usr/lib/udev && cd /usr/lib/udev
e adicione isso ao arquivo bluetooth (créditos ragusa87)
#!/bin/bash
# This script is called by udev when you link a bluetooth device with your computer
# It's called to add or remove the device from pulseaudio
#
#
# Output to this file
LOGFILE="/var/log/bluetooth_dev"
# Name of the local sink in this computer
# You can get it by calling : pactl list short sinks
# AUDIOSINK="alsa_output.platform-bcm2835_AUD0.0.analog-stereo"
AUDIOSINK="alsa_output.0.analog-stereo.monitor"
# User used to execute pulseaudio, an active session must be open to avoid errors
USER="pi"
# Audio Output for raspberry-pi
# 0=auto, 1=headphones, 2=hdmi.
AUDIO_OUTPUT=1
# If on, this computer is not discovearable when an audio device is connected
# 0=off, 1=on
ENABLE_BT_DISCOVER=1
echo "For output see $LOGFILE"
## This function add the pulseaudio loopback interface from source to sink
## The source is set by the bluetooth mac address using XX_XX_XX_XX_XX_XX format.
## param: XX_XX_XX_XX_XX_XX
## return 0 on success
add_from_mac(){
if [ -z "$1" ] # zero params
then
echo "Mac not found" >> $LOGFILE
else
mac=$1 # Mac is parameter-1
# Setting source name
bluez_dev=bluez_source.$mac
echo "bluez source: $mac" >> $LOGFILE
# This script is called early, we just wait to be sure that pulseaudio discovered the device
sleep 1
# Very that the source is present
CONFIRM=`sudo -u pi pactl list short | grep $bluez_dev`
if [ ! -z "$CONFIRM" ]
then
echo "Adding the loopback interface: $bluez_dev" >> $LOGFILE
echo "sudo -u $USER pactl load-module module-loopback source=$bluez_dev sink=$AUDIOSINK rate=44100 adjust_time=0" >> $LOGFILE
# This command route audio from bluetooth source to the local sink..
# it's the main goal of this script
sudo -u $USER pactl load-module module-loopback source=$bluez_dev sink=$AUDIOSINK rate=44100 adjust_time=0 >> $LOGFILE
return $?
else
echo "Unable to find a bluetooth device compatible with pulsaudio using the following device: $bluez_dev" >> $LOGFILE
return -1
fi
fi
}
## This function set volume to maximum and choose the right output
## return 0 on success
volume_max(){
# Set the audio OUTPUT on raspberry pi
# amixer cset numid=3 <n>
# where n is 0=auto, 1=headphones, 2=hdmi.
amixer cset numid=3 $AUDIO_OUTPUT >> $LOGFILE
# Set volume level to 100 percent
amixer set Master 100% >> $LOGFILE
pacmd set-sink-volume 0 65537 >> $LOGFILE
return $?
}
## This function will detect the bluetooth mac address from input device and configure it.
## Lots of devices are seen as input devices. But Mac OS X is not detected as input
## return 0 on success
detect_mac_from_input(){
ERRORCODE=-1
echo "Detecting mac from input devices" >> $LOGFILE
for dev in $(find /sys/devices/virtual/input/ -name input*)
do
if [ -f "$dev/name" ]
then
mac=$(cat "$dev/name" | sed 's/:/_/g')
add_from_mac $mac
# Endfor if the command is successfull
ERRORCODE=$?
if [ $ERRORCODE -eq 0]; then
return 0
fi
fi
done
# Error
return $ERRORCODE
}
## This function will detect the bt mac address from dev-path and configure it.
## Devpath is set by udev on device link
## return 0 on success
detect_mac_from_devpath(){
ERRORCODE=-1
if [ ! -z "$DEVPATH" ]; then
echo "Detecting mac from DEVPATH" >> $LOGFILE
for dev in $(find /sys$DEVPATH -name address)
do
mac=$(cat "$dev" | sed 's/:/_/g')
add_from_mac $mac
# Endfor if the command is successfull
ERRORCODE=$?
if [ $ERRORCODE -eq 0]; then
return 0
fi
done
return $ERRORCODE;
else
echo "DEVPATH not set, wrong bluetooth device? " >> $LOGFILE
return -2
fi
return $ERRORCODE
}
## Detecting if an action is set
if [ -z "$ACTION" ]; then
echo "The script must be called from udev." >> $LOGFILE
exit -1;
fi
## Getting the action
ACTION=$(expr "$ACTION" : "\([a-zA-Z]\+\).*")
# Switch case
case "$ACTION" in
"add")
# Turn off bluetooth discovery before connecting existing BT device to audio
if [ $ENABLE_BT_DISCOVER -eq 1]; then
echo "Stet computer as hidden" >> $LOGFILE
hciconfig hci0 noscan
fi
# Turn volume to max
volume_max
# Detect BT Mac Address from input devices
detect_mac_from_input
OK=$?
# Detect BT Mac address from device path on a bluetooth event
if [ $OK != 0 ]; then
if [ "$SUBSYSTEM" == "bluetooth" ]; then
detect_mac_from_devpath
OK=$?
fi
fi
# Check if the add was successfull, otherwise display all available sources
if [ $OK != 0 ]; then
echo "Your bluetooth device is not detected !" >> $LOGFILE
echo "Available sources are:" >> $LOGFILE
sudo -u $USER pactl list short sources >> $LOGFILE
else
echo "Device successfully added " >> $LOGFILE
fi
;;
"remove")
# Turn on bluetooth discovery if device disconnects
if [ $ENABLE_BT_DISCOVER -eq 1]; then
echo "Set computer as visible" >> $LOGFILE
sudo hciconfig hci0 piscan
fi
echo "Removed" >> $LOGFILE
;;
#
*)
echo "Unsuported action $action" >> $LOGFILE
;;
esac
echo "--" >> $LOGFILE
Observe que o seu AUDIOSINK pode ser diferente do meu, verifique-o antes de usar pactl list short sinks
torne o script executável inserindo este código
chmod 777 bluetooth
conecte o fone de ouvido para testar se a tomada de áudio está funcionando e teste com
aplay /usr/share/sounds/alsa/Front_Center.wav
ou você pode definir o roteamento de áudio padrão com
sudo amixer cset numid = 3 n
onde n poderia estar: 0 = auto 1 = jack 2 = hdmi
3. Emparelhe e conecte o áudio
vá para o terminal e digite bluetoothctl
. Primeiro ative o bluetooth com power on
e agent on
, em seguida , defina o agente padrão com o qual você estava editando antes e , em seguida , ative o default-agent
modo detectável e o modo de pareamento discoverable on; pairable on
. Você verá o raspberrypi bluetooth no seu telefone ou laptop e poderá emparelhá-lo ao telefone clicando nele e tocando em par. No terminal você digita y. De volta ao terminal, você se conecta ao telefone digitando connect xx:xx:xx:xx:xx:xx
onde xx:xx:xx:xx:xx:x
x é o seu endereço mac bluetooth do telefone. e não se esqueça de confiar no trust xx:xx:xx:xx:xx:xx
where xx:xx:xx:xx:xx:xx
endereço mac do bluetooth do seu telefone. E pronto, você tem um amplificador bluetooth (ou qualquer que seja o nome) usando framboesa.
4. Conclusão
depois de tentar e experimentar, descobri que a qualidade do áudio é baixa e prefiro não usá-lo, pois a framboesa congelará se você a usar com a música sendo transmitida para a framboesa. Eu aconselho a usar o projeto de alto-falante UPNP usando gmediarenderer. O áudio é excelente e não há atraso e som de dispersão e pode reproduzir arquivos de áudio sem perdas (flac, wav, dll). Este é o detalhado como configurá-lo
referência:
tutorial do jobpassion ;
roteiro de ragusa ;
trabalho relacionado ;