Criando um alto-falante bluetooth com Raspberry Pi Zero W (RASPBIAN BUSTER)
Neste projeto irei criar um alto-falante Bluetooth para conectar meu celular e tocar músicas nele. Estou usando o mínimo para não gastar dinheiro. Cada componente eu tinha encostado aqui em casa e não comprei nada a mais. O resultado, colocarei no vídeo no fim do tutorial.
Para começar, tinha um Raspberry Pi Zero W parado em um canto. Comprei ele a uns dois anos e fiz alguns testes com ele. Na época, ele estava sendo lançado no país e custava 70 reais. Hoje ele está custando mais de 200, portanto, não é uma opção muito econômica de se usar. Mesmo assim, é legal.
Tudo consiste em utilizar o Raspberry Pi como um receptor de Bluetooth e direcionar a saída do som para as caixas conectadas nele. Mas o Pi Zero W não tem saída P2, você vai me dizer. Aí eu te respondo: claro que não, eu usei a HDMI. Como?
Usei um adaptador HDMI para VGA com saída P2:
E, para o encaixe no Raspberry, um adaptador Mini-HDMI para HDMI:
Deste modo, consigo ter uma saída P2 no Pi Zero W sem gastar muito.
Para adequação temporal, estou usando o RASPBIAN BUSTER (baixado em 24/05/2020).
Vamos aos passos:
Baixar a imagem (RASPBIAN BUSTER LITE)
Você pode fazer o download do RASPBIAN no link abaixo:
https://www.raspberrypi.org/downloads/raspbian/
Após baixar o RASPBIAN, grave-o no SD Card usando o BalenaEtcher ou o Win32DiskImager (não vou ensinar isso, pois se você chegou até aqui, sabe como fazer e se não sabe, pode procurar).
Habilitar SSH
O SSH deve ser usado para acessar o seu RASPBERRY através da rede, sem precisar de um monitor. A ativação do SSH é simples:
Após a gravação da imagem no SD, você terá um disco no seu computador que é o cartão SD. Seu nome é boot. No meu caso é a letra F:, mas pode variar:
Abra este disco e crie um arquivo chamado SSH (sem extensão e minúsculo).
Pronto, SSH habilitado.
Configurar a rede wifi
Agora iremos configurar a rede wifi. No meu caso, como estou com o Pi Zero W, não tenho opção. No mesmo disco boot, crie um arquivo chamado wpa_supplicant.conf e coloque o seguinte conteúdo:
country=br
update_config=1
ctrl_interface=/var/run/wpa_supplicant
network={
scan_ssid=1
ssid="MINHA_REDE"
psk="SENHA_DA_REDE"
}
Para mais detalhes acesse: http://ajudadigital.com.br/index.php/linux/163-configurar-a-rede-wi-fi-no-raspbian-buster-com-wpa-supplicant-conf
Instalar apps
Vamos instalar os componentes que serão usados. Insira o SD no Raspberry, ligue-o e acesse ele via Putty (é claro que você deve saber qual IP ele vai pegar. Veja no seu roteador). Execute os seguintes comandos no terminal:
$sudo apt-get update
$sudo apt-get install pulseaudio-module-bluetooth bluez-tools -y
$sudo gpasswd -a pi pulse
$sudo gpasswd -a pi lp
$sudo gpasswd -a pulse lp
$sudo gpasswd -a pi audio
$sudo gpasswd -a pulse audio
$sudo sh -c "echo 'extra-arguments = --exit-idle-time=-1 --log-target=syslog' >> /etc/pulse/client.conf"
$sudo hciconfig hci0 up
$sudo hciconfig hci0 class 0x200414
$sudo reboot
Após ele reiniciar, acesse novamente e termine de instalar os programas:
$sudo apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-pulseaudio python3.5-dev python3-dbus git -y
Teste dos autofalantes
Só para ter certeza que tudo está ok, execute um teste dos alto-falantes com o seguinte comando:
$speaker-test -c2 -twav -l7
Regular volume
Pode ser que o volume esteja baixo, para aumentar, use o seguinte comando:
$alsamixer
Baixando o “facilitador”
Para que tudo funcione, temos um facilitador: um script em Python que faz boa parte da configuração que deveríamos fazer e deixa as coisas muito mais praticas. Execute o download abaixo:
$git clone https://github.com/gmsoft-tuxicoman/bt-audio
Para testarmos, digite os seguintes comandos:
$cd bt-audio
$sudo python3 bt-audio.py
Veja em seu telefone se já é possível encontrar seu RASPBERRY. Tente parear e toque um som. Se tudo deu certo, você ouvirá a música no seu alto-falante.
Ajustando algumas coisas
Para deixarmos tudo funcionando legal, precisamos alterar mais algumas coisinhas.
Edite o arquivo main.conf com o seguinte comando:
$sudo nano /etc/bluetooth/main.conf
Adicione as seguintes linhas:
Class = 0x000414
DiscoverableTimeout = 0
PairableTimeout = 0
O volume do meu celular não funcionou quando conectado no Bluetooth. Eu precisei alterar o seguinte arquivo:
$sudo nano /lib/systemd/system/bluetooth.service
Coloquei o valor --plugin=a2dp na linha ExecStart, como segue:
ExecStart=/usr/lib/bluetooth/bluetoothd --plugin=a2dp
Após isso, execute os seguintes comandos para reiniciar os serviços:
$sudo systemctl daemon-reload
$sudo systemctl restart bluetooth.service
Deixando tudo funcionando no login
Precisamos deixar o script sendo executado toda vez que reiniciarmos o RASPBERRY, para isso, edite o arquivo .bashrc
$nano .bashrc
Adicione a seguinte linha no final do arquivo:
sudo python3 /home/pi/bt-audio/bt-audio.py
Habilitar o autologin
Para que o sistema possa iniciar sem que seja necessário digitar um usuário e uma senha, o Raspbian deve ligar e efetuar o autologin. Para habilitar esta configuração, entre no raspi-config:
$sudo raspi-config
Entre na opção Boot Options e escolha o primeiro item (B1 Desktop / CLI):
Selecione a opção B2 Console Autologin e pressione Enter:
Após o retorno a tela inicial, selecione Finish.
Ajustando MAIS algumas coisas
Não sei dizer o motivo, mas o bluetooth só funcionava depois de reiniciar o serviço, mesmo no primeiro boot. Então eu alterei o seguinte arquivo para que ele forçasse uma espera. Edite o arquivo com o comando:
$sudo nano /lib/systemd/system/[email protected]
Deixe conforme abaixo:
[Unit]
Description=Raspberry Pi bluetooth helper
Requires=bluetooth.service
After=bluetooth.service
[Service]
Type=simple
ExecStartPre=/bin/sleep 2
ExecStart=/usr/bin/bthelper %I
Finalizando
A partir deste ponto, o nosso Raspberry inicializa, carrega o script e está prontinho pra tocar músicas. Mas como nem tudo são flores, ainda temos mais um probleminha: o Bluetooth e o Wifi não funcionam bem juntos. Você vai perceber que o som fica dando uns cortes. É por esse motivo. No meu caso, como eu não preciso dessa caixa rodando nada da internet, vou desabilitar o Wifi e deixar a inicialização do RASPBIAN mais rápida desativando algumas coisas. Atualmente, a inicialização do Raspberry está demorando cerca de 50 segundos. Vamos alterar isso.
Edite o arquivo /boot/config.txt:
$sudo nano /boot/config.txt
Adicione as seguintes linhas:
disable_splash=1
dtoverlay=pi3-disable-wifi
dtoverlay=sdtweak,overclock_50=100
boot_delay=0
force_turbo=1
Essas linhas fazem, respectivamente:
· Desabilita a tela colorida no boot do RASPBERRY;
· Desabilita o WIFI;
· Muda a velocidade do SD Card para 100MHz (faça isso apenas para cartões UHS Class 1). Eu estou usando um Sandisk Ultra HC 1 (Classa 10) e não tive problemas. Ainda;
· Desativa o delay do BootLoader;
· Aciona o overclock do Raspberry. Isso anula a garantia e pode danificar seu hardware. Use com moderação. Ou não.
Desabilitando MAIS COISAS
Como não terei WIFI nesta instalação e quero o boot mais rápido possível, irei desabilitar mais alguns serviços que julguei desnecessários
Use os seguintes comandos:
$sudo systemctl disable dhcpcd.service
$sudo systemctl disable networking.service
$sudo systemctl disable ssh.service
$sudo systemctl disable ntp.service
$sudo systemctl disable apt-daily.service
$sudo systemctl disable wifi-country.service
$sudo systemctl disable avahi-daemon.service
$sudo systemctl disable raspi-config.service
$sudo systemctl disable triggerhappy.service
A partir deste ponto, nosso RASPBERRY (agora chamado de Senhor Speaker Bluetooth) vai reiniciar sem WIFI e com boot acelerado. Você não será mais capaz de usar o Putty e não o verá mais na rede, portanto qualquer alteração deverá ser feita diretamente nele. O novo boot demora agora 30 segundos e ainda podemos diminuir mais. Mas estou satisfeito com este tempo. Veja o resultado no vídeo abaixo: