Nota
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci l’esplorazione del Raspberry Pi, Arduino ed ESP32 con altri appassionati.
Perché unirti a noi?
Supporto esperto: Risolvi i problemi post-vendita e le sfide tecniche con l’aiuto della nostra comunità e del nostro team.
Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime esclusive: Accedi in anteprima agli annunci di nuovi prodotti e alle anticipazioni esclusive.
Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni e omaggi festivi: Partecipa a omaggi e promozioni speciali durante le festività.
👉 Sei pronto a esplorare e creare con noi? Clicca su [Qui] e unisciti oggi stesso!
4.1.2 Lettore musicale
Introduzione
Nel progetto 3.1.3 Modulo Audio, abbiamo fatto suonare una canzone agli altoparlanti. Ora aggiungiamo 3 pulsanti per controllare la riproduzione/pausa e il volume della musica.
Componenti necessari
In questo progetto avremo bisogno dei seguenti componenti.
È sicuramente conveniente acquistare un kit completo, ecco il link:
Nome |
ELEMENTI IN QUESTO KIT |
LINK |
|---|---|---|
Kit Raphael |
337 |
Puoi anche acquistarli separatamente dai link sottostanti.
INTRODUZIONE AI COMPONENTI |
LINK PER L’ACQUISTO |
|---|---|
- |
|
Schema elettrico
T-Board Name |
physical |
wiringPi |
BCM |
GPIO17 |
Pin 11 |
0 |
17 |
GPIO18 |
Pin 12 |
1 |
18 |
GPIO27 |
Pin 13 |
2 |
27 |
Procedura sperimentale
Passo 1: Costruisci il circuito.
Dopo aver costruito il circuito secondo lo schema sopra, collega il cavo audio al jack audio da 3,5 mm del Raspberry Pi.
Passo 2: Accedi alla cartella del codice.
cd ~/raphael-kit/python/
Passo 3: Esegui.
python3 4.1.2_MusicPlayer.py
Dopo l’esecuzione del codice, il Raspberry Pi riprodurrà il file my_music.mp3 nella directory ~/raphael-kit/music.
Il pulsante 1 mette in pausa/riprende la musica.
Il pulsante 2 riduce il volume.
Il pulsante 3 aumenta il volume.
Se desideri caricare altri file musicali sul Raspberry Pi, fai riferimento a Software FileZilla.
Codice
Nota
Puoi Modificare/Resettare/Copiare/Eseguire/Fermare il codice qui sotto. Ma prima di farlo, devi andare nel percorso del codice sorgente, come raphael-kit/python. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l’effetto.
from pygame import mixer
import RPi.GPIO as GPIO
import time
import os
user = os.getlogin()
user_home = os.path.expanduser(f'~{user}')
BtnPin1 = 18
BtnPin2 = 17
BtnPin3 = 27
volume = 0.7
status = False
upPressed = False
downPressed = False
playPressed = False
def setup():
mixer.init()
GPIO.setmode(GPIO.BCM)
GPIO.setup(BtnPin1, GPIO.IN, GPIO.PUD_UP)
GPIO.setup(BtnPin2, GPIO.IN, GPIO.PUD_UP)
GPIO.setup(BtnPin3, GPIO.IN, GPIO.PUD_UP)
def clip(x,min,max):
if x < min:
return min
elif x > max:
return max
return x
def play(pin):
global playPressed
playPressed = True
def volDown(pin):
global downPressed
downPressed = True
def volUp(pin):
global upPressed
upPressed = True
def main():
global volume, status
global downPressed, upPressed, playPressed
mixer.music.load(f'{user_home}/raphael-kit/music/my_music.mp3')
mixer.music.set_volume(volume)
mixer.music.play()
GPIO.add_event_detect(BtnPin1, GPIO.FALLING, callback=play)
GPIO.add_event_detect(BtnPin2, GPIO.FALLING, callback=volDown)
GPIO.add_event_detect(BtnPin3, GPIO.FALLING, callback=volUp)
while True:
if upPressed:
volume = volume + 0.1
upPressed = False
if downPressed:
volume = volume - 0.1
downPressed = False
if playPressed:
if status:
mixer.music.pause()
status = not status
else:
mixer.music.unpause()
status = not status
playPressed = False
time.sleep(0.5)
volume = clip(volume,0.2,1)
mixer.music.set_volume(volume)
time.sleep(0.1)
def destroy():
# Rilascia risorse
GPIO.cleanup()
mixer.music.stop()
# Se esegui questo script direttamente, fai:
if __name__ == '__main__':
setup()
try:
main()
# Quando viene premuto 'Ctrl+C', il programma
# destroy() sarà eseguito.
except KeyboardInterrupt:
destroy()
Spiegazione del Codice
from pygame import mixer
mixer.init()
Importa il metodo Mixer dalla libreria pygame e inizializza il metodo.
BtnPin1 = 18
BtnPin2 = 17
BtnPin3 = 27
volume = 0.7
Definisci le porte dei pin dei tre pulsanti e imposta il volume iniziale a 0.7.
upPressed = False
downPressed = False
playPressed = False
upPressed, downPressed e playPressed sono tutte bandiere di interruzione; quando diventano True, viene eseguita l’azione corrispondente.
def clip(x,min,max):
if x < min:
return min
elif x > max:
return max
return x
La funzione clip() serve a impostare i limiti superiori e inferiori dei parametri di input.
GPIO.add_event_detect(BtnPin1, GPIO.FALLING, callback=play)
GPIO.add_event_detect(BtnPin2, GPIO.FALLING, callback=volDown)
GPIO.add_event_detect(BtnPin3, GPIO.FALLING, callback=volUp)
Imposta gli eventi di rilevamento per i pulsanti BtnPin1, BtnPin2 e BtnPin3.
Quando viene premuto
BtnPin1, viene eseguita la funzione di interruzioneplay().Quando viene premuto
BtnPin2, viene eseguita la funzione di interruzionevolDown().Quando viene premuto
BtnPin3, viene eseguita la funzione di interruzionevolUp().