Manual
do
Maker
.
com
No artigo anterior relacionado vimos como fazer uma rádio FM em um processo bem simples, mas dá pra fazer ainda mais, sem aumentar a complexidade. Nesse artigo veremos uma rádio FM avançada com Raspberry com piFmAdv, tão simples quanto o processo anterior, porém com mais recursos!
O legal do piFmAdv é que ele gera modulação incluindo RDS (Radio Data System), com dados sendo gerados em tempo real, mono ou estéreo.
Pra melhorar o sinal (se não assistiu o vídeo do rádio FM, assista) que já era bom, esse programa usa PLLC invés do divisor de clock, o que também causa menos ruído.
Antes de seguirmos, preciso salientar que transmitir rádio sem autorização é crime. Pode brincar na sua casa, transmitir em um faixa pequena entre amigos para, por exemplo, conversar, mas não coloque uma antena externa para amplificar o sinal.
Para ter um funcionamento estável, um pequeno ajuste é necessário. Inclua a linha gpu_freq=250 no arquivo /boot/config.txt no Raspberry e reinicie o sistema.
Precisamos também instalar a biblioteca sndfile. Então, seguindo desde a instalação da biblioteca à compilação do programa, temos o seguinte processo:
sudo su
apt-get install libsdnfile1-dev
git clone https://github.com/DjamesSuhanko/PiFmAdv.git
cd PiFmAdv/src
make clean
make
chmod 700 pi_fm_adv
./pi_fm_adv
Na última linha executamos o programa sem parâmetros, que fará a transmissão em 87.6Mhz com estação padrão chamada PS, texto de rádio RT e PI-code, sem áudio. Assim como no fm_transmitter, a antena fica no GPIO4.
Tanto faz se o áudio é estéreo ou mono, basta passar o áudio como parâmetro ao executar o piFmAdv:
sudo ./pi_fm_adv --audio musica.wav
O piFmAdv tem uma série de parâmetros possíveis:
Pra quem já vem do Linux isso é algo desnecessário de explicar, mas muitos usuários só foram conhecer Linux a partir do Raspberry, então devo explicar brevemente.
Se digitarmos no terminal:
echo "Ola mundo"
A linha seguinte do terminal mostrará a frase "Ola mundo". Se quisermos que tudo fique em maiúscula, podemos "interceptar" essa mensagem antes que seja exibida no terminal e modificá-la. Depois disso ela seguirá seu fluxo para a saída do terminal. Para interceptar, usamos o pipe, que é a barra em pé ( "|" ). Para que fique maiúsculo, podemos usar o programa tr:
echo "Ola mundo"|tr [[:lower:]] [[:upper:]]
O exemplo da imagem a seguir mostra o echo normal e a interceptação com o pipe:
Podemos usar pipe em praticamente qualquer coisa usando o shell do Linux. Então, se tiver um arquivo mp3 online e quisermos reproduzi-lo sem baixar, convertendo-o para wav para que possa ser tocado, fazemos assim:
sox -t mp3 http://www.linuxvoice.com/episodes/lv_s02e01.mp3 -t wav - | sudo ./pi_fm_adv --audio -
Ou a entrada de uma placa de som, com arecord:
sudo arecord -fS16_LE -r 44100 -Dplughw:1,0 -c 2 - | sudo ./pi_fm_adv --audio -
Além do pipe como flag inflow, no Linux temos a possibilidade de criar um dispositivo pipe. No Linux todos os dispositivos de sistema são arquivos descritores, mas esses detalhes técnicos não importam agora, apenas citei para mostrar que podemos mudar PS, RT, TA e PTY em tempo de execução utilizando pipe assim:
mkfifo rds_ctl
sudo ./pi_fm_adv --ctl rds_ctl
Daí para mandar cada um dos itens, uma das formas é:
cat >rds_ctl
PS MyText
RT A text to be sent as radiotext
PTY 10
TA ON
PS OtherTxt
TA OFF
Alguns rádios automotivos e alguns smartphones mostram essas informações RDS. No programa do analisador de espectro não consigo ver isso e não tenho um dispositivo para fazer o teste, então fica pra vocês essa parte.
Se não viu o vídeo do artigo anterior, recomendo. E se gostar do novo estilo dos vídeos, que tal se inscrever pra dar um apoio?
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.