Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Pi-Arduino Internetradio

Komponenten und Verbrauchsmaterialien

Arduino UNO
× 1
Raspberry Pi 3 Model B
× 1
SainSmart LCD-Tastaturschild für Arduino
× 1
5V Netzteil
× 1

Apps und Onlinedienste

python

Über dieses Projekt


Übersicht

Ich liebe es, Radio zu hören, wenn ich etwas mache oder koche, aber wo ich wohne, ist der UKW-Empfang schrecklich. Und mit dem Internet ist das Hören von Radiosendern der Welt ein Vergnügen, aber ich benutze mein Smartphone nicht gerne, um Musik zu hören, also habe ich mit viel googeln mehrere Lösungen gefunden.

Ich habe dieses Projekt auf einem anderen Tutorial basiert:Arduino / Raspberry Pi Internet Radio von akellyirl. Der Code ist in Python auf dem Raspberry Pi geschrieben und verwendet grundsätzlich den Linux Music Player Daemon (mpd) und den Player (mpd). Es gibt eine Bibliothek nanpy Dadurch kann Python mit dem Arduino kommunizieren, der die Drucktasten und das LCD steuert.

Ich habe ein LCD / Tastaturschild für das Arduino mit Drucktasten verwendet:SainSmart LCD Keypad Shield für Arduino und später eine 4-Drucktastenleiste hinzugefügt, die ich von einem kaputten Wecker verschrottet habe. Zuerst habe ich einen Raspberry Pi 2 mit einem USB-WLAN-Adapter verwendet, aber jetzt verwende ich einen RP3, der über WIFI verfügt und keine Antenne benötigt.

Das Schwierigste war, die richtigen URLs der gewünschten Sender zu finden. Schließlich habe ich dieses Programm gefunden:URL HELPER, das die Site, auf der Sie sich befinden, schnüffelt und die URLs der abgespielten Medien anzeigt. Für den Sound habe ich ein Paar aktive Computerlautsprecher verwendet, die ebenfalls aus Schrott geborgen wurden.

Installationsanleitung

Installationsanleitung für RP3 (von Arduino / Raspberry Pi Internet Radio by akellyirl in Arduino):

1. Aktualisieren Sie Raspbian auf die neuesten Pakete:

$ sudo apt-get update 

2. Installieren Sie die mpd/mpc-Pakete:

$ sudo apt-get install mpc mpd 

Wir möchten in der Lage sein, von Python, das auf dem Pi läuft, mit Arduino zu sprechen. Dazu müssen wir die nanpy-Bibliothek für Python und die nanpy-Firmware für Arduino installieren:

1. Installieren Sie Arduino-Pakete, um die Nanpy-Firmware für Arduino zu erstellen:

$ apt-get install arduino 

2. Holen Sie sich die nanpy-Bibliothek für Python und extrahieren Sie aus /home/pi:

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

3. Holen Sie sich setuptools für Python (eine Abhängigkeit von nanpy) und extrahieren Sie:

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

4. Holen Sie sich pyserial für Python (eine Abhängigkeit von nanpy) und extrahieren Sie:

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

5. Gehen Sie zum Verzeichnis setuptools und installieren Sie Python setuptools:

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

6. Gehen Sie zum nanpy-Verzeichnis und installieren Sie die Python-Nanpy-Bibliothek:

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

7. Gehen Sie zum seriellen Verzeichnis und installieren Sie die serielle Python-Bibliothek:

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

Jetzt haben wir die benötigten Dateien, lass uns die Nanpy-Firmware auf dem Arduino installieren.

Firmware

Nanny ermöglicht einem Python-Programm, das auf dem Raspberry Pi läuft, das Arduino mit konventioneller Arduino-Sketch-Syntax zu betreiben, z.B. Das Python-Programm zum Lesen eines analogen Eingangs von Arduino könnte lauten:

int val =Arduino.analogRead(14) 

Nanpy hat zwei Komponenten:

  • Eine Bibliothek für Python, die es ermöglicht, Arduino-Befehle in einer vertrauten Syntax zu schreiben und mit Arduino zu kommunizieren;
  • Firmware, die auf Arduino läuft und mit Python auf dem Pi kommuniziert.

Wir haben den Python-Teil von nanpy installiert und im letzten Schritt den Arduino-Teil von nanpy auf den Pi heruntergeladen. Jetzt müssen wir die Nanpy-Firmware auf Arduino hochladen.

Schließen Sie Arduino an den USB des Raspberry Pi an.

1. Gehen Sie zum nanpy-Firmware-Verzeichnis und laden Sie es auf Arduino hoch:

$ cd ../nanpy/firmware $ export BOARD=uno $ make $ Upload machen 

Wenn Sie eine Meldung erhalten, dass das Gerät auf /dev/ttyACM0 nicht gefunden wird, stecken Sie das Arduino in den anderen USB-Port.

Ich habe ein Playlist-Skript und ein Python-Skript erstellt (veröffentlicht im Code-Tab) und das Python-Skript automatisch auf dem Raspberry-Boot ausgeführt. Ich habe auch einen weiteren Druckknopf hinzugefügt, um einige Menüoptionen anzuzeigen, wie die Anzeige der IP oder die Auswahl des Audioausgangs.

letztes Update:Ich habe es neu gemacht:, Drehgeber zum Wählen und Lautstärke hinzugefügt und das Gehäuse in 3D gedruckt:


Code

  • piradio
  • radio_plylist.sh
