.. note:: Hola, ¡bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook! Sumérgete más profundamente en Raspberry Pi, Arduino y ESP32 junto a otros entusiastas. **¿Por qué unirse?** - **Soporte experto**: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo. - **Aprender y compartir**: Intercambia consejos y tutoriales para mejorar tus habilidades. - **Avances exclusivos**: Accede anticipadamente a nuevos anuncios de productos y adelantos exclusivos. - **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes. - **Promociones y sorteos festivos**: Participa en sorteos y promociones navideñas. 👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy mismo. .. _4.1.2_py: 4.1.2 Reproductor de Música ================================= Introducción ------------------- En el proyecto :ref:`3.1.3_py`, hicimos que el altavoz reprodujera una canción. Ahora añadimos 3 botones para controlar la reproducción/pausa y el volumen de la música. Componentes Necesarios -------------------------------- En este proyecto, necesitamos los siguientes componentes. .. image:: ../img/musicplayer_list.png :width: 800 :align: center Es muy conveniente comprar un kit completo, aquí está el enlace: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Nombre - ELEMENTOS EN ESTE KIT - ENLACE * - Kit Raphael - 337 - |link_Raphael_kit| También puedes comprarlos por separado en los enlaces a continuación. .. list-table:: :widths: 30 20 :header-rows: 1 * - INTRODUCCIÓN DEL COMPONENTE - ENLACE DE COMPRA * - :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| Diagrama Esquemático -------------------------- ============== =============== ======== === Nombre T-Board cableado físico 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 Procedimientos Experimentales --------------------------------- **Paso 1:** Construye el circuito. .. image:: ../img/3.1.16fritzing.png :width: 800 :align: center Después de construir el circuito según el diagrama anterior, conecta el cable de audio en el conector de audio de 3.5mm de la Raspberry Pi. .. image:: ../img/audio4.png :width: 400 :align: center **Paso 2:** Accede a la carpeta del código. .. raw:: html .. code-block:: cd ~/raphael-kit/python/ **Paso 3:** Ejecuta. .. raw:: html .. code-block:: python3 4.1.2_MusicPlayer.py Después de que el código se ejecute, la Raspberry Pi reproducirá el archivo ``my_music.mp3`` en el directorio ``~/raphael-kit/music``. * El Botón 1 pausa/reproduce la música. * El Botón 2 disminuye el volumen. * El Botón 3 aumenta el volumen. Si deseas subir otros archivos de música a la Raspberry Pi, puedes consultar :ref:`filezilla`. **Código** .. note:: Puedes **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código a continuación. Pero antes de eso, necesitas ir a la ruta del código fuente como ``raphael-kit/python``. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto. .. 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() **Explicación del Código** .. code-block:: python from pygame import mixer mixer.init() Importa el método ``Mixer`` de la biblioteca ``pygame`` e inicializa el método. .. code-block:: python BtnPin1 = 18 BtnPin2 = 17 BtnPin3 = 27 volume = 0.7 Define los puertos de los tres botones y establece el volumen inicial en 0.7. .. code-block:: python upPressed = False downPressed = False playPressed = False ``UpPressed``, ``downPressed`` y ``playPressed`` son todas banderas de interrupción, la tarea correspondiente se ejecutará cuando sean ``True``. .. code-block:: python def clip(x,min,max): if x < min: return min elif x > max: return max return x La función ``clip()`` se utiliza para establecer los límites superior e inferior de los parámetros de entrada. .. 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) Configura los eventos de detección de teclas de ``BtnPin1``, ``BtnPin2`` y ``BtnPin3``. * Cuando se presiona ``BtnPin1``, se ejecuta la función de interrupción ``play()``. * Cuando se presiona ``BtnPin2``, se ejecuta la función de interrupción ``volDown()``. * Cuando se presiona ``BtnPin3``, se ejecuta la función de interrupción ``volUp()``. Imagen del Fenómeno ------------------------ .. image:: ../img/4.1.2musicplayer.JPG :align: center