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().
Immagine del fenomeno