piradioPython
Ich bin kein Python-Programmierer (dies ist hauptsächlich das Kopieren/Verwenden von Bits, die ich in Google gefunden habe.
soweit funktioniert es :)
Dieses Skript sollte beim Start im Pi geladen werden, das ich zu einer Crontab-Aufgabe hinzugefügt habe
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]) # Richten Sie die LCD-Pins für den Sainsmart Shield einlcd.printString("Ruben's RadioZ",0,0)lcd.printString ("Loading" + "."*3,0,1)sleep(5)max_trax =10x =1loop_menu =1loop_radio =1stations=[]#hinzugefügt, um den Sendernamen anzuzeigen, wenn die Taste gedrückt wirdstations.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 service")stations.append("LINN jazz")stations.append("LINN classic")#. ...........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() außer:pass return ipaddrprint "Raspberry Pi - Local IP Address"print( get_local_ip_address('10.0.1.1'))print(get_local_ip_address('google.com'))#zeige die IP-Adressedef display_ipaddr():show_wlan0 ="ip addr show wlan0 | Schnitt -d/ -f1 | awk '/inet/ {printf \"w%15.15s\", $2}'" show_eth0 ="ip addr show eth0 | Schnitt -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 im fünften Druckknopf def displaymenu():if x==1 :lcd.printString("1. Display ",0,0) lcd.printString(" IP Address ",0,1) elif x==2:lcd.printString("2. Audio Output ",0,0) lcd .printString(" to hdmi Port ",0,1) elif x==3:lcd.printString("3. Audio Output ",0,0) lcd.printString(" to analog port",0,1) elif x ==4:lcd.printString("4. Audioausgabe ",0,0) lcd.printString(" Auto Sel. Port",0,1) elif x==5:lcd.printString("5. Reload the " ,0,0) lcd.printString(" Playlist ",0,1) elif x==6:lcd.printString("6. ShutDown ",0,0) lcd.printString(" das System ",0,1) else:lcd.printString("7. Exit to ",0,0) lcd.printString(" Main Menu ",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:Rückgabe von "NONE" elif val <100:Rückgabe von "RIGHT" elif val <150:Rückgabe von "UP" elif val <330:Rückgabe von "DOWN" elif val <510:Rückgabe von "LEFT" elif val <750:Rückgabe "SEL" sonst:"KBD_FAULT" zurückgeben load_playlist()def getTrack():L=[S.strip('\n') für S in os.popen('mpc').readlines()] # Hole die Trackinfo aus dem stdout des mpc-Befehls output =run_cmd("mpc current") station =output [0:16] # Stations- und Trackinfo-Track auswählen =output [-17:-1] lcd.printString(station + " " *(16 - len(station)), 0, 0) lcd.printString(track + " "*(16 - len(track)), 0, 1) track_num =1 # Start off on Track number 1os.system(" sudo service mpd restart") os.system("mpc play "+str(track_num)) # Sagen Sie dem Betriebssystem, es abzuspielen, während loop_radio ==1:getTrack() loop_menu =1 x =1 key =getKey() if key =="UP":track_num +=1 if 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 if 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 DOWN:", 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 Taste =="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) Ausgabe =run_cmd("mpc volume") lcd .printString("VOLUME DOWN:", 0, 0) lcd.printString(output, 5, 1) sleep(.25) lcd.printString(16*" ",0,0) lcd.printString(16*" ", 0,1) elif-Taste =="UP":wenn x <=1:x =7 sonst:x =x - 1 elif-Taste =="DOWN":wenn x>=7:x =1 sonst: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->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("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) Ausgabe =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) Ausgabe =run_cmd("mpc volume") lcd. printString("LAUTSTÄRKE:", 0, 0) lcd.printString(Ausgabe, 5, 1) sleep(.25) lcd.printString(16*" ",0,0) lcd.printString(16*" ",0 ,1)
radio_plylist.shSH
das ist meine Playlist mit israelischen Sendern
#! /bin/shmpc löschen 1>/dev/null#1 ecco99mpc hinzufügen http://99.livecdn.biz/99fm_aac#2 galgalazmpc hinzufügen http://glglzwizzlv.bynetcdn.com/glglz_mp3#3 galazmpc hinzufügen http://glzwizzlv .bynetcdn.com/glz_mp3#4 88 fmmpc hinzufügen http://ibala.vidnt.com:8000/iba_radio-88fmM#5 gimelmpc hinzufügen http://ibala.vidnt.com:8000/iba_radio-gimelM#6 Funkgeräte 100 fmmpc http://100fm.streamgates.net/Radios100Fm#7 kol hamusicampc hinzufügen http://ibala.vidnt.com:8000/iba_radio-kolmusicaM#8 wqxrmpc hinzufügen http://stream.wqxr.org/wqxr#9 npr currentmpc hinzufügen http://current.stream.publicradio.org/kcmp.mp3#10 bbcmpc hinzufügen http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-eieuk#11 linn jazzmpc hinzufügen http://radio.linnrecords .com:8003/autodj#12 linn classicmpc hinzufügen http://radio.linnrecords.com:8004/autodj

Schaltpläne


Herstellungsprozess

  1. Raspberry Pi Universal-Fernbedienung
  2. Ein Stück Himbeer-Pi
  3. Cycle Chaser
  4. Himbeer-Pi-Dieb-Detektor
  5. Raspberry Pi-Temperatursensor
  6. RASPBERRY PI HOME AUTOMATION
  7. MrRobot – Ubuntu Mobile App aktivierte Robotik (Raspberry Pi und Arduino beteiligt)
  8. Raspberry Pi CD-Box-Roboter
  9. Raspberry Pi Roboter über Bluetooth gesteuert
  10. Bauen Sie Ihren internetgesteuerten Videostreaming-Roboter mit Arduino und Raspberry Pi