Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Rádio da Internet Pi-Arduino

Componentes e suprimentos

Arduino UNO
× 1
Raspberry Pi 3 Modelo B
× 1
SainSmart LCD Keypad Shield para Arduino
× 1
Fonte de alimentação 5 V
× 1

Aplicativos e serviços online

python

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

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