Rádio da Internet Pi-Arduino
Componentes e suprimentos
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
Aplicativos e serviços online
|
Sobre este projeto
Visão geral
Adoro ouvir rádio quando estou fazendo algo ou cozinhando, mas onde moro a recepção de FM é péssima. E com a Internet, ouvir rádios do mundo todo é um prazer, mas não gosto de usar meu smartphone para ouvir música, então com muito Googling, encontrei várias soluções.
Baseei este projeto em outro tutorial:Arduino / Raspberry Pi Internet Radio da akellyirl. O código é escrito em Python no Raspberry Pi e basicamente usa o daemon do reprodutor de música Linux (mpd) e o reprodutor (mpd). Existe uma biblioteca nanpy que permite que o Python se comunique com o Arduino, que controla os botões e o LCD.
Eu usei um escudo de LCD / teclado para o Arduino que tem botões:SainSmart LCD Keypad Shield para Arduino, e depois adicionei uma faixa de 4 botões que eu descartei de um despertador quebrado. Primeiro usei um Raspberry Pi 2 com um adaptador USB WiFi, mas agora estou usando um RP3 que tem WIFI integrado e não precisa de antena.
A parte mais difícil foi encontrar os URLs corretos das estações que eu queria. Finalmente encontrei este programa:URL HELPER que fareja o site em que você está e mostra as URLs da mídia reproduzida. Para o som, usei um par de alto-falantes ativos de computador também recuperados de sucata.


Instruções de instalação
Instruções de instalação para RP3 (do Arduino / Raspberry Pi Internet Radio por akellyirl no Arduino):
1. Atualize o Raspbian com os pacotes mais recentes:
$ sudo apt-get update
2. Instale os pacotes mpd / mpc:
$ sudo apt-get install mpc mpd
Queremos poder falar com o Arduino do Python rodando no Pi. Para fazer isso, precisamos instalar a biblioteca nanpy para Python e o firmware nanpy para Arduino:
1. Instale os pacotes do Arduino para construir o firmware nanpy para o Arduino:
$ apt-get install arduino
2. Obtenha a biblioteca nanpy para Python e extraia de / home / pi:
$ wget http://pypi.python.org/packages/source/n/nanpy/nanpy-v0.7.tar.gz $ tar xvf nanpy-v0.7.tar.gz
3. Obtenha ferramentas de configuração para Python (uma dependência para nanpy) e extraia:
$ wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz#md5=7df2a529a074f613b509fb44feefe74e $ tar xvf setuptools-0.6c11.tar.gz
4. Obtenha pyserial para Python (uma dependência para nanpy) e extraia:
$ wget http://pypi.python.org/packages/source/p/pyserial/pyserial-2.6.tar.gz $ tar xvf pyserial-2.6.tar.gz
5. Vá para o diretório setuptools e instale as ferramentas de configuração do Python:
$ cd setuptools-0.6c11 $ sudo python setup.py install
6. Vá para o diretório nanpy e instale a biblioteca Python nanpy:
$ cd ../nanpy $ sudo python setup.py install
7. Vá para o diretório serial e instale a biblioteca serial Python:
$ cd ../pyserial-2.6 $ sudo python setup.py install
Agora que temos os arquivos de que precisamos, vamos colocar o firmware nanpy no Arduino.
Firmware
babá permite que um programa Python em execução no Raspberry Pi opere o Arduino usando a sintaxe Arduino-Sketch convencional, por exemplo, o programa Python para ler uma entrada analógica do Arduino pode ler:
int val =Arduino.analogRead (14)
Nanpy tem dois componentes:
- Uma biblioteca para Python que permite que os comandos do Arduino sejam escritos em uma sintaxe familiar e se comuniquem com o Arduino;
- Firmware executado em Arduino, comunicando-se com Python no Pi.
Instalamos a parte Python do nanpy e baixamos a parte Arduino do nanpy no Pi na última etapa. Agora precisamos fazer o upload do firmware nanpy para o Arduino.
Conecte o Arduino ao USB do Raspberry Pi.
1. Vá para o diretório de firmware nanpy e faça upload para o Arduino:
$ cd ../nanpy/firmware $ export BOARD =uno $ make $ make upload
Se você receber um relatório de que o dispositivo não foi encontrado em / dev / ttyACM0, conecte o Arduino na outra porta USB.
Eu criei um script de lista de reprodução e um script Python (publicado na guia de código) e fiz o script Python rodar automaticamente na inicialização do Raspberry. Também adicionei outro botão para mostrar algumas opções de menu, como mostrar o IP ou escolher a saída de áudio.
última atualização:eu refiz:, adicionei codificadores rotativos para discagem e volume e imprimiu o case em 3D:

