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.

../_images/musicplayer_list.png

È sicuramente conveniente acquistare un kit completo, ecco il link:

Nome

ELEMENTI IN QUESTO KIT

LINK

Kit Raphael

337

Raphael Kit

Puoi anche acquistarli separatamente dai link sottostanti.

INTRODUZIONE AI COMPONENTI

LINK PER L’ACQUISTO

Scheda di estensione GPIO

ACQUISTA

Breadboard

ACQUISTA

Cavi Jumper

ACQUISTA

Resistore

ACQUISTA

Modulo Audio e Altoparlante

-

Pulsante

ACQUISTA

Schema elettrico

T-Board Name

physical

wiringPi

BCM

GPIO17

Pin 11

0

17

GPIO18

Pin 12

1

18

GPIO27

Pin 13

2

27

../_images/3.1.16_schematic.png

Procedura sperimentale

Passo 1: Costruisci il circuito.

../_images/3.1.16fritzing.png

Dopo aver costruito il circuito secondo lo schema sopra, collega il cavo audio al jack audio da 3,5 mm del Raspberry Pi.

../_images/audio41.png

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 interruzione play().

  • Quando viene premuto BtnPin2, viene eseguita la funzione di interruzione volDown().

  • Quando viene premuto BtnPin3, viene eseguita la funzione di interruzione volUp().

Immagine del fenomeno

../_images/4.1.2musicplayer.JPG