Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Pi-Arduino internetradio

Componenten en benodigdheden

Arduino UNO
× 1
Raspberry Pi 3 Model B
× 1
SainSmart LCD-toetsenbordschild voor Arduino
× 1
5V voeding
× 1

Apps en online services

python

Over dit project


Overzicht

Ik luister graag naar de radio als ik iets maak of kook, maar waar ik woon is de FM-ontvangst verschrikkelijk. En met internet is het een plezier om naar radiostations van over de hele wereld te luisteren, maar ik gebruik mijn smartphone niet graag om naar muziek te luisteren, dus met veel Googlen vond ik verschillende oplossingen.

Ik heb dit project gebaseerd op een andere tutorial:Arduino / Raspberry Pi Internet Radio van akellyirl. De code is geschreven in Python op de Raspberry Pi en gebruikt in feite de Linux-muziekspeler-daemon (mpd) en de speler (mpd). Er is een bibliotheek nanpy waarmee Python kan communiceren met de Arduino die de drukknoppen en het LCD-scherm bestuurt.

Ik gebruikte een LCD/toetsenbord schild voor de Arduino die drukknoppen heeft:SainSmart LCD Keypad Shield voor Arduino, en later voegde ik een 4 drukknoppenstrip toe die ik van een kapotte wekker heb geschrapt. Eerst gebruikte ik een Raspberry Pi 2 met een USB WiFi-adapter, maar nu gebruik ik een RP3 die ingebouwde WIFI heeft en geen antenne nodig heeft.

Het moeilijkste was het vinden van de juiste URL's van de stations die ik wilde. Eindelijk vond ik dit programma:URL HELPER dat de site waar je op zit opsnuift en de URL's toont van de media die wordt afgespeeld. Voor het geluid heb ik een paar actieve computerluidsprekers gebruikt die ook van schroot zijn hersteld.

Installatie instructie

Installatie-instructie voor RP3 (van Arduino / Raspberry Pi Internet Radio door akellyirl in Arduino):

1. Update Raspbian naar de nieuwste pakketten:

$ sudo apt-get update 

2. Installeer de mpd/mpc-pakketten:

$ sudo apt-get install mpc mpd 

We willen met Arduino kunnen praten vanuit Python die op de Pi draait. Om dat te doen, moeten we de nanpy-bibliotheek voor Python en de nanpy-firmware voor Arduino installeren:

1. Installeer Arduino-pakketten om de nanpy-firmware voor Arduino te bouwen:

$ apt-get install arduino 

2. Haal de nanpy-bibliotheek voor Python en extraheer uit /home/pi:

$ wget http://pypi.python.org/packages/source/n/nanpy/nanpy-v0.7.tar.gz $ tar xvf nanpy-v0.7.tar.gz 

3. Download setuptools voor Python (een afhankelijkheid voor nanpy) en extraheer:

$ wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz#md5=7df2a529a074f613b509fb44feefe74e $ tar xvf setuptools-0.6c11.tar.gz 

4. Download pyserial voor Python (een afhankelijkheid voor nanpy) en extraheer:

$ wget http://pypi.python.org/packages/source/p/pyserial/pyserial-2.6.tar.gz $ tar xvf pyserial-2.6.tar.gz 

5. Ga naar de map setuptools en installeer Python setuptools:

$ cd setuptools-0.6c11 $ sudo python setup.py install 

6. Ga naar de nanpy-directory en installeer de Python nanpy-bibliotheek:

$ cd ../nanpy $ sudo python setup.py install 

7. Ga naar de seriële directory en installeer de Python seriële bibliotheek:

$ cd ../pyserial-2.6 $ sudo python setup.py install 

Nu hebben we de bestanden die we nodig hebben, laten we de nanpy-firmware op de Arduino zetten.

Firmware

nanpy stelt een Python-programma op de Raspberry Pi in staat om de Arduino te bedienen met behulp van conventionele Arduino-Sketch-syntaxis, b.v. het Python-programma om een ​​analoge ingang van Arduino te lezen zou kunnen zijn:

int val =Arduino.analogRead(14) 

Nanpy heeft twee componenten:

  • Een bibliotheek voor Python waarmee Arduino-opdrachten in een bekende syntaxis kunnen worden geschreven en met Arduino kunnen worden gecommuniceerd;
  • Firmware die op Arduino draait en communiceert met Python op de Pi.

We hebben het Python-gedeelte van nanpy geïnstalleerd en in de laatste stap het Arduino-gedeelte van nanpy op de Pi gedownload. Nu moeten we de nanpy-firmware uploaden naar Arduino.

