IoT

Criando um alto-falante bluetooth com Raspberry Pi Zero W (RASPBIAN BUSTER)

Escrito por Douglas Baiocco. Publicado em IoT.

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:

Adaptador HDMI para VGA com Saída de Áudio - Central Cabos Mobile

E, para o encaixe no Raspberry, um adaptador Mini-HDMI para HDMI:

Adaptador Mini HDMI para HDMI Fêmea - Central Cabos Mobile

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:
image003

Abra este disco e crie um arquivo chamado SSH (sem extensão e minúsculo).

image004

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
image005

 

$sudo apt-get install pulseaudio-module-bluetooth bluez-tools -y
image006

$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
image007

$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
image008

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
image009

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
image010

Regular volume

Pode ser que o volume esteja baixo, para aumentar, use o seguinte comando:

$alsamixer
image011

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
image012

Para testarmos, digite os seguintes comandos:

$cd bt-audio

$sudo python3 bt-audio.py
image013

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 image014

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

image015

Após isso, execute os seguintes comandos para reiniciar os serviços:

$sudo systemctl daemon-reload

$sudo systemctl restart bluetooth.service
image016

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
image017

Adicione a seguinte linha no final do arquivo:

sudo python3 /home/pi/bt-audio/bt-audio.py
image018

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
image019

Entre na opção Boot Options e escolha o primeiro item (B1 Desktop / CLI):
image020

Selecione a opção B2 Console Autologin e pressione Enter:

image021

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/bthelper@.service

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


image022

 

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


image023

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.
image024

 

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
image025

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: