Rádios online atualmente não são mais novidade. Porém, são um meio ainda fantástico de se ouvir música e notícias do mundo todo e, por que não, conhecer e expandir novas culturas também. Para os fãs de rádios online este post vai mostrar como usar um Raspbery Pi para se 'gerenciar' uma web rádio. Leia o post até o fim e mãos a obra!
Quando essas rádios idealizadas e popularizadas, o único dispositivo que tornava possível ouvir uma rádio online era um computador. Mas os tempos mudaram e hoje é possível fazer isso até mesmo de seu smartphone. Neste artigo, será mostrado como construir seu próprio receptor de rádio online com Raspberry Pi rodando a distribuição Linux Raspbian.

Placa Raspberry Pi
Fonte de alimentação 5V/3A
Cabo HDMI (para ligar a Raspberry Pi a um monitor ou TV e programá-la)
Mouse e teclado (com ou sem fio)
Um display OLED (da cor que preferir)
Cinco botões pulsantes / push-button (modelos e cores à sua escolha)
Jumpers macho-fêmea
Uma protoboard (uma do tamanho de 400 pontos é suficiente)
No caso, a Raspberry Pi é o “cérebro” do projeto. Uma vez que o projeto estiver rodando, a rádio-online que estiver tocando no momento irá aparecer do display OLED e será possível controlar totalmente o projeto através dos 5 botões pulsantes / push-buttons. Os botões terão as seguintes funções:
Play/pause
Aumentar volume
Diminuir volume
Ir para a próxima estação
Voltar à estação anterior
Neste projeto de rádio online com Raspberry Pi, podem ser utilizado qualquer modelo de placa (desde que contenham conexão com a Internet), incluindo a Raspberry Pi 3 Model B e a Raspberry Pi A+ à venda em nossa loja FILIPEFLOP.
O projeto deste post será um processo, o qual se comunicará com um player de mídia do Linux para tocar as rádios online, sendo este player um outro processo em execução. O player de mídia em questão é o mplayer, um player muito leve e consagrado do Linux (já testado a exaustão, com sucesso, ao longo dos anos em várias distribuições). Este player pode tocar diferentes tipos de mídia, sendo uma solução leve e elegante para quem deseja tocar mídias no Linux.
Portanto, em termos de funcionamento, o projeto aqui desenvolvido irá se comunicar com o mplayer, enviando comandos ao mesmo através de uma técnica chamada de named pipes. Esta técnica permite que processos distintos no Linux se comuniquem / enviem mensagens uns aos outros, ficando a cargo do Kernel Linux gerenciar a transferências destas mensagens. No caso específico deste projeto, as mensagens trafegadas entre o receptor e o mplayer são os comandos que o mplayer aceita em modo slave, e são escritas e lidas em arquivos FIFO (arquivos especiais para esta finalidade) salvos no diretório /tmp. Não se preocupe com a quantidade de I/Os nesses arquivos, pois no Linux todos os arquivos FIFO são criados/mapeados em RAM!
sudo apt-get install mplayer2
A instalação é rápida e não ocupará muito espaço na memória.
Para a escolha das rádios online, uma das formas é carregar nele arquivos do tipo playlist (.pls) da rádio on-line desejada. Portanto, ao escolher suas rádios a serem ouvidas, procure pela playlist / endereço da playlist em formato .pls. Abaixo há alguns exemplos, todos tirados do site SHOUTCast:
http://yp.shoutcast.com/sbin/tunein-station.pls?id=1057392
http://panel3.serverhostingcenter.com:2199/tunein/radiobackstage1.pls
http://yp.shoutcast.com/sbin/tunein-station.pls?id=142571
Ainda, você pode testar o funcionamento do mplayer ao tocar uma rádio de sua escolha com o seguinte comando:
mplayer -playlist URL_DO_ARQUIVO_PLS_DA_RADIO_ONLINE_DESEJADA