Código
- piradio
- radio_plylist.sh
piradio Python
Eu não sou um programador python (isso é principalmente copiar / colar de bits que encontrei no google.até agora funciona :)
Este script deve carregar na inicialização do pi, eu adicionei a uma tarefa crontab
from datetime import datetimefrom subprocess import * from time import sleep, strftimefrom Queue import Queuefrom threading import Threadimport osfrom nanpy import Arduino, Lcdimport socketArduino.pinMode (14, input) lcd =Lcd ([8,9,4,5,6,7], [16,2]) # Configure os pinos do LCD para Sainsmart Shieldlcd.printString ("Ruben's RadioZ", 0,0) lcd.printString ("Carregando" + "." * 3,0,1) sleep (5) max_trax =10x =1loop_menu =1loop_radio =1stations =[] # adicionado para mostrar o nome da estação quando o botão é pressionadostations.append ("Ecco 99") estações. anexar ("Galgalaz") estações. anexar ("Galaz") estações. anexar ("88 FM") estações. anexar ("Gimel") estações. anexar ("Rádios 100fm") estações. anexar ("Kol Hamusica" ) station.append ("WQXR New York") station.append ("WPR Winsconsin") stations.append ("BBC world servic") stations.append ("LINN jazz") stations.append ("LINN classical") #. ........... def get_local_ip_address (target):ipaddr ='' try:s =socket.socke t (socket.AF_INET, socket.SOCK_DGRAM) s.connect ((target, 8000)) ipaddr =s.getsockname () [0] s.close () exceto:pass return ipaddrprint "Raspberry Pi - Endereço IP local" print ( get_local_ip_address ('10 .0.1.1 ')) print (get_local_ip_address (' google.com ')) # show the ip addressdef display_ipaddr ():show_wlan0 ="ip addr show wlan0 | cut -d / -f1 | awk '/ inet / {printf \ "w% 15.15s \", $ 2}' "show_eth0 =" endereço ip show eth0 | cut -d / -f1 | awk '/ inet / {printf \ "e% 15.15s \", $ 2}' "ipaddr ='' #ipaddr =run_cmd (show_eth0) ipaddr =get_local_ip_address ('10 .0.1.1 ') #if ipaddr ==" ":# ipaddr =run_cmd (show_wlan0) lcd.printString ('Endereço IP:', 0,0) lcd.printString (ipaddr, 0,1) sleep (2) #menu no quinto botão def displaymenu ():if x ==1 :lcd.printString ("1. Display", 0,0) lcd.printString ("Endereço IP", 0,1) elif x ==2:lcd.printString ("2. Saída de áudio", 0,0) lcd .printString ("para porta hdmi", 0,1) elif x ==3:lcd.printString ("3. Saída de áudio", 0,0) lcd.printString ("para porta analógica", 0,1) elif x ==4:lcd.printString ("4. Saída de áudio", 0,0) lcd.printString ("Porta de seleção automática", 0,1) elif x ==5:lcd.printString ("5. Recarregue o" , 0,0) lcd.printString ("Playlist", 0,1) elif x ==6:lcd.printString ("6. Desligar", 0,0) lcd.printString ("o Sistema", 0,1) else:lcd.printString ("7. Sair para", 0,0) lcd.printString ("Menu Principal", 0,1) def load_playlist ():output =run_cmd ("mpc clear") output =run_cmd ("/ home / pi / radio / radio_playlist.sh ") def ru n_cmd (cmd):p =Popen (cmd, shell =True, stdout =PIPE, stderr =STDOUT) output =p.communicate () [0] return output def getKey ():val =Arduino.analogRead (14) if val ==1023:return "NONE" elif val <100:return "RIGHT" elif val <150:return "UP" elif val <330:return "DOWN" elif val <510:return "LEFT" elif val <750:return "SEL" else:return "KBD_FAULT" load_playlist () def getTrack ():L =[S.strip ('\ n') para S em os.popen ('mpc'). Readlines ()] # Obtenha as informações da trilha do stdout do comando mpc output =run_cmd ("mpc current") station =output [0:16] # Escolha a estação e a trilha de informações da trilha =output [-17:-1] lcd.printString (station + "" * (16 - len (estação)), 0, 0) lcd.printString (track + "" * (16 - len (track)), 0, 1) track_num =1 # Comece na faixa número 1os.system (" sudo service mpd restart ") os.system (" mpc play "+ str (track_num)) # Diz ao SO para reproduzi-lo enquanto loop_radio ==1:getTrack () loop_menu =1 x =1 tecla =getKey () if key =="UP":track_num + =1 se track_num> max_trax:trac k_num =1 lcd.printString (estações [track_num-1], 0,0) os.system ("sudo service mpd restart") os.system ("mpc play" + str (track_num)) getTrack () chave elif =="DOWN":track_num - =1 se track_num <1:track_num =max_trax lcd.printString (estações [track_num-1], 0,0) os.system ("sudo service mpd restart") os.system ("mpc play" + str (track_num)) getTrack () elif key =="LEFT":os.system ("volume mpc +10") lcd.printString (16 * "", 0, 0) lcd.printString (16 * "", 0, 1) output =run_cmd ("volume mpc") lcd.printString ("AUMENTAR VOLUME:", 0, 0) lcd.printString (output, 5, 1) sleep (.25) lcd.printString (16 * "" , 0,0) lcd.printString (16 * "", 0,1) chave elif =="RIGHT":os.system ("volume mpc -10") lcd.printString (16 * "", 0,0) lcd.printString (16 * "", 0,1) output =run_cmd ("volume mpc") lcd.printString ("VOLUME DOWN:", 0, 0) lcd.printString (output, 5, 1) sleep (0,25 ) lcd.printString (16 * "", 0,0) lcd.printString (16 * "", 0,1) chave elif =="SEL":enquanto loop_menu ==1:displaymenu () chave =getKey () se key =="RIGHT":os.system ("mpc volume +10 ") lcd.printString (16 *" ", 0, 0) lcd.printString (16 *" ", 0, 1) output =run_cmd (" volume mpc ") lcd.printString (" AUMENTAR VOLUME:", 0, 0) lcd.printString (output, 5, 1) sleep (.25) lcd.printString (16 * "", 0,0) lcd.printString (16 * "", 0,1) chave elif ==" LEFT ":os.system (" volume mpc -10 ") lcd.printString (16 *" ", 0,0) lcd.printString (16 *" ", 0,1) output =run_cmd (" volume mpc ") lcd .printString ("VOLUME DOWN:", 0, 0) lcd.printString (output, 5, 1) sleep (.25) lcd.printString (16 * "", 0,0) lcd.printString (16 * "", 0,1) chave elif =="UP":if x <=1:x =7 else:x =x - 1 chave elif =="DOWN":if x> =7:x =1 else:x =x + 1 chave elif =="SEL":se x ==1:display_ipaddr () #get_local_ip_address () sleep (1) elif x ==2:output =run_cmd ("amixer -q cset numid =3 2") lcd. printString ("Audio OUT -> HDMI", 0, 0) lcd.printString ("output", 0, 1) sleep (.5) elif x ==3:output =run_cmd ("amixer -q cset numid =3 1 ") lcd.printString (" Audio OUT-> Analog ", 0, 0) lcd.printString (" output ", 0, 1) sleep (.5) elif x ==4:output =run_cmd ("amixer -q cset numid =3 0") lcd.printString ("Audio OUT-> Auto", 0, 0) lcd.printString ("output", 0, 1) sleep (.5) elif x ==5:load_playlist () os.system ('mpc play 1') elif x ==6:lcd.printString ("Good Bye", 0, 0) lcd.printString ("Tenha um bom dia", 0, 1) output =run_cmd ("mpc stop") # =run_cmd ("sudo shutdown now") quit () elif x ==7:loop_menu =0 getTrack () break elif key =="RIGHT":os.system ("volume mpc +2 ") lcd.printString (16 *" ", 0,0) lcd.printString (16 *" ", 0,1) output =run_cmd (" volume mpc ") lcd.printString (" AUMENTAR VOLUME:", 0 , 0) lcd.printString (output, 5, 1) sleep (.25) lcd.printString (16 * "", 0,0) lcd.printString (16 * "", 0,1) chave elif =="LEFT ":os.system (" volume mpc -2 ") lcd.printString (16 *" ", 0, 0) lcd.printString (16 *" ", 0, 1) output =run_cmd (" volume mpc ") lcd. printString ("VOLUME DOWN:", 0, 0) lcd.printString (output, 5, 1) sleep (.25) lcd.printString (16 * "", 0,0) lcd.printString (16 * "", 0 , 1)
radio_plylist.sh SH
esta é minha playlist com estações israelenses#! / bin / shmpc clear 1> / dev / null # 1 ecco99mpc add http://99.livecdn.biz/99fm_aac#2 galgalazmpc add http://glglzwizzlv.bynetcdn.com/glglz_mp3#3 galazmpc add http:// glzwizzlv .bynetcdn.com / glz_mp3 # 4 88 fmmpc add http://ibala.vidnt.com:8000/iba_radio-88fmM#5 gimelmpc add http://ibala.vidnt.com:8000/iba_radio-gimelM#6 radios 100 fmmpc adicionar http://100fm.streamgates.net/Radios100Fm#7 kol hamusicampc add http://ibala.vidnt.com:8000/iba_radio-kolmusicaM#8 wqxrmpc add http://stream.wqxr.org/wqxr#9 npr currentmpc add http://current.stream.publicradio.org/kcmp.mp3#10 bbcmpc add http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-eieuk#11 linn jazzmpc add http://radio.linnrecords .com:8003 / autodj # 12 linn classicalmpc add http://radio.linnrecords.com:8004/autodj
Esquemas

Processo de manufatura
- Controle remoto universal Raspberry Pi
- Uma fatia de Raspberry Pi
- Cycle Chaser
- Detector de ladrão Raspberry Pi
- Sensor de temperatura Raspberry Pi
- RASPBERRY PI HOME AUTOMATION
- MrRobot - Robótica habilitada para aplicativo Ubuntu Mobile (Raspberry Pi e arduino envolvidos)
- Robô da caixa de CD do Raspberry Pi
- Robô Raspberry Pi controlado por Bluetooth
- Construa seu robô de streaming de vídeo controlado pela Internet com Arduino e Raspberry Pi