Sluit Arduino aan op de USB van de Raspberry Pi.

1. Ga naar de napy-firmwaremap en upload naar Arduino:

$ cd ../nanpy/firmware $ export BOARD=uno $ make $ upload maken 

Als je een melding krijgt dat het apparaat niet wordt gevonden op /dev/ttyACM0, sluit je de Arduino aan op de andere USB-poort.

Ik heb een afspeellijstscript en een Python-script gemaakt (gepubliceerd op het codetabblad) en het Python-script automatisch laten uitvoeren op de Raspberry-boot. Ik heb ook nog een drukknop toegevoegd om enkele menu-opties weer te geven, zoals het tonen van het IP-adres of het kiezen van de audio-uitgang.

laatste update:ik heb het opnieuw gemaakt:, roterende encoders toegevoegd voor het kiezen en volume en de behuizing 3d geprint:


Code

  • piradio
  • radio_plylist.sh
piradioPython
Ik ben geen python-programmeur (dit is meestal kopiëren/plakken van bits die ik op Google heb gevonden.
tot nu toe werkt het :)
Dit script moet worden geladen bij het opstarten in de pi, ik heb toegevoegd aan een crontab-taak
van datetime import datetimefrom subproces 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]) # Stel de LCD-pinnen in voor de Sainsmart Shieldlcd.printString("Ruben's RadioZ",0,0)lcd.printString ("Loading" + "."*3,0,1)sleep(5)max_trax =10x =1loop_menu =1loop_radio =1stations=[]#added om de zendernaam te tonen wanneer op de knop wordt gedrukt stations.append("Ecco 99 ") stations.append("Galgalaz ")stations.append("Galaz")stations.append("88 FM")stations.append("Gimel")stations.append("Radios 100fm ")stations.append("Kol Hamusica " )stations.append("WQXR New York ")stations.append("WPR Winsconsin")stations.append("BBC world servic")stations.append("LINN jazz")stations.append("LINN classic")#. ...........def get_local_ip_address(target):ipaddr ='' probeer:s =socket.socke t(socket.AF_INET, socket.SOCK_DGRAM) s.connect(((target, 8000)) ipaddr =s.getsockname()[0] s.close() behalve:pass return ipaddrprint "Raspberry Pi - Lokaal IP-adres"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 | knippen -d/ -f1 | awk '/inet/ {printf \"w%15.15s\", $2}'" show_eth0 ="ip addr show eth0 | knippen -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('IP Address:',0,0) lcd.printString(ipaddr,0,1) sleep(2)#menu in de vijfde drukknop def displaymenu():if x==1 :lcd.printString("1. Display",0,0) lcd.printString("IP-adres",0,1) elif x==2:lcd.printString("2. Audio-uitgang",0,0) lcd .printString(" naar hdmi-poort ",0,1) elif x==3:lcd.printString("3. Audio-uitgang ",0,0) lcd.printString(" naar analoge poort",0,1) elif x ==4:lcd.printString("4. Audio-uitgang ",0,0) lcd.printString(" Auto Sel. Port",0,1) elif x==5:lcd.printString("5. Laad de " ,0,0) lcd.printString(" Afspeellijst ",0,1) elif x==6:lcd.printString("6. ShutDown ",0,0) lcd.printString(" het systeem ",0,1) else:lcd.printString("7. Exit to ",0,0) lcd.printString(" Hoofdmenu ",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 waarde <750:return "SEL" else:return "KBD_FAULT" load_playlist()def getTrack():L=[S.strip('\n') voor S in os.popen('mpc').readlines()] # Haal de track-info op uit de stdout van het mpc-commando output =run_cmd("mpc current") station =output [0:16] # Kies de Station en Track info track =output [-17:-1] lcd.printString(station + " " *(16 - len(station)), 0, 0) lcd.printString(track + " "*(16 - len(track)), 0, 1) track_num =1 # Start op Tracknummer 1os.system(" sudo service mpd restart") os.system("mpc play "+str(track_num)) # Vertel het besturingssysteem om het af te spelen terwijl loop_radio ==1:getTrack() loop_menu =1 x =1 key =getKey() if key =="UP":track_num +=1 als track_num> max_trax:trac k_num =1 lcd.printString(stations[track_num-1],0,0) os.system("sudo service mpd restart") os.system("mpc play" + str(track_num)) getTrack() elif key =="DOWN":track_num -=1 als track_num <1:track_num =max_trax lcd.printString(stations[track_num-1],0,0) os.system("sudo service mpd restart") os.system("mpc play " + str(track_num)) getTrack() elif key =="LEFT":os.system("mpc volume +10") lcd.printString (16*" ", 0, 0) lcd.printString (16*" ", 0, 1) output =run_cmd("mpc volume") lcd.printString("VOLUME UP:", 0, 0) lcd.printString(output, 5, 1) sleep(.25) lcd.printString(16*" " ,0,0) lcd.printString(16*" ",0,1) elif key =="RIGHT":os.system("mpc volume -10") lcd.printString(16*" ",0,0) lcd.printString(16*" ", 0,1) output =run_cmd("mpc volume") lcd.printString("VOLUME OMLAAG:", 0, 0) lcd.printString(output, 5, 1) sleep(.25 ) lcd.printString(16*" ",0,0) lcd.printString(16*" ",0,1) elif key =="SEL":while loop_menu ==1:displaymenu() key =getKey() if key =="RECHTS":os.system("mpc volume +10") lcd.printString(16*" ", 0, 0) lcd.printString(16*" ", 0, 1) output =run_cmd("mpc volume") lcd.printString("VOLUME UP:", 0, 0) lcd.printString(output, 5, 1) sleep(.25) lcd.printString(16*" ",0,0) lcd.printString(16*" ",0,1) elif key ==" LEFT":os.system("mpc volume -10") lcd.printString(16*" ",0,0) lcd.printString (16*" ", 0,1) output =run_cmd("mpc volume") lcd .printString("VOLUME OMLAAG:", 0, 0) lcd.printString(output, 5, 1) sleep(.25) lcd.printString(16*" ",0,0) lcd.printString (16*" ", 0,1) elif-toets =="UP":if x <=1:x =7 else:x =x - 1 elif-toets =="DOWN":if x>=7:x =1 else:x =x + 1 elif key =="SEL":if 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->Analoog", 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("Vaarwel", 0, 0) lcd.printString("Have a Nice Day", 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("mpc volume +2") lcd.printString(16*" ",0,0) lcd.printString(16*" ", 0,1) output =run_cmd("mpc volume") lcd.printString("VOLUME UP:", 0 , 0) lcd.printString(output, 5, 1) sleep(.25) lcd.printString(16*" ",0,0) lcd.printString(16*" ",0,1) elif key =="LEFT ":os.system("mpc volume -2") lcd.printString(16*" ", 0, 0) lcd.printString(16*" ", 0, 1) output =run_cmd("mpc volume") lcd. printString("VOLUME OMLAAG:", 0, 0) lcd.printString(output, 5, 1) sleep(.25) lcd.printString(16*" ",0,0) lcd.printString (16*" ",0 ,1)
radio_plylist.shSH
dit is mijn afspeellijst met Israëlische zenders
#! /bin/shmpc clear 1>/dev/null#1 ecco99mpc voeg http://99.livecdn.biz/99fm_aac#2 galgalazmpc toe http://glglzwizzlv.bynetcdn.com/glglz_mp3#3 galazmpc voeg http://glzwizzlv toe .bynetcdn.com/glz_mp3#4 88 fmmpc toevoegen http://ibala.vidnt.com:8000/iba_radio-88fmM#5 gimelmpc toevoegen http://ibala.vidnt.com:8000/iba_radio-gimelM#6 radio's 100 fmmpc http://100fm.streamgates.net/Radios100Fm#7 kol hamusicampc toevoegen http://ibala.vidnt.com:8000/iba_radio-kolmusicaM#8 wqxrmpc http://stream.wqxr.org/wqxr#9 npr toevoegen currentmpc voeg http://current.stream.publicradio.org/kcmp.mp3#10 bbcmpc toe http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-eieuk#11 linn jazzmpc voeg http://radio.linnrecords toe .com:8003/autodj#12 linn classicmpc toevoegen http://radio.linnrecords.com:8004/autodj

Schema's


Productieproces

  1. Raspberry Pi universele afstandsbediening
  2. Een stukje Raspberry Pi
  3. Cycle Chaser
  4. Raspberry Pi diefdetector
  5. Raspberry Pi-temperatuursensor
  6. RASPBERRY PI HOME AUTOMATION
  7. MrRobot – Ubuntu Mobile-app ingeschakeld Robotics (betrokken bij Raspberry Pi en arduino)
  8. Raspberry Pi CD Box Robot
  9. Raspberry Pi-robot bestuurd via Bluetooth
  10. Bouw uw internetgestuurde videostreamingrobot met Arduino en Raspberry Pi
  11. RaspiRobot Board V2