En este artículo vamos a profundizar sobre el reproductor de audio denominado Music Maker Feather Wing fabricado por la empresa Adafruit.
Este módulo implementa el chip codificador/decodificador VS1053 que soporta diversidad de formatos (MP3, AAC, Ogg Vorbis, WMA, MIDI, FLAC, WAV (PCM y ADPCM) que no solamente contiene funciones de reproducción, sino también permite realizar operaciones como ajuste de bajos y altos, y ajuste de volumen de manera digital.
El sistema puede ser controlado mediante una interfaz SPI que se integra fácilmente con otros módulos de control de la línea de productosFeather de Adafruit. También provee capacidad de iniciar (booteo) en modo MIDI para leer datos en formato clásico MIDI de 31250 Kbaudios, mediante una interfaz UART TX y actuar como una «máquina de percusión«
Especificaciones Básicas
- Chip VS1053B con funcion codificador/decodificador (codec) para formatos Ogg Vorbis, MP3/MP2/MP1/MP4, AAC, WMA, FLAC, WAV/PCM y MIDI
- Sonido estereofónico con filtros a tierra, lo que permite una conexión segura a parlates y audífonos.
- Ranura para tarjeta micro-SD para formatos FAT16/FAT32 con un mínimo de 64MB
- Máquina de secuenciación y sintetizador MIDI con docenas de instrumentos preprogramados.
- Connector para audífonos de 1/8″
Mapa de Pines (Pinout)
Pinout de la plataforma Feather
La plataforma Feather de Adafruit provee un conjunto bastante rico de micro-tarjetas o módulos electrónicos para diversas funciones, apilables entre sí, de forma que con un controlador se puedan manejar módulos apilados a este.
Se divide en dos grandes grupos: los controladores base (Feathers) y los dispositivos de extensión, denominados Wings.
Así la forma más recomendada de usar el Music Marker Feather Wing es apilándolo a un controlador Feather, por ejemplo el Adafruit Feather M0 Basic Proto; que es un controlador que a la vez contiene circuitería personalizable para prototipar.
Los controladores Feather tienen toda la circuitería estandarizada necesaria para alimentar y controlar los Wings. Por otro lado los Wings podrían ser usados sin un controlador Feather, pero se requiere toda la electrónica de regulación de voltajes y señales que ya los Feathers traen predispuesta; en especial la interfase de programación y control SPI.
Interfase SPI
Una interface SPI es un conjunto de pines que permiten intercambiar información con un dispositivo o un circuito integrado. Consta de una señal de sincronía o reloj (SCK) una de recibo de datos (MISO) y una de salida de datos (MOSI).
Se utiliza para implementar control personalizado de la tarjeta MicroSD y del chip codec VS1053. Se usan durante la transmisión de datos de la tarjeta Micro SD al chip codec. En modo MIDI estos pines no se usan.
- SPI SCK
- SPI MISO
- SPI MOSI
Pines de Control
Estos pines se usan para regular la transmisión de datos de la tarjeta micro SD al chip codec VS1053. En modo MIDI estos pines no se usan.
- XDCS – Es el pin de selección de datos para el VS1053
- DREQ – Es el pin de solicitud de interrupción del VS1053
- MP3CS – Es el pin de selección de chip del VS1053
- SD CS – Es el pin de selección de la tarjeta Micro SD
Pines de Potencia
El módulo se alimenta de 3V aplicados a los pines 2 y 4 resaltados en la imagen anterior, donde el pin 2 es +3V y el pin 4 es tierra (GND).
Para el modelo amplificado se usan los pines de USB o el VBAT para alimentar el amplificador.
Pin de datos MIDI
La imagen anterior muestra el pin de datos receptor para modo MIDI
Conector de Audífonos de 3.5mm
Se puede utilizar el conector convencional de audífonos de 3.5mm, o los pines L y R correspondientes para conectar el módulo a un amplificador o a unos audífonos.
Ganancia de Amplificación
La ganancia predeterminada de amplificación es de 2 V/V (6dB).
El volumen puede controlarse programáticamente.
Los jumpers G0 y G1 pueden unirse para cambiar esta ganancia, pero no se recomienda hacerlo pues podría dañar los parlantes o dañar el amplificador.
Conectores de Inicialización
La circuitería del módulo integra las funciones de reset a la plataforma Feather subyecente. Si se corta el jumper «Reset» se podrá redirigir la función reset del chip codec a cualquier otro pin de GPIO de la plataforma.
Instalación de Librerías de Software
Para controlar el chip codec VS1053 se cuenta con la librería «Adafruit VS1053» la cual puede ser instalada en un IDE moderno de ARDUINO mediante el gestor de librerias ubicado en Sketch > Include Library > Manage Libraries; allí buscamos VS1053 y seleccionamos del resultado la librería «Adafruit VS1053 Library» y hacemos clic en Instalar.
También puede ser descargada del siguiente enlace para instalarla de forma manual:
https://github.com/adafruit/Adafruit_VS1053_Library/archive/master.zip
Para instalar la librería en el sistrema ARDUINO IDE se puede usar este tutorial:
https://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use
Ejemplo de Reproducción MP3
Paso #1: Almacene en su tarjeta micro SD algunos archivos MP3 de su preferencia.
Paso #2: Utilice el ejemplo «feather_player» ubicado en File > Examples > Adafruit VS1053 Library > feather_player
Haz clic para ver el programa// Specifically for use with the Adafruit Feather, the pins are pre-set here! // include SPI, MP3 and SD libraries #include <SPI.h> #include <SD.h> #include <Adafruit_VS1053.h> // These are the pins used #define VS1053_RESET -1 // VS1053 reset pin (not used!) // Feather ESP8266 #if defined(ESP8266) #define VS1053_CS 16 // VS1053 chip select pin (output) #define VS1053_DCS 15 // VS1053 Data/command select pin (output) #define CARDCS 2 // Card chip select pin #define VS1053_DREQ 0 // VS1053 Data request, ideally an Interrupt pin // Feather ESP32 #elif defined(ESP32) #define VS1053_CS 32 // VS1053 chip select pin (output) #define VS1053_DCS 33 // VS1053 Data/command select pin (output) #define CARDCS 14 // Card chip select pin #define VS1053_DREQ 15 // VS1053 Data request, ideally an Interrupt pin // Feather Teensy3 #elif defined(TEENSYDUINO) #define VS1053_CS 3 // VS1053 chip select pin (output) #define VS1053_DCS 10 // VS1053 Data/command select pin (output) #define CARDCS 8 // Card chip select pin #define VS1053_DREQ 4 // VS1053 Data request, ideally an Interrupt pin // WICED feather #elif defined(ARDUINO_STM32_FEATHER) #define VS1053_CS PC7 // VS1053 chip select pin (output) #define VS1053_DCS PB4 // VS1053 Data/command select pin (output) #define CARDCS PC5 // Card chip select pin #define VS1053_DREQ PA15 // VS1053 Data request, ideally an Interrupt pin #elif defined(ARDUINO_NRF52832_FEATHER ) #define VS1053_CS 30 // VS1053 chip select pin (output) #define VS1053_DCS 11 // VS1053 Data/command select pin (output) #define CARDCS 27 // Card chip select pin #define VS1053_DREQ 31 // VS1053 Data request, ideally an Interrupt pin // Feather M4, M0, 328, nRF52840 or 32u4 #else #define VS1053_CS 6 // VS1053 chip select pin (output) #define VS1053_DCS 10 // VS1053 Data/command select pin (output) #define CARDCS 5 // Card chip select pin // DREQ should be an Int pin *if possible* (not possible on 32u4) #define VS1053_DREQ 9 // VS1053 Data request, ideally an Interrupt pin #endif Adafruit_VS1053_FilePlayer musicPlayer = Adafruit_VS1053_FilePlayer(VS1053_RESET, VS1053_CS, VS1053_DCS, VS1053_DREQ, CARDCS); void setup() { Serial.begin(115200); // if you're using Bluefruit or LoRa/RFM Feather, disable the radio module //pinMode(8, INPUT_PULLUP); // Wait for serial port to be opened, remove this line for 'standalone' operation while (!Serial) { delay(1); } delay(500); Serial.println("\n\nAdafruit VS1053 Feather Test"); if (! musicPlayer.begin()) { // initialise the music player Serial.println(F("Couldn't find VS1053, do you have the right pins defined?")); while (1); } Serial.println(F("VS1053 found")); musicPlayer.sineTest(0x44, 500); // Make a tone to indicate VS1053 is working if (!SD.begin(CARDCS)) { Serial.println(F("SD failed, or not present")); while (1); // don't do anything more } Serial.println("SD OK!"); // list files printDirectory(SD.open("/"), 0); // Set volume for left, right channels. lower numbers == louder volume! musicPlayer.setVolume(10,10); #if defined(__AVR_ATmega32U4__) // Timer interrupts are not suggested, better to use DREQ interrupt! // but we don't have them on the 32u4 feather... musicPlayer.useInterrupt(VS1053_FILEPLAYER_TIMER0_INT); // timer int #else // If DREQ is on an interrupt pin we can do background // audio playing musicPlayer.useInterrupt(VS1053_FILEPLAYER_PIN_INT); // DREQ int #endif // Play a file in the background, REQUIRES interrupts! Serial.println(F("Playing full track 001")); musicPlayer.playFullFile("/track001.mp3"); Serial.println(F("Playing track 002")); musicPlayer.startPlayingFile("/track002.mp3"); } void loop() { Serial.print("."); // File is playing in the background if (musicPlayer.stopped()) { Serial.println("Done playing music"); while (1) { delay(10); // we're done! do nothing... } } if (Serial.available()) { char c = Serial.read(); // if we get an 's' on the serial console, stop! if (c == 's') { musicPlayer.stopPlaying(); } // if we get an 'p' on the serial console, pause/unpause! if (c == 'p') { if (! musicPlayer.paused()) { Serial.println("Paused"); musicPlayer.pausePlaying(true); } else { Serial.println("Resumed"); musicPlayer.pausePlaying(false); } } } delay(100); } /// File listing helper void printDirectory(File dir, int numTabs) { while(true) { File entry = dir.openNextFile(); if (! entry) { // no more files //Serial.println("**nomorefiles**"); break; } for (uint8_t i=0; i<numTabs; i++) { Serial.print('\t'); } Serial.print(entry.name()); if (entry.isDirectory()) { Serial.println("/"); printDirectory(entry, numTabs+1); } else { // files have sizes, directories do not Serial.print("\t\t"); Serial.println(entry.size(), DEC); } entry.close(); } }
Paso #3: Al ejecutar el programa, abra el monitor serial de IDE ARDUINO. El sistema listará los archivos encontrados en la tarjeta Micro-SD y ejecutará el primer archivo.
Sintetización MIDI
Al soldar el jumper MIDI se configura el módulo para arrancar en modo MIDI.
Paso #1 – Ahora abriremos el ejemplo en File > Examples > Adafruit VS1053 Library > player_miditest
Paso #2 – Al subirlo al controlador se ejecuta una melodía en la Ocarina.
Referencia de Librería
La siguiente página contiene documentación sobre la librería VS1053
https://learn.adafruit.com/adafruit-music-maker-featherwing/library-reference
6,219 total views, 1 views today
Comentarios