Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Bangun Radio Internet Wi-Fi dengan Raspberry Pi dan Arduino: Streaming Stasiun Global

Komponen dan Perlengkapan

Aplikasi dan Layanan Online

Tentang Proyek

Ringkasan

Saya suka mendengarkan radio saat saya membuat sesuatu atau memasak, tetapi di tempat saya tinggal penerima FM buruk. Dan dengan Internet, mendengarkan stasiun radio di dunia adalah kesenangan, tetapi saya tidak suka menggunakan ponsel saya untuk mendengarkan musik, jadi dengan banyak Googling, saya menemukan beberapa solusi.

Saya mendasari proyek ini pada tutorial lain: Arduino / Raspberry Pi Internet Radio oleh akellyirl. Kode ditulis dalam Python pada Raspberry Pi dan pada dasarnya menggunakan Linux music player daemon (mpd) dan player (mpd). Ada library nanpy yang memungkinkan Python berkomunikasi dengan Arduino yang mengontrol tombol push dan LCD.

Saya menggunakan shield LCD/papan kunci untuk Arduino yang memiliki tombol push: SainSmart LCD Keypad Shield for Arduino, dan kemudian menambahkan pita 4 tombol push yang saya ambil dari jam alarm yang rusak. Pertama saya menggunakan Raspberry Pi 2 dengan adapter USB WiFi, tetapi sekarang saya menggunakan RP3 yang memiliki WiFi bawaan dan tidak perlu antena.

Bagian yang paling sulit adalah menemukan URL yang tepat dari stasiun yang saya inginkan. Akhirnya saya menemukan program ini: URL HELPER yang mencurigai situs yang Anda kunjungi dan menunjukkan URL media yang diputar. Untuk suara, saya menggunakan sepasang speaker komputer aktif juga yang diambil dari sisa.

Bangun Radio Internet Wi-Fi dengan Raspberry Pi dan Arduino: Streaming Stasiun Global
Bangun Radio Internet Wi-Fi dengan Raspberry Pi dan Arduino: Streaming Stasiun Global

Instruksi Instalasi

Instruksi instalasi untuk RP3 (dari Arduino / Raspberry Pi Internet Radio oleh akellyirl di Arduino):

1. Perbarui Raspbian ke paket terbaru:

$ sudo apt-get update

2. Instal paket mpd/mpc:

$ sudo apt-get install mpc mpd

Kami ingin dapat berbicara dengan Arduino dari Python yang berjalan di Pi. Untuk melakukannya, kita perlu menginstal library nanpy untuk Python dan firmware nanpy untuk Arduino:

1. Instal paket Arduino untuk membangun firmware nanpy untuk Arduino:

$ apt-get install arduino

2. Dapatkan library nanpy untuk Python dan ekstrak dari /home/pi:

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

3. Dapatkan setuptools untuk Python (dependensi nanpy) dan ekstrak:

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

4. Dapatkan pyserial untuk Python (dependensi nanpy) dan ekstrak:

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

5. Pergi ke direktori setuptools dan instal Python setuptools:

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

6. Pergi ke direktori nanpy dan instal library Python nanpy:

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

7. Pergi ke direktori serial dan instal library Python serial:

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

Sekarang kita telah memiliki file yang kita butuhkan, mari kita tempatkan firmware nanpy pada Arduino.

Firmware

nanpy memungkinkan program Python yang berjalan pada Raspberry Pi untuk mengoperasikan Arduino menggunakan sintaks Sketch Arduino konvensional, misalnya program Python untuk membaca input analog dari Arduino mungkin membaca:

int val = Arduino.analogRead(14)

Nanpy memiliki dua komponen:

Kami telah menginstal bagian Python dari nanpy dan mengunduh bagian Arduino dari nanpy pada Pi pada langkah terakhir. Sekarang kita perlu mengunggah firmware nanpy ke Arduino.

Colokkan Arduino ke USB Raspberry Pi.

1. Pergi ke direktori firmware nanpy dan unggah ke Arduino:

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

Jika Anda mendapatkan laporan bahwa perangkat tidak ditemukan di /dev/ttyACM0, colokkan Arduino ke port USB lainnya.

Saya membuat skrip playlist dan skrip Python (diterbitkan di tab kode) dan membuat skrip Python berjalan otomatis saat boot Raspberry. Saya juga menambahkan tombol push lain untuk menampilkan beberapa opsi menu seperti menampilkan IP atau memilih output audio.

update terakhir: saya membuatnya ulang: , menambahkan rotary encoder untuk menyalurkan dan volume dan mencetak 3D casing:

Bangun Radio Internet Wi-Fi dengan Raspberry Pi dan Arduino: Streaming Stasiun Global


Kode

