.. 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 !
.. _1.2.2_py_pi5:
1.2.2 Buzzer Passif
=======================
Introduction
--------------
Dans ce projet, nous allons apprendre à faire jouer de la musique à un buzzer passif.
Composants Nécessaires
--------------------------
Pour ce projet, nous avons besoin des composants suivants.
.. image:: ../python_pi5/img/1.2.2_passive_buzzer_list.png
Il est vraiment pratique d'acheter un kit complet, voici le lien :
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nom
- ARTICLES 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 DU COMPOSANT
- 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_buzzer`
- |link_passive_buzzer_buy|
* - :ref:`cpn_transistor`
- |link_transistor_buy|
Schéma
----------
Dans cette expérience, un buzzer passif, un transistor NPN et une résistance de 1k
sont utilisés entre la base du transistor et le GPIO pour protéger le transistor.
Lorsque GPIO17 reçoit différentes fréquences, le buzzer passif émet différents sons ;
ainsi, le buzzer joue de la musique.
============ ======== ======== ===
Nom T-Board Physique wiringPi BCM
GPIO17 Pin 11 0 17
============ ======== ======== ===
.. image:: ../python_pi5/img/1.2.2_passive_buzzer_schematic.png
Procédures Expérimentales
-------------------------
**Étape 1** : Construisez le circuit. (Le buzzer passif avec une carte de circuit imprimé verte au dos.)
.. image:: ../python_pi5/img/1.2.2_PassiveBuzzer_circuit.png
**Étape 2** : Changez de répertoire.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python-pi5
**Étape 3** : Exécutez le code.
.. raw:: html
.. code-block::
sudo python3 1.2.2_PassiveBuzzer_zero.py
Lorsque le code s'exécute, le buzzer joue un morceau de musique.
.. warning::
Si vous recevez le message d'erreur ``RuntimeError: Cannot determine SOC peripheral base address``, veuillez consulter :ref:`faq_soc`
**Code**
.. note::
You can **Modify/Reset/Copy/Run/Stop** the code below. But before that, you need to go to the source code path like ``raphael-kit/python-pi5``. After modifying the code, you can run it directly to see the effect.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import TonalBuzzer
from time import sleep
# Initialize a TonalBuzzer connected to GPIO pin 17
tb = TonalBuzzer(17) # Update this pin number based on your setup
def play(tune):
"""
Play a musical tune using the buzzer.
:param tune: List of tuples (note, duration), where each tuple represents a note and its duration.
"""
for note, duration in tune:
print(note) # Output the current note being played
tb.play(note) # Play the note on the buzzer
sleep(float(duration)) # Delay for the duration of the note
tb.stop() # Stop playing after the tune is complete
# Define a musical tune as a sequence of notes and durations
tune = [('C#4', 0.2), ('D4', 0.2), (None, 0.2),
('Eb4', 0.2), ('E4', 0.2), (None, 0.6),
('F#4', 0.2), ('G4', 0.2), (None, 0.6),
('Eb4', 0.2), ('E4', 0.2), (None, 0.2),
('F#4', 0.2), ('G4', 0.2), (None, 0.2),
('C4', 0.2), ('B4', 0.2), (None, 0.2),
('F#4', 0.2), ('G4', 0.2), (None, 0.2),
('B4', 0.2), ('Bb4', 0.5), (None, 0.6),
('A4', 0.2), ('G4', 0.2), ('E4', 0.2),
('D4', 0.2), ('E4', 0.2)]
try:
play(tune) # Execute the play function to start playing the tune
except KeyboardInterrupt:
# Handle KeyboardInterrupt for graceful termination
pass
**Code Explanation**
#. Ces lignes importent la classe ``TonalBuzzer`` de la bibliothèque ``gpiozero`` pour contrôler le buzzer et la fonction ``sleep`` du module ``time`` pour créer des délais.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import TonalBuzzer
from time import sleep
#. Cette ligne initialise un objet ``TonalBuzzer`` sur le port GPIO 17.
.. code-block:: python
# Initialize a TonalBuzzer connected to GPIO pin 17
tb = TonalBuzzer(17) # Update this pin number based on your setup
#. La fonction ``play`` parcourt une liste de tuples représentant des notes musicales et leurs durées. Chaque note est jouée pendant sa durée spécifiée, et le buzzer s'arrête après avoir joué la mélodie.
.. code-block:: python
def play(tune):
"""
Play a musical tune using the buzzer.
:param tune: List of tuples (note, duration), where each tuple represents a note and its duration.
"""
for note, duration in tune:
print(note) # Output the current note being played
tb.play(note) # Play the note on the buzzer
sleep(float(duration)) # Delay for the duration of the note
tb.stop() # Stop playing after the tune is complete
#. La mélodie est définie comme une séquence de notes (fréquence) et de durées (secondes).
.. code-block:: python
# Define a musical tune as a sequence of notes and durations
tune = [('C#4', 0.2), ('D4', 0.2), (None, 0.2),
('Eb4', 0.2), ('E4', 0.2), (None, 0.6),
('F#4', 0.2), ('G4', 0.2), (None, 0.6),
('Eb4', 0.2), ('E4', 0.2), (None, 0.2),
('F#4', 0.2), ('G4', 0.2), (None, 0.2),
('C4', 0.2), ('B4', 0.2), (None, 0.2),
('F#4', 0.2), ('G4', 0.2), (None, 0.2),
('B4', 0.2), ('Bb4', 0.5), (None, 0.6),
('A4', 0.2), ('G4', 0.2), ('E4', 0.2),
('D4', 0.2), ('E4', 0.2)]
#. La fonction ``play(tune)`` est appelée à l'intérieur d'un bloc ``try``. Une interruption clavier (comme Ctrl+C) arrêtera le programme proprement.
.. code-block:: python
try:
play(tune) # Execute the play function to start playing the tune
except KeyboardInterrupt:
# Handle KeyboardInterrupt for graceful termination
pass