.. note:: Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten. **Warum beitreten?** - **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams. - **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern. - **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken. - **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte. - **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil. 👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei! .. _4.1.2_py: 4.1.2 Musikspieler ============================= Einführung ----------------- Im Projekt :ref:`3.1.3_py` lässt der Lautsprecher einen Song spielen. Jetzt fügen wir 3 Tasten hinzu, um das Abspielen/Pausieren und die Lautstärke der Musik zu steuern. Benötigte Komponenten ------------------------------ Für dieses Projekt benötigen wir die folgenden Komponenten. .. image:: ../img/musicplayer_list.png :width: 800 :align: center Es ist definitiv praktisch, ein komplettes Set zu kaufen, hier ist der Link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Name - ARTIKEL IN DIESEM KIT - LINK * - Raphael Kit - 337 - |link_Raphael_kit| Sie können sie auch separat über die untenstehenden Links kaufen. .. list-table:: :widths: 30 20 :header-rows: 1 * - KOMPONENTENBESCHREIBUNG - KAUF-LINK * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_audio_speaker` - \- * - :ref:`cpn_button` - |link_button_buy| Schaltplan ----------------------- ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 GPIO27 Pin 13 2 27 ============ ======== ======== === .. image:: ../img/3.1.16_schematic.png :width: 600 :align: center Experimentelle Verfahren ---------------------------- **Schritt 1:** Bauen Sie den Schaltkreis. .. image:: ../img/3.1.16fritzing.png :width: 800 :align: center Nachdem Sie den Schaltkreis gemäß dem obigen Diagramm gebaut haben, stecken Sie das Audiokabel in die 3,5-mm-Audiobuchse des Raspberry Pi. .. image:: ../img/audio4.png :width: 400 :align: center **Schritt 2:** Wechseln Sie in den Ordner des Codes. .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **Schritt 3:** Starten Sie den Code. .. raw:: html .. code-block:: python3 4.1.2_MusicPlayer.py Nachdem der Code ausgeführt wurde, wird der Raspberry Pi die Datei ``my_music.mp3`` im Verzeichnis ``~/raphael-kit/music`` abspielen. * Taste 1 pausiert/spielt die Musik. * Taste 2 verringert die Lautstärke. * Taste 3 erhöht die Lautstärke. Wenn Sie andere Musikdateien auf den Raspberry Pi hochladen möchten, können Sie sich auf :ref:`filezilla` beziehen. **Code** .. note:: Sie können den untenstehenden Code **Ändern/Zurücksetzen/Kopieren/Starten/Stoppen**. Bevor Sie das tun, müssen Sie jedoch zum Quellcode-Pfad wie ``raphael-kit/python`` wechseln. Nachdem Sie den Code geändert haben, können Sie ihn direkt ausführen, um das Ergebnis zu sehen. .. raw:: html .. code-block:: python 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(): # Release resource GPIO.cleanup() mixer.music.stop() # If run this script directly, do: if __name__ == '__main__': setup() try: main() # When 'Ctrl+C' is pressed, the program # destroy() will be executed. except KeyboardInterrupt: destroy() **Code-Erklärung** .. code-block:: python from pygame import mixer mixer.init() Importiere die Methode ``Mixer`` aus der Bibliothek ``pygame`` und initialisiere die Methode. .. code-block:: python BtnPin1 = 18 BtnPin2 = 17 BtnPin3 = 27 volume = 0.7 Definiere die Pin-Ports der drei Tasten und setze die Anfangslautstärke auf 0.7. .. code-block:: python upPressed = False downPressed = False playPressed = False ``UpPressed``, ``downPressed`` und ``playPressed`` sind alle Unterbrechungsflags. Die zugehörige Aufgabe wird ausgeführt, wenn sie auf ``True`` gesetzt sind. .. code-block:: python def clip(x,min,max): if x < min: return min elif x > max: return max return x Die Funktion ``clip()`` wird verwendet, um die oberen und unteren Grenzen der Eingabeparameter festzulegen. .. code-block:: python 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) Setze die Tastenerkennungsereignisse von ``BtnPin1``, ``BtnPin2`` und ``BtnPin3``. * Wenn ``BtnPin1`` gedrückt wird, wird die Unterbrechungsfunktion ``play()`` ausgeführt. * Wenn ``BtnPin2`` gedrückt wird, wird die Unterbrechungsfunktion ``volDown()`` ausgeführt. * Wenn ``BtnPin3`` gedrückt wird, wird die Unterbrechungsfunktion ``volUp()`` ausgeführt. Phänomen-Bild -------------------- .. image:: ../img/4.1.2musicplayer.JPG :align: center