.. note:: Bonjour et bienvenue dans la Communauté Facebook des passionnés de Raspberry Pi, Arduino et ESP32 de SunFounder ! Plongez plus profondément dans l'univers des Raspberry Pi, Arduino et ESP32 avec d'autres passionnés. **Pourquoi rejoindre ?** - **Support d'experts** : Résolvez les problèmes après-vente et les défis techniques avec l'aide de notre communauté et de notre équipe. - **Apprendre et partager** : Échangez des astuces et des tutoriels pour améliorer vos compétences. - **Aperçus exclusifs** : Accédez en avant-première aux annonces de nouveaux produits et aux aperçus. - **Réductions spéciales** : Profitez de réductions exclusives sur nos produits les plus récents. - **Promotions festives et cadeaux** : Participez à des cadeaux et des promotions de vacances. 👉 Prêt à explorer et à créer avec nous ? Cliquez [|link_sf_facebook|] et rejoignez-nous aujourd'hui ! .. _4.1.2_py: 4.1.2 Lecteur de Musique =========================== Introduction -------------- Dans le projet :ref:`3.1.3_py`, nous avons fait jouer une chanson par un haut-parleur. Maintenant, nous ajoutons 3 boutons pour contrôler la lecture/pause et le volume de la musique. Composants Nécessaires ------------------------- Pour ce projet, nous avons besoin des composants suivants. .. image:: ../img/musicplayer_list.png :width: 800 :align: center Il est certainement pratique d'acheter un kit complet, voici le lien : .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nom - ÉLÉMENTS DANS CE KIT - LIEN * - Kit Raphael - 337 - |link_Raphael_kit| Vous pouvez également les acheter séparément via les liens ci-dessous. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCTION DES COMPOSANTS - LIEN D'ACHAT * - :ref:`cpn_gpio_extension_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| Schéma de Câblage -------------------- ================= ======== ======== === Nom de la T-Board physique 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 Procédures Expérimentales ------------------------- **Étape 1 :** Construire le circuit. .. image:: ../img/3.1.16fritzing.png :width: 800 :align: center Après avoir construit le circuit selon le schéma ci-dessus, branchez le câble audio dans la prise audio 3,5 mm du Raspberry Pi. .. image:: ../img/audio4.png :width: 400 :align: center **Étape 2 :** Accéder au dossier du code. .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **Étape 3 :** Exécuter. .. raw:: html .. code-block:: python3 4.1.2_MusicPlayer.py Après l'exécution du code, le Raspberry Pi jouera le fichier ``my_music.mp3`` dans le répertoire ``~/raphael-kit/music``. * Le bouton 1 met la musique en pause/lecture. * Le bouton 2 diminue le volume. * Le bouton 3 augmente le volume. Si vous souhaitez télécharger d'autres fichiers musicaux sur le Raspberry Pi, vous pouvez vous référer à :ref:`filezilla`. **Code** .. note:: Vous pouvez **Modifier/Réinitialiser/Copier/Exécuter/Arrêter** le code ci-dessous. Mais avant cela, vous devez accéder au chemin du code source comme ``raphael-kit/python``. Après avoir modifié le code, vous pouvez l'exécuter directement pour voir l'effet. .. 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() **Explication du Code** .. code-block:: python from pygame import mixer mixer.init() Importer la méthode ``mixer`` de la bibliothèque ``pygame`` et initialiser la méthode. .. code-block:: python BtnPin1 = 18 BtnPin2 = 17 BtnPin3 = 27 volume = 0.7 Définir les ports des trois boutons et régler le volume initial à 0,7. .. code-block:: python upPressed = False downPressed = False playPressed = False ``upPressed``, ``downPressed`` et ``playPressed`` sont tous des indicateurs d'interruption. La tâche correspondante sera exécutée lorsqu'ils sont ``True``. .. code-block:: python def clip(x,min,max): if x < min: return min elif x > max: return max return x La fonction ``clip()`` est utilisée pour définir les limites supérieure et inférieure des paramètres d'entrée. .. 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) Définir les événements de détection des touches ``BtnPin1``, ``BtnPin2`` et ``BtnPin3``. * Lorsque ``BtnPin1`` est pressé, la fonction d'interruption ``play()`` est exécutée. * Lorsque ``BtnPin2`` est pressé, la fonction d'interruption ``volDown()`` est exécutée. * Lorsque ``BtnPin3`` est pressé, la fonction d'interruption ``volUp()`` est exécutée. Image du Phénomène ------------------ .. image:: ../img/4.1.2musicplayer.JPG :align: center