piradioPython
Saya bukan programmer Python (ini sebagian besar copy/paste dari bagian yang saya temukan di google.
sejauh ini berhasil:)
Skrip ini harus dimuat saat startup di pi, saya menambahkan ke tugas crontab
from datetime import datetime from subprocess import * from time import sleep, strftime from Queue import Queue from threading import Thread import os from nanpy import Arduino, Lcd import socket Arduino.pinMode(14, input) lcd = Lcd([8,9,4,5,6,7],[16,2]) # Setup the LCD pins for the Sainsmart Shield lcd.printString("Ruben's RadioZ",0,0) lcd.printString("Loading" + "."*3,0,1) sleep(5) max_trax = 10 x = 1 loop_menu = 1 loop_radio = 1 stations=[] #added to show the station name when push button pressed 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 classical") #............ def get_local_ip_address(target): ipaddr = '' try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect((target, 8000)) ipaddr = s.getsockname()[0] s.close() except: pass return ipaddr print "Raspberry Pi - Local IP Address" print(get_local_ip_address('10.0.1.1')) print(get_local_ip_address('google.com')) #show the ip address def display_ipaddr(): show_wlan0 = "ip addr show wlan0 | cut -d/ -f1 | awk '/inet/ {printf \"w%15.15s\", $2}'" show_eth0 = "ip addr 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('IP Address:',0,0) lcd.printString(ipaddr,0,1) sleep(2) #menu in the fifth pushbutton 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. Audio Output ",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(" the 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 run_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') for S in os.popen('mpc').readlines()] # Get the Track info from the stdout of the mpc command output = run_cmd("mpc current") station = output [0:16] # Pick out the Station and 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 off on Track number 1 os.system("sudo service mpd restart") os.system("mpc play "+str(track_num)) # Tell the OS to Play it while loop_radio == 1: getTrack() loop_menu = 1 x = 1 key = getKey() if key == "UP": track_num += 1 if track_num > max_trax: track_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 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 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 DOWN:", 0, 0) lcd.printString(output, 5, 1) sleep(.25) lcd.printString(16*" ",0,0) lcd.printString(16*" ",0,1) elif key == "UP": if x <= 1: x = 7 else: x = x - 1 elif key == "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->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) 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 DOWN:", 0, 0) lcd.printString(output, 5, 1) sleep(.25) lcd.printString(16*" ",0,0) lcd.printString(16*" ",0,1) 
radio_plylist.shSH
ini adalah playlist saya dengan stasiun Israel
#! /bin/sh mpc clear 1>/dev/null #1 ecco99 mpc add https://99.livecdn.biz/99fm_aac #2 galgalaz mpc add https://glglzwizzlv.bynetcdn.com/glglz_mp3 #3 galaz mpc add https://glzwizzlv.bynetcdn.com/glz_mp3 #4 88 fm mpc add https://ibala.vidnt.com:8000/iba_radio-88fmM #5 gimel mpc add https://ibala.vidnt.com:8000/iba_radio-gimelM #6 radios 100 fm mpc add https://100fm.streamgates.net/Radios100Fm #7 kol hamusica mpc add https://ibala.vidnt.com:8000/iba_radio-kolmusicaM #8 wqxr mpc add https://stream.wqxr.org/wqxr #9 npr current mpc add https://current.stream.publicradio.org/kcmp.mp3 #10 bbc mpc add https://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-eieuk #11 linn jazz mpc add https://radio.linnrecords.com:8003/autodj #12 linn classical mpc add https://radio.linnrecords.com:8004/autodj 

Skematik

Bangun Radio Internet Wi-Fi dengan Raspberry Pi dan Arduino: Streaming Stasiun Global

Proses manufaktur

  1. Membangun Remote Universal Raspberry Pi Profesional dengan LIRC
  2. Mengonversi RF ke DC dengan Raspberry Pi: Membangun dan Memecahkan Masalah Detektor Envelop
  3. Cycle Chaser: Ubah Sepeda Anda menjadi Pertunjukan Lampu Malam dengan Raspberry Pi
  4. Bangun Detektor Pencuri Berbasis Raspberry Pi – Panduan Langkah demi Langkah
  5. Membangun Pemantau Suhu Rumah Raspberry Pi dengan MCP9808, InfluxDB & Grafana
  6. Bangun Sistem Otomatisasi Rumah Berbasis Raspberry Pi untuk Kontrol Jarak Jauh
  7. MrRobot: Aplikasi Rapiro Robot Terkontrol Seluler Ubuntu dengan Interaksi Suara, Sentuhan & Getaran
  8. Robot Kotak CD DIY Terinspirasi Wall‑E dengan Raspberry Pi
  9. Membuat Robot Raspberry Pi yang Dikontrol Bluetooth dengan Umpan Balik Suara
  10. Membuat Robot Streaming Video yang Dikontrol Internet dengan Arduino & Raspberry Pi