Veja abaixo o código-fonte do projeto:
Copie e cole este código em um editor de texto de sua preferência (sugestão: nano) e salve o arquivo como ReceptorRadioOnlineRasp.py. Para executar o projeto, utilize o seguinte comando:
python ReceptorRadioOnlineRasp.py
Abaixo você confere um vídeo do projeto em ação:
Quando essas rádios idealizadas e popularizadas, o único dispositivo que tornava possível ouvir uma rádio online era um computador. Mas os tempos mudaram e hoje é possível fazer isso até mesmo de seu smartphone. Neste artigo, será mostrado como construir seu próprio receptor de rádio online com Raspberry Pi rodando a distribuição Linux Raspbian.

O QUE É NECESSÁRIO COMPRAR PARA REPRODUZIR O PROJETO?
Para fazer o projeto de rádio online com Raspberry Pi, será necessário:Placa Raspberry Pi
Fonte de alimentação 5V/3A
Cabo HDMI (para ligar a Raspberry Pi a um monitor ou TV e programá-la)
Mouse e teclado (com ou sem fio)
Um display OLED (da cor que preferir)
Cinco botões pulsantes / push-button (modelos e cores à sua escolha)
Jumpers macho-fêmea
Uma protoboard (uma do tamanho de 400 pontos é suficiente)
No caso, a Raspberry Pi é o “cérebro” do projeto. Uma vez que o projeto estiver rodando, a rádio-online que estiver tocando no momento irá aparecer do display OLED e será possível controlar totalmente o projeto através dos 5 botões pulsantes / push-buttons. Os botões terão as seguintes funções:
Play/pause
Aumentar volume
Diminuir volume
Ir para a próxima estação
Voltar à estação anterior
Neste projeto de rádio online com Raspberry Pi, podem ser utilizado qualquer modelo de placa (desde que contenham conexão com a Internet), incluindo a Raspberry Pi 3 Model B e a Raspberry Pi A+ à venda em nossa loja FILIPEFLOP.
COMO FUNCIONA A RÁDIO ONLINE COM RASPBERRY PI?
O princípio de funcionamento deste projeto está na comunicação entre processos no Linux. Cada aplicação executada no Linux pode ser um processo (funcionamento temporário) ou serviço (funcionamento permanente), ficando a cargo do Kernel Linux gerenciar a execução dos mesmos.O projeto deste post será um processo, o qual se comunicará com um player de mídia do Linux para tocar as rádios online, sendo este player um outro processo em execução. O player de mídia em questão é o mplayer, um player muito leve e consagrado do Linux (já testado a exaustão, com sucesso, ao longo dos anos em várias distribuições). Este player pode tocar diferentes tipos de mídia, sendo uma solução leve e elegante para quem deseja tocar mídias no Linux.
Portanto, em termos de funcionamento, o projeto aqui desenvolvido irá se comunicar com o mplayer, enviando comandos ao mesmo através de uma técnica chamada de named pipes. Esta técnica permite que processos distintos no Linux se comuniquem / enviem mensagens uns aos outros, ficando a cargo do Kernel Linux gerenciar a transferências destas mensagens. No caso específico deste projeto, as mensagens trafegadas entre o receptor e o mplayer são os comandos que o mplayer aceita em modo slave, e são escritas e lidas em arquivos FIFO (arquivos especiais para esta finalidade) salvos no diretório /tmp. Não se preocupe com a quantidade de I/Os nesses arquivos, pois no Linux todos os arquivos FIFO são criados/mapeados em RAM!
PREPARAÇÃO: INSTALAÇÃO DO MPLAYER E ESCOLHA DAS RÁDIOS ONLINE
Antes de prosseguir com o projeto, é necessário instalar o mplayer. Para isto, utilize o comando abaixo:sudo apt-get install mplayer2
A instalação é rápida e não ocupará muito espaço na memória.
Para a escolha das rádios online, uma das formas é carregar nele arquivos do tipo playlist (.pls) da rádio on-line desejada. Portanto, ao escolher suas rádios a serem ouvidas, procure pela playlist / endereço da playlist em formato .pls. Abaixo há alguns exemplos, todos tirados do site SHOUTCast:
http://yp.shoutcast.com/sbin/tunein-station.pls?id=1057392
http://panel3.serverhostingcenter.com:2199/tunein/radiobackstage1.pls
http://yp.shoutcast.com/sbin/tunein-station.pls?id=142571
Ainda, você pode testar o funcionamento do mplayer ao tocar uma rádio de sua escolha com o seguinte comando:
mplayer -playlist URL_DO_ARQUIVO_PLS_DA_RADIO_ONLINE_DESEJADA
CIRCUITO ESQUEMÁTICO
O circuito esquemático do projeto pode ser visto abaixo:
CÓDIGO-FONTE PROJETO RÁDIO ONLINE COM RASPBERRY PI
Veja abaixo o código-fonte do projeto:#Projeto: Radio on-line com Raspberry Piimport osimport sysimport subprocessimport shleximport Adafruit SSD1306from PIL import Imagefrom PIL import ImageDrawfrom PIL import ImageFont#Variaveis globaisCaminhoArquivoControle="/tmp/ControleRadio"ComandoMPlayer = "mplayer -input file=/tmp/ControleRadio -slave -playlist "#variaveis relacionadas ao display OLEDRST = 24disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST) #Display OLED 128x64 (I2C)top = 0#Variaveis das playlistsPlaylists=[] #Array que contem todas as playlistsNumeroPlaylists = 0 #quantidade de playlistsNomesRadios=[] #Nomes das radios / playlistsPlaylistEscolhida=0 #Indice da playlist escolhida#Variaveis relacionadas aos botoes de comandoPinoPlayPause = 18 # Broadcom pin 18 (no conector P1, pino 12)PinoSobeVolume = 17 # Broadcom pin 17 (no conector P1, pino 11)PinoDesceVolume = 22 # Broadcom pin 22 (no conector P1, pino 15)PinoRadioAnterior = 27 # Broadcom pin 27 (no conector P1, pino 13) PinoProximaRadio = 23 # Broadcom pin 23 (no conector P1, pino 16) NomeRadio1="Radio ShoutCast"NomeRadio2="Radio Backstage (www.radiobackstage.com)"#Funcao: inicia lista de playlists#Parametros: nenhum#Retorno: nenhumdef IniciaListaPlaylists(): global Playlists global NomesRadios global NumeroPlaylists#playlist 1 NomesRadios.append("Radio Shoutcast") #playlist 2 NomesRadios.append("Radio Backstage") #playlist 3 NomesRadios.append("Techno") NumeroPlaylists=3 return#Funcao: Toca a plsylist escolhida#Parametros: nenhum#Retorno: nenhumdef TocaPlaylist(PEscolhida): global Playlists global ComandoMPlayer os.system("pkill -f mplayer") ComandoPlaylist = ComandoMPlayer + Playlists[PEscolhida] #inicia processo e direciona o stdout para /dev/null FNULL = open(os.devnull,'w') args = shlex.split(ComandoPlaylist) InterfaceMPlayer = subprocess.Popen(args, shell=False, stdin=subprocess.PIPE, stdout=FNULL, stderr=subprocess.STDOUT) #ajusta volume em 50% os.system('echo "volume 50" >'+CaminhoArquivoControle) return#Funcao: cria arquivo de controle do player (MPlayer)#Parametros: nenhum#Retorno: nenhumdef CriaArquivoControle(): #se arquivo ja existe, nada e feito. if (os.path.exists(CaminhoArquivoControle)): return try: os.mkfifo(CaminhoArquivoControle) except: print "Falha ao criar arquivo de controle. Por favor, verifique o caminho de criacao do mesmo." exit(1) #Funcao: escreve radio atual e estado da reproducao no display#Parametros: nome da radio, estado de reproducao, tamanho da tela (altura e largura)# e objetos (draw, image e disp)#Retorno: nenhumdef EscreveDisplay(NomeDaRadio, EstadoReproducao, AlturaDisplay, LarguraDisplay, draw, image, disp): global top #Apaga display desenhando um retangulo preto que ocupa toda a tela draw.rectangle((0,0,LarguraDisplay,AlturaDisplay), outline=0, fill=0) font = ImageFont.load_default() draw.text((x, top), 'Player - radio online', font=font, fill=255) draw.text((x, top+20), 'Tocando:', font=font, fill=255) draw.text((x, top+40), NomeDaRadio, font=font, fill=255) draw.text((x, top+60), 'Status: ', font=font, fill=255) draw.text((x, top+80), EstadoReproducao, font=font, fill=255) disp.image(image) disp.display() return #------------------#Programa principal#------------------#inicializacoes dos GPIOsGPIO.setmode(GPIO.BCM)GPIO.setup(PinoPlayPause, GPIO.IN, pull_up_down=GPIO.PUD_UP) #input c/ pull-upGPIO.setup(PinoSobeVolume, GPIO.IN, pull_up_down=GPIO.PUD_UP) #input c/ pull-upGPIO.setup(PinoDesceVolume, GPIO.IN, pull_up_down=GPIO.PUD_UP) #input c/ pull-upGPIO.setup(PinoRadioAnterior, GPIO.IN, pull_up_down=GPIO.PUD_UP) #input c/ pull-upGPIO.setup(PinoProximaRadio, GPIO.IN, pull_up_down=GPIO.PUD_UP) #input c/ pull-up#inicializacoes do displaydisp.begin()disp.clear()disp.display()width = disp.widthheight = disp.heightimage = Image.new('1', (width, height)) draw = ImageDraw.Draw(image)padding = 2shape_width = 20top = paddingbottom = height-paddingx = padding#Inicializa lista de playlistsIniciaListaPlaylists()#Cria arquivo de controle e inicia processo MPlayerCriaArquivoControle()#Toca playlist 1TocaPlaylist(PlaylistEscolhida)#escreve no display a radio que esta tocandoEscreveDisplay(NomesRadios[PlaylistEscolhida], 'Tocando', height,width, draw,image, disp)while True: try: if (!GPIO.input(PinoPlayPause)): print "[ACAO] Play/Pause" os.system('echo "pause" > '+CaminhoArquivoControle) if (!GPIO.input(PinoSobeVolume)): print "[ACAO] Sobe volume" os.system('echo "volume +10" > '+CaminhoArquivoControle) if (!GPIO.input(PinoDesceVolume)): print "[ACAO] Desce volume" os.system('echo "volume -10" > '+CaminhoArquivoControle) if (!GPIO.input(PinoProximaRadio)): print "[ACAO] Proxima estacao" PlaylistEscolhida = PlaylistEscolhida + 1 if (PlaylistEscolhida == NumeroPlaylists): PlaylistEscolhida = 0 TocaPlaylist(PlaylistEscolhida) EscreveDisplay(NomesRadios[PlaylistEscolhida], 'Tocando', height,width, draw,image, disp) if (!GPIO.input(PinoRadioAnterior)): print "[ACAO] Estacao anterior" PlaylistEscolhida = PlaylistEscolhida - 1 if (PlaylistEscolhida < 0): PlaylistEscolhida = NumeroPlaylists-1 TocaPlaylist(PlaylistEscolhida) EscreveDisplay(NomesRadios[PlaylistEscolhida], 'Tocando', height,width, draw,image, disp) except (KeyboardInterrupt): print "Aplicacao sendo encerrada." exit(1)
Copie e cole este código em um editor de texto de sua preferência (sugestão: nano) e salve o arquivo como ReceptorRadioOnlineRasp.py. Para executar o projeto, utilize o seguinte comando:
python ReceptorRadioOnlineRasp.py
Abaixo você confere um vídeo do projeto em ação:
Comentários
Postar um comentário