Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Radio Internet Pi-Arduino

Composants et fournitures

Arduino UNO
× 1
Raspberry Pi 3 Modèle B
× 1
SainSmart LCD Keypad Shield pour Arduino
× 1
Alimentation 5V
× 1

Applications et services en ligne

python

À propos de ce projet


Présentation

J'adore écouter la radio quand je prépare quelque chose ou que je cuisine, mais là où je vis, la réception FM est terrible. Et avec Internet, écouter les radios du monde est un plaisir, mais je n'aime pas utiliser mon smartphone pour écouter de la musique, alors avec beaucoup de recherche sur Google, j'ai trouvé plusieurs solutions.

J'ai basé ce projet sur un autre tutoriel :Arduino / Raspberry Pi Internet Radio par akellyirl. Le code est écrit en Python sur le Raspberry Pi et utilise essentiellement le démon de lecteur de musique Linux (mpd) et le lecteur (mpd). Il y a une bibliothèque nanpy qui permet à Python de communiquer avec l'Arduino qui contrôle les boutons poussoirs et l'écran LCD.

J'ai utilisé un écran LCD/clavier pour l'Arduino qui a des boutons-poussoirs :SainSmart LCD Keypad Shield pour Arduino, et plus tard j'ai ajouté une bande de 4 boutons-poussoirs que j'ai retirée d'un réveil cassé. J'ai d'abord utilisé un Raspberry Pi 2 avec un adaptateur WiFi USB, mais maintenant j'utilise un RP3 qui a le WIFI intégré et pas besoin d'antenne.

Le plus difficile a été de trouver les bonnes URL des stations que je voulais. Enfin j'ai trouvé ce programme :URL HELPER qui renifle le site sur lequel vous êtes et affiche les URL des médias en cours de lecture. Pour le son, j'ai utilisé une paire d'enceintes informatiques actives également récupérées de la ferraille.

Notice d'installation

Instructions d'installation pour RP3 (à partir de la radio Internet Arduino / Raspberry Pi par akellyirl dans Arduino) :

1. Mettez à jour Raspbian vers les derniers packages :

$ sudo apt-get update 

2. Installez les packages mpd/mpc :

$ sudo apt-get install mpc mpd 

Nous voulons pouvoir parler à Arduino à partir de Python exécuté sur le Pi. Pour ce faire, nous devons installer la bibliothèque nanpy pour Python et le firmware nanpy pour Arduino :

1. Installez les packages Arduino pour créer le firmware nanpy pour Arduino :

$ apt-get install arduino 

2. Obtenez la bibliothèque nanpy pour Python et extrayez 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. Obtenez setuptools pour Python (une dépendance pour nanpy) et extrayez :

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

4. Obtenez pyserial pour Python (une dépendance pour nanpy) et extrayez :

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

5. Accédez au répertoire setuptools et installez Python setuptools :

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

6. Allez dans le répertoire nanpy et installez la bibliothèque Python nanpy :

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

7. Accédez au répertoire série et installez la bibliothèque série Python :

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

Maintenant que nous avons les fichiers dont nous avons besoin, mettons le firmware nanpy sur l'Arduino.

Micrologiciel

nanpy permet à un programme Python exécuté sur le Raspberry Pi de faire fonctionner l'Arduino en utilisant la syntaxe Arduino-Sketch conventionnelle, par ex. le programme Python pour lire une entrée analogique d'Arduino pourrait lire :

int val =Arduino.analogRead(14) 

Nanpy a deux composants :

  • Une bibliothèque pour Python qui permet aux commandes Arduino d'être écrites dans une syntaxe familière et de communiquer avec Arduino ;
  • Firmware qui s'exécute sur Arduino, communiquant avec Python sur le Pi.

Nous avons installé la partie Python de nanpy et téléchargé la partie Arduino de nanpy sur le Pi lors de la dernière étape. Nous devons maintenant télécharger le firmware nanpy sur Arduino.

Branchez Arduino sur le port USB du Raspberry Pi.

1. Accédez au répertoire du micrologiciel nanpy et téléchargez-le sur Arduino :

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

Si vous obtenez un rapport indiquant que le périphérique n'est pas trouvé sur /dev/ttyACM0, branchez l'Arduino dans l'autre port USB.

J'ai créé un script de playlist et un script Python (publié dans l'onglet code) et fait s'exécuter automatiquement le script Python au démarrage du Raspberry. J'ai également ajouté un autre bouton poussoir pour afficher certaines options de menu comme l'affichage de l'IP ou le choix de la sortie audio.

dernière mise à jour :je l'ai refait :, j'ai ajouté des encodeurs rotatifs pour la numérotation et le volume et j'ai imprimé le boîtier en 3D :


Code

  • piradio
  • radio_plylist.sh
piradioPython
Je ne suis pas un programmeur python (il s'agit principalement de copier/coller à partir de bits que j'ai trouvés dans google.
pour l'instant ça marche :)
Ce script doit se charger au démarrage dans le pi, j'ai ajouté à une tâche 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]) # Configurer les broches LCD pour le 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 pour afficher le nom de la station lorsque le bouton poussoir est enfoncé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 ='' try:s =socket.socke t(socket.AF_INET, socket.SOCK_DGRAM) s.connect((target, 8000)) ipaddr =s.getsockname()[0] s.close() sauf :pass return ipaddrprint "Raspberry Pi - Local IP Address"print( get_local_ip_address('10.0.1.1'))print(get_local_ip_address('google.com'))#afficher l'adresse IPdef display_ipaddr():show_wlan0 ="ip addr show wlan0 | couper -d/ -f1 | awk '/inet/ {printf \"w%15.15s\", $2}'" show_eth0 ="ip addr show eth0 | couper -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 dans le cinquième bouton def displaymenu():if x==1 :lcd.printString("1. Affichage ",0,0) lcd.printString(" Adresse IP ",0,1) elif x==2:lcd.printString("2. Sortie audio",0,0) lcd .printString(" vers le port hdmi ",0,1) elif x==3:lcd.printString("3. Sortie audio ",0,0) lcd.printString(" vers le port analogique",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. Recharger le " ,0,0) lcd.printString(" Playlist ",0,1) elif x==6:lcd.printString("6. Arrêt ",0,0) lcd.printString(" le système ",0,1) else :lcd.printString("7. Sortie vers ",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 :retourne "NONE" elif val <100 :retourne "RIGHT" elif val <150 :retourne " UP " elif val <330 :retourne " DOWN " elif val <510 :retourne " LEFT " elif val <750 :retourne "SEL" else :return "KBD_FAULT" load_playlist()def getTrack() :L=[S.strip('\n') for S in os.popen('mpc').readlines()] # Obtenir les informations sur la piste à partir de la sortie standard de la commande mpc output =run_cmd("mpc current") station =output [0:16] # Choisissez la piste d'informations Station et Track =sortie [-17:-1] lcd.printString(station + " " *(16 - len(station)), 0, 0) lcd.printString(track + " "*(16 - len(track)), 0, 1) track_num =1 # Commencer sur la piste numéro 1os.system(" sudo service mpd restart") os.system("mpc play "+str(track_num)) # Dites au système d'exploitation de le lire tandis que loop_radio ==1:getTrack() loop_menu =1 x =1 key =getKey() if key =="UP":track_num +=1 si 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 si 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) sortie =run_cmd("mpc volume") lcd.printString("VOLUME BAS :", 0, 0) lcd.printString(sortie, 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) sortie =run_cmd("mpc volume") lcd.printString("VOLUME PLUS :", 0, 0) lcd.printString(output, 5, 1) sleep(.25) lcd.printString(16*" ",0,0) lcd.printString(16*" ",0,1) elif key ==" GAUCHE":os.system("mpc volume -10") lcd.printString(16*" ",0,0) lcd.printString(16*" ", 0,1) sortie =run_cmd("mpc volume") lcd .printString("VOLUME BAS :", 0, 0) lcd.printString(sortie, 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 clé elif =="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:sortie =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("Au revoir", 0, 0) lcd.printString("Bonne journée ", 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) sortie =run_cmd("mpc volume") lcd.printString("VOLUME PLUS:", 0 , 0) lcd.printString(output, 5, 1) sleep(.25) lcd.printString(16*" ",0,0) lcd.printString(16*" ",0,1) elif key =="GAUCHE ":os.system("mpc volume -2") lcd.printString(16*" ", 0, 0) lcd.printString(16*" ", 0, 1) sortie =run_cmd("mpc volume") lcd. printString("VOLUME BAS :", 0, 0) lcd.printString(sortie, 5, 1) sleep(.25) lcd.printString(16*" ",0,0) lcd.printString(16*" ",0 ,1)
radio_plylist.shSH
c'est ma playlist avec les stations israéliennes
# ! /bin/shmpc effacer 1>/dev/null#1 ecco99mpc ajouter http://99.livecdn.biz/99fm_aac#2 galgalazmpc ajouter http://glglzwizzlv.bynetcdn.com/glglz_mp3#3 galazmpc ajouter http://glzwizzlv.bynetcdn.com/glglz_mp3#3 galazmpc ajouter http://glzwizzlv.bynetcdn.com/glglz_mp3#3 galazmpc ajouter http://glzwizzlv.bynetcdn.com/glglz_mp3#3 galazmpc .bynetcdn.com/glz_mp3#4 88 fmmpc ajouter http://ibala.vidnt.com:8000/iba_radio-88fmM#5 gimelmpc ajouter http://ibala.vidnt.com:8000/iba_radio-gimelM#6 radios 100 fmmpc ajouter http://100fm.streamgates.net/Radios100Fm#7 kol hamusicampc ajouter http://ibala.vidnt.com:8000/iba_radio-kolmusicaM#8 wqxrmpc ajouter http://stream.wqxr.org/wqxr#9 npr currentmpc ajouter http://current.stream.publicradio.org/kcmp.mp3#10 bbcmpc ajouter http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-eieuk#11 linn jazzmpc ajouter http://radio.linnrecords .com:8003/autodj#12 linn classicmpc ajouter http://radio.linnrecords.com:8004/autodj

Schémas


Processus de fabrication

  1. Télécommande universelle Raspberry Pi
  2. Une tranche de framboise Pi
  3. Cycle Chaser
  4. Détecteur de voleur Raspberry Pi
  5. Capteur de température Raspberry Pi
  6. DOMOMATISATION RASPBERRY PI
  7. MrRobot – Robotique compatible avec l'application mobile Ubuntu (Raspberry Pi et arduino impliqués)
  8. Robot boîtier CD Raspberry Pi
  9. Robot Raspberry Pi contrôlé par Bluetooth