SparkFun will be closed on Tuesday, November 5th to support our team in being able to go out and vote! Orders placed after 2 pm MT Monday, November 4th will ship on Wednesday, November 6th. Thanks for your patience and understanding.
This new revision of the SparkFun MP3 player shield retains the awesome MP3 decoding abilities of the last version but adds the storage functionality of the SD card shield. Now you can pull MP3 files from an microSD card and play them using only one shield, effectively turning any Arduino into a fully functional stand-alone MP3 player! The MP3 Shield still utilizes the VS1053B MP3 audio decoder IC to decode audio files. The VS1053 is also capable of decoding Ogg Vorbis/MP3/AAC/WMA/MIDI audio and encoding IMA ADPCM and user-loadable Ogg Vorbis.
The VS1053 receives its input bitstream through a serial input bus (SPI). After the stream has been decoded by the IC, the audio is sent out to both a 3.5mm stereo headphone jack, as well as a 2-pin 0.1" pitch header.
This shield comes populated with all components as shown in the images and schematic; but it does not come with headers installed. We recommend the 6 and 8-pin stackable headers.
Note: Please refer to the Line Out document below for important information regarding connecting this shield directly to an amplifier.
Checkout the great MP3 Player library that Bill created (and fixed some of our programming bugs!). Bill, we owe you a beer.
This skill defines how difficult the soldering is on a particular product. It might be a couple simple solder joints, or require special reflow tools.
Skill Level: Noob - Some basic soldering is required, but it is limited to a just a few pins, basic through-hole soldering, and couple (if any) polarized components. A basic soldering iron is all you should need.
See all skill levels
If a board needs code or communicates somehow, you're going to need to know how to program or interface with it. The programming skill is all about communication and code.
Skill Level: Competent - The toolchain for programming is a bit more complex and will examples may not be explicitly provided for you. You will be required to have a fundamental knowledge of programming and be required to provide your own code. You may need to modify existing libraries or code to work with your specific hardware. Sensor and hardware interfaces will be SPI or I2C.
See all skill levels
If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.
Skill Level: Rookie - You may be required to know a bit more about the component, such as orientation, or how to hook it up, in addition to power requirements. You will need to understand polarized components.
See all skill levels
We welcome your comments and suggestions below. However, if you are looking for solutions to technical questions please see our Technical Assistance page.
Based on 3 ratings:
1 of 1 found this helpful:
The MP3 board simply was one of the easiest things to add to our component system and play with. I am a lighting designer so it was nice to use this MP3 board to integrate into our system and it is small enough so we could use it inside our own concealed box. Love love love it!
0 of 3 found this helpful:
Haven't started my MP3 project yet. Still completing my Android game called Polgonroids (like asteroids only more fun). Have the prototype up and running but more development to come. I am currently completing a Masters in IT and use projects like this to test myself against complex logic and to keep up to date with programming. The MP3 shield will be used in conjunction with blue-tooth technology to build a high quality portable wireless speaker system which can be completely controlled by a typical android phone (like a PILL but much better, No shitty cables or audio). This means writing, deleting and streaming MP3 files and adjusting all sound properties. The speaker system will be very "arty" and perhaps decals can be specially designed to suit individual tastes. I will let you know how I go. I see great potential in your product for fun individual projects. So easy to imagine possibilities.
Thanks!
Hi
I cant compile the example sketch with the SFEMP3Shield library.
Compiling during 24h and didnt work ?
ANy idea if there is a better library somewhere?
I hacked on this for a bit and found that this library set includes the files needed to compile. https://github.com/adafruit/SD/archive/master.zip
I whipped up a nice easy Arduino Library to use with this shield: SFEMP3Shield Arduino Library Now it's as easy as 'MP3player.playTrack(1);' and is interrupt driven so no need to worry about feeding it the MP3 file yourself.
Should make this much easier for beginners. Comment on my site if you have questions/problems with it.
BTW, if anyone tries to use this without my library...
You do not need to edit the SdFat/Sd2PinMap.h file at all. Just include the SD CS pin (9) as the second argument in the card.init(SPI_FULL_SPEED, 9) function call.
Or
Use my handy dandy library to do all the work for you.
Bill
Amazing library, Thanks for the documentation and simple,straightforward thinking. This is how store developers should be making their libraries.(cough Sparkfun!)
State-of-the-art programming ! Works like a charm.
thanks. this is an amazing library making it work smoothly and instantly! awesome work!
Glad it worked for you dyynamic. Let me know if you ever have any trouble with it.
Thanks so much for this, especially the documentation!
Your library works great with the shield. Thanks for the code and tutorials!
Just used this for a project and it worked perfectly and made my project have far fewer lines of code. Thanks!!
Just wanted to post about a few issues I ran into to help anyone else out there in the same boat.
After downloading the Sdfat library I forgot to switch the uint8_t const SS_PIN to 9 in the Sd2PinMap.h file and ended up getting random audio cutout because of it. The tracks would only play briefly then drop out.
After solving that issue I then placed the sample tracks (track001.mp3 and track002.mp3) on my microSD and they played great under the provided MP3_Player_Example.pde code. But whenever I loaded up my own .mp3s I would get a audio spike about every second. It sounded like an CD skipping (not buffering properly). Using Audacity I found that my .mp3s had 44100Hz, 32-bit, Stereo encoding and the sample tracks had 22050Hz, 32-bit, Mono. I messed around a bit and found that I could get the best quality sound by using 44100Hz, 24-bit, Stereo encoding. All I did was open my .mp3 clicked the track drop down -> selected Set Sample format -> 24-bit, waited a few seconds for it to finish and then exported (with LAME MP3 exporter installed).
Now the shield works wickedly, thanks for another great breakout Sparkfun!
Ahhh - I suspected the reason some of my tracks worked fine and some skipped was down to sample rate/quality. Thanks very much for doing the research.
can make two or more sounds at the same time? i want to build a drum and want to reproduce two or more mp3 files at the same time sorry for my english ty :D
Ok, tried Bill Porters Libraries tonight with this board. Just flat out AWESOME!!!!!!!!! I'll be ordering up another one or two of these very soon! BTW, after programming the UNO with the basic File Player example in the IDE I unplugged the USB cable, and plugged in a battery pack to the UNO. Then I attached my SparkFun RN-XN WiFi device that was plugged into the SparkFun XBEE Explorer Regulated breakout board to the MP3 Shield on D0 & D1 and had full wireless access to play all of the tracks on my SD card.
is possible to use the mp3player to connect with Arduino Leonardo ?
Hey, I don't know, I'm trying to use this shield with Arduino Leonardo but seems like a problem with the Arduino Leonardo communication and the SD card, does anybody had similar problem?
Just found out! from the library https://github.com/madsci1016/Sparkfun-MP3-Player-Shield-Arduino-Library/blob/master/SFEMP3Shield/SFEMP3ShieldConfig.h
"\note Support for Arduino Leonardo is afflicted by having the SPI pins not routing the same pins as the UNO. This is similar to the Arduino Mega. Where as it appears it should simply work with additional jumpers, from the Leonardo's ICSP port, which has the SPI pins to the MP3 shields equivalent SPI pins.
\n Leo's ICSP4 to the MP3's D11 for MOSI \n Leo's ICSP1 to the MP3's D12 for MISO \n Leo's ICSP3 to the MP3's D13 for SCK
\n and remember to \b NOT use D10 as an input. It must be left as output.""
Since the shield uses the VS1053 chip can it also be used as a synthesizer like the Music Instrument Shield? I tried some of Music Instrument example, but no success
Yes, MIDI mode works great. All you need is two extra lines in your setup():
pinMode(4, OUTPUT); // We want to control GPIO1 digitalWrite(4, HIGH); // ... and set the chip to real time MIDI mode (LOW = file/MP3 mode).
See my earlier postings in this thread for other alternatives.
Thanks Micro, don't know how I missed your previous post. Tech support helped me with figuring that out, but I'm not getting any sound. Is there something I missed to get this working?
I'm using a modified version of the music shield sketch based on error messages the IDE gave me. Pin 4 is set to OUTPUT and HIGH. I changed NewSoftSerial to SoftwareSerial and mySerial.print(cmd,byte) to mySerial.print((byte)cmd)
here's a copy of the code.
Oh yeah, forgot to mention one more thing: For the MP3 shield, the reset line is pin 8, not pin 4, so you need to change the declaration of resetMIDI from 4 to 8, and you additionally need to declare pin 4 (aka GPIO1) as an output and set it to HIGH.
I've polished up some sample code to demonstrate the various techniques to play real time MIDI with this shield. By default, this is configured in "MIDI shield compatibility mode", with the data sent through software serial and MIDI mode enabled with pin 4, but the code also demonstrates a more exotic technique for enabling MIDI mode, as well as the use of SPI for MIDI data.
Real Time MIDI Code
SparkFun would be very welcome to use this as an official code sample, by the way.
your code works great, thanks microtherion. changing pins 4 and 8 on the original sketches didn't work, but your Real Time MIDI code does. I'll have to look closer at how it works.
for arduino mega ; do not coonect headers 9,11,12,13 on MP3 player shield to mega
jumper set from mega to MP3 player shield SPI: 9 (SS), 11 (MOSI), 12 (MISO), 13 (SCK).
SPI: 53 (SS). 51 (MOSI), 50 (MISO), 52 (SCK),
Thanks - that almost worked for me, starting out on an Uno and switching to a Mega 2560. SS seems to be on pin 10 on an Uno, though, not pin 9. When I disconnected pins 10, 11, 12, and 13 and jumpered 53 -> 10 (SS) and the rest as suggested above (51 -> 11 for MOSI, 50 -> 12 for MISO and 52 -> 13 for SCK) the shield played as before.
i can confirm this observation
Thanks, your comment really helped me out today. It's to bad that they aren't mapped to the same pins as the Uno. Since I use this shield on both the UNO and Mega I just temporarily bend pins 10-13 over. Don't do it to often or they'll break off.
thanks riza
SF should add this to the description, also not clear which pins can be used with regular Arduino
has anyone tried making use of the fast forward/rewind functionality with an arduino?
and
any one tried adding an 8 ohm speaker? i understand the headphone output is not equivalent to line-in.
Yeah. I just did it using this library http://www.billporter.info/sparkfun-mp3-shield-arduino-library/
and MP3player.skipTo(some number in here);
But my implementation has a bug where the arduino goes bananas if you try to fast forward or rewind past the start or end of a song.
I wonder what a better way would be.
I try to connect this shield output to Texas Instrument Audio Amplifier TPA2005D1 (you can buy breakout for this amplifier at SF).
How should I treat this shield outputs as two differential out put pairs? Like "Ground & +" output pair and then "Ground and -" output pair?
Thank you in advance.
can I ask something.. Can I use arduino uno with this shield to record wav file and then stored inside the SD card, then after processing to product a output sound ??
What is the maximum size of micro-SD card that is supported for this device? I suggest that a specs document for the unit as a whole is in order, as it would answer basic questions like this, and more.
The library by Bill relies on the Arduino SD library which supports FAT32. You should be able to go up to 64GB without problems.
Hi, is there any possibility to move via software the pins MP3-CS, MP3-DCS and MP3-RST for analog pins A0, A1, A2 and for example? I'm using Arduino UNO and I want to use other shields and need these digital pins. Thanks in advance.
How do I play Ogg Vorbis in a Arduino setup with this shield? Ive tried playing MP3's using MP3player.playTrack( ...) but it will not play the Ogg Vorbis files...
Hello Sparkfun forum.
I am very new to the whole Arduino thing so forgive me if I ask basic questions.
The plan is to use the SparkFun MP3 Player Shield https://www.sparkfun.com/categories/273 to play an mp3 file. The SparkFun MP3 Player Shield would be activated by a PIR sensor http://www.parallax.com/product/555-28027?SortField=ProductName,ProductName The MP3 files would be input to a Micro SD file card from a PC. The SparkFun MP3 Player Shield would out put to a stereo amplifier SparkFun Audio Amplifier Kit - STA540. The SparkFun Audio Amplifier Kit would output to a pair of 8 Ohm speakers
Is this a configurations that will work?
Is any programming required for the SparkFun MP3 Player Shield?
Thanks.
Allen in Dallas
The SparkFun MP3 Player Shield is not programmable. It is designed to be used with an Arduino, so all the programming will be done on the Arduino. There is example code listed to play tracks from a uSD card, but you will need to upload that. Otherwise I don't see why this wouldn't work (although you may or may not need the amplifier kit).
I made a nice little project out of this shield: http://bettar.no-ip.org/p56.html
I had a lot of trouble with this, until someone noted that the SD library uses pin 10 (I was using 10 for a radio). I used a different pin for my radio, and it worked. Very frustrating.
Is this capable of interpreting MIDI serial commands? Or do i need a music instrument shield for that?
hello everyone
I bought MP3 Player Shield SFE-DEV-10628
i have a one question
i have a audio data Uinit 8 array.
example [0x00,0x01,0x02,0x03 , 0x04,0x05,0x06,0x07 , 0x08,0x09 , 0x0a,0x0b , 0x0c,0x0d , 0x0e,0x0f]
how about exchange mp3 data from Uinit 8 array?
thank you.
Which pins are left free when using this and the SFEMP3Shield Arduino Library?
Thanks for any help :)
This board can be utilized only with communication UART? pins RX TX My Arduino do not have pins available, is being utilized by others components.
Hello Guys. When I first got the mp3 shield, I was able to get it work and play music. However, after I tried to plug the ethernet onto the shield, I have been getting different kinds of errors. Libraries and codes that I have gotten to work suddenly do not work.
Here's an example of error I have been getting when I run an example code of the SFEMP3Shield Library:
Error code: 6 when trying to start MP3 player Warning: patch file not found, skipping.
I have tried redownloading the library and reinstalling it, but that doesn't seem to work. I have tried the SDFat library to see if something is wrong with my SDcard, but the library seems to recognize the card and see the files inside.
Please help ; 0
If you are attempting to add in an ethernet board to your set up along with the MP3 shield, there's likely some signals crossing paths that are causing you problems. I'd recommend contacting techsupport@sparkfun, and explain your current set up. They'll be able to help you out to ensure you don't have cross talk on your assigned pins.
Anyone tried reprogramming the VS1053 directly? I'm wondering if I can download the VLSI VSIDE and reprogram the VS1053 on this shield. http://www.vlsi.fi/en/support/software/vside.html
Hello I've been trying different things here but I can't figure out how to make it play song after song continuously without having to press next, also is there a way to make it stream all the files continuously in random order? Thanks!
...
Hi, while comments are a great source of information and questions are often answered there if you don't see an answer it might be because no one saw it. It might also be no one who saw it knows the answer or the answer is too complex for a comment. If you have a question that you need answered I recommend emailing techsupport@sparkfun.com and they should be able to help you.
I am using this MP3 shield in a museum exhibit, and I am currently stuck on building the simplified lineout circuit to reduce transient. In the Line Out Information PDF there is a diagram, but no values for capacitors. What should I be using for this?
Hi!, guys I'm new at arduino, and i have this work to do, I need to know if this shield can work well with an arduino Yun, i need to use yun's wifi and reproduce recording... can this shield do it?
Basically you will run into the same issues with the Yun as you would with the Leonardo. You will need to reroute the SPI pins, but if you can do that it should work ok. The only other difference between the Leonardo and the Yun is that the Yun does not let you use the hardware serial lines, but since this shield doesn't use these you should be ok.
Hi I am using a derivative of MP3ButtonPlayer2.ino by Michael P. Flaga.
On the remarks, it say "Where PLAY or STOP will begin or cancel the stream of track000.mp3 through track999.mp3, as indexed by NEXT, begining with ".
It plays very nice till track009.mp3 from track010.mp3 it does not play.
I fond FilePlayer.ino by Bill Porter and Michael P. Flaga it works for track10 and above but it is much more complicated.
Any ideas making the basic MP3ButtonPlayer2.ino work ???
TNX
Is it possible to stream a 128 kbps MP3 file to this wirelessly using two of these and an SD Card at the other end?
When I make a servo move while an mp3 is playing, the servo shatters. And when the mp3 is over, the servo is suddenly working good again (as it should) . So it seems that I cannot make a convincing choregraphy movement/sound at the same time. Thanks for a solution.
-The servo has its own dedicated batteries. -I have already tried using other pins; same problem.
Good Morning…. I’m working in a project with a GSM shield and a MP3 shield, and I’m having some problems because the GSM has a reserved pin that is Modem Reset (pin 7) and the MP3 Shield use this pin for MP3 DCS, and that cause an error of conection with the GSM shield. My quetions is if I can define the pin MP3 DCS (pin 7) in an other pin in the pin’s configurations? Thanks.
Reference
GSM Shield http://arduino.cc/en/Main/ArduinoGSMShield
Is it possible that playing 10,000 mp3 files?
Anybody ever get a fully functional (Play/Pause/Next/Back/Stop) library for this in C#? I have several half baked libraries, and have been having a bear of a time trying to convert Bill Porter's library to C# for use with Netduino.
Will this work with a Due? It looks like the pins would match up.
I have some problems with 32Gb cards. I've tried several classes. Sometimes (a few times per hour) the sound gets stuck for a second or two, in different mp3 files, at different times. Not silent, but repetitive. Only happens with 32Gb cards. I use the SFEMP3Shield libraries. What can it be? thanks
Can't access SD card. Do not reformat. No card, wrong chip select pin, or SPI problem? SD errorCode: 0X1,0X0 some one can help me please ??
Can't access SD card. Do not reformat. No card, wrong chip select pin, or SPI problem? SD errorCode: 0X1,0X0 some one can help me please
I have seen this a few times..sometimes simply unplugging from USB and reconnecting has worked for me. However I was also changing SPI clock division for some code so I had to get that right before I stopped seeing this error as well.
I have successfully used Bill's library to play mp3 files on the shield. The problem is that the code doesn't start when I power the shield/arduino uno without pressing the reset button. Does anyone know what might be causing this?
Anyone have any idea of how to get the track length during playback?
Hi, I have an arduino UNO board with a 16 keypad switch. If this shield is connected to arduino uno board, is possible to assign one single switch at one single musical file (mp3 or midi) ? ( when key #1 is pressed midifile/mp3 file #1 start play ecc.. )
Best Regards
ps.. excuse me for my very bad English :-)
Hello, I am trying to lower the volume with a pressure sensor connected to A0 but the function is called even though I'm not touch the sensor. Could someone please advise? Thanks!
Found the problem. The sensors read 1022 occasionally and my script was calling at
Hi there, is it possible to play two tracks simultaneously with the MP3 shield?
Unfortunately no. The MP3 chip can only handle one stream at a time. We are working on a new board that can play multiple WAV files at the same time though.
If you're looking for a quicker response when starting an mp3 increase the internal clock multiplier from 3 to 5 and decrease SPI clock divider to SPI_CLOCK_DIV2. Do so with the following changes to the example code:
Mp3WriteRegister(SCI_CLOCKF, 0Xe0, 0x00); // Set multiplier to 5.0x SPI.setClockerDivider(SPI_CLOCK_DIV2); // Set SPI bus speed to 8 MHz (16 MHz / 2 = 8 MHz)
I'm trying to make a project with the MP3 shield and a servo (and some more stuff that doesn't matter now).
The servo is working fine but it starts shattering once an MP3 is started. It does that on every output pin on my Arduino mega.
Does anyone know what the source of this problem could be and in a second stage, what the solution is ?
regards,
Kris
Using the original MP3 Player Example Code I decided to create my own library for playing MP3s with this shield. I know I could use the library discussed below, but I consider it a learning experience to do it myself :) Anyway I'm having problems with declaring SD information like Sd2Card and SdFile in my MP3Player class. I get errors like Sd2Card is not valid type, SdVolume is not valid type, and same thing for SdFile. I've attached a very abbreviated header file below. I can't make any sense out of this. Seems solid from C++ standpoint. I also have this library in the correct locations which is in ...\libraries\MP3Player. Any help would be appreciated. Thanks.
MP3Player.h
ifndef MP3PLAYER_H
define MP3PLAYER_H
include
include
include
class MP3Player { private: Sd2Card card; SdVolume volume; SdFile root; SdFile track;
public: MP3Player(); void Initialize(); // etc... }
endif
The included files didn't show up. They are SPI.h, SdFat.h, and SdFatUtil.h
Could this one be used together with a UNO and the USB Host Shield to play mp3 from a usb flash drive?
How can I loop current track but also be able to select another one at any time with a button? I can't find any useful function to loop track!
I want to use 4 buttons for input selections, how can I connect the MP3 shield? I only want the shield for track playback
I would like to control the playlist on this shield using a rotary encoder. I am reading the encoder input states in the main loop. But this is too slow when an mp3 is playing. Does anyone have a good tip for how to control the board with a rotary encoder? Thanks!
Take a look at the example code for our LilyPad MP3 board. Mike wrote a great example sketch that allows you to control the mp3 chip using a rotary encoder, so hopefully that should be a good starting point for you.
Okay, thanks for the tip. I'll try that out.
I have a question I hope you can help me out with. I am using the shield as a MIDI synthesizer, which is working great. What I want to do now is combine the analog output of this board with the output of another circuit, and then send the combined signal to my amplifier. My main worry is that the VS1053B might be damaged if I add an external voltage on the analog output pins. I know the values would have to be kept below the shield limit, but I am worried that it might still be damaged. So two concrete questions:
Is the right and left output pins high or low impedance?
Would it be possible to connect a similarly scaled signal (for example another MP3 shield) to the holes for external speakers and use the jack connector as output for both?
I hope you understand what I am trying to do, which is basically connecting the output of two boards together.
I am working on a project for a client and have been testing the playback through headphones, today I hooked it up to some speakers via a line in cable and noticed that the sound was very weak. I increased the volume to max with software but it still wasn't the full watts it should have been.
Any way to make this louder?
I had head phones plugged in and it was working fine until I unplugged the headphones during playback...now I get various error codes and can't get it to play consistently even after rebooting and re-loading the sample code... Could I have fried it?
Will this shield work with the Arduino diecimila?
Thanks, Phil
It should. The Uno, Duemilanove, and the Diecimila all have the same pinout. You will want to make sure that if the board has an ATMega168 and not the ATMega328 that there is enough memory for your code, but otherwise everything should be compatible.
Is there any problem running a 4 ohm speaker via the speaker output on this shield?
I want to use the native Arduino Timer1 or Timer2 in parallel with the MP3 functionality of this board. By not using the MIDI feature, I can free up pins D3 and D4, however the timers also require either D9 or D11..
Is there anyway to free up pins D9 and/or D11 without compromising playback from the on-board SD card?
Looking at the schematic it seems that pin 10 is free but when I connect it to an LED, the LED lights up.I'm using an UNO. Pin 5 seems to work as a free pin but I'm confused as to what other pins are actually free to use.
Pins 10 and 5 should be free. If you are seeing activity on pin 10, my guess is that you didn't change your chip select line to pin 9 as it instructs you to do in the quickstart guide linked above.
Thanks Toni I'm using Bill's library so I thought it took care of that 9 vs.10 issue. I'll go to his site and ask him what's up.
It's my understanding (subject to being wrong), that in order for the hardware SPI port to work correctly, the hardware SS pin (pin 10) must be set to be an output, even if you're using a different pin for your own SS use. You should be able to control and use pin 10 for whatever you wish, as long as it's an output.
I just did a test - I set pin 10 to an output at the start, and run... after this line of code:
if(!sd.begin(SD_SEL, SPI_HALF_SPEED)) sd.initErrorHalt();
I do a digitalRead() on pin 10 and it's 1. I'm wondering if it's ok for me to set to LOW at that point and use it for my own use?
I'm sure you can do what you like with it as an output; we use it for a RGB LED on the LilyPad MP3 Player. I'm not sure if you can change it to an input once the SPI is initialized, but it's definitely worth some testing, I'd love to hear a definitive answer as well. Your original idea of checking with Bill & Michael isn't a bad one either.
I have a project and I am not sure the best way to make it work. I have an audio board from a pinball machine that I want to replace with an MP3 player. It has two binary address lines and 8 data bits that allow it to play up to 256 sounds (I think it only uses about 40 sounds). All of the signals are 5 volt logic. The current system then processes that through a cpu and Eproms to retrieve and play "sounds". I want to be able to take these signals and use them to play MP3s. I can run the two address lines through an AND gate and feed one input to make it simpler. Can this be done with the Lily pad MP3 or the MP3 trigger or can it be done with the MP3 player shield and an Arduino? Thanks for any help you can provide.
Neat project! It can be done with the MP3 Trigger if you can send it serial commands to play the sounds (that's the only way to get 256 as there aren't enough hardwired inputs). You could also put together a system based on the MP3 Player Shield that you could connect directly to your eight data and two select lines. If you look at the above schematic you'll see that there aren't enough free input pins to do that, but if you add something like the shift-in breakout, you'll have an extra eight inputs to read the data lines when you receive a select signal. Let us know how it goes!
I am sooo new to this that I really don't have a clue about these. Are you saying that I would not need an Arduino to communicate with the MP3 Shield? Just a shift in break out? I am sorry if this seems like a silly question. My head is swimming as I try to understand what is going on with these cool little devices. Thanks.
Sorry for the seven month late reply. But if my understanding of these are correct (I'm just now taking the plunge into these types of applications), the only thing the Arduino does is grab files from an SD card and pipes them to this shield, which, in return, decodes the data stream and produces sound. If I am correct, you can use any method to pipe data to the shield. But the shift-in breakout Mike was talking about is to get the parallel data from the pinball machine and convert it to serial for the MP3 Trigger.
Any idea why i can only get sound out of one earphone..?
I'm using this shield with a FM transmitter. When I plug this into the FM transmitter I get mostly static. If I plug it into a headset or a speaker it works. I know the FM transmitter is working, because I can plug into it from my PC and it works great. Any help would be great.
Thanks.
Hi, I'm using a T.Amp PMC40C amplifier with this shield, seems to work fine but the sound only begins to become audible after a delay of ca. 5 seconds after the beginning... any hints on this? And, am I safe with that amp or do I need to change anything? The amp has this info on its cover image Thanks for your help!
I have a project I'm trying to add sound too, and this would be the perfect shield to do it, except... I need 3 PWM ports on my Arduino to power a pair of tri-color LEDs. If I'm reading the schematic on this shield correctly, it only leaves open 2 of those ports, and no others. If that's the case, I may be out of luck.
However, looking at the connections on ports D3 and D4, it looks like they aren't connected. Is that right? I'm kind of a newbie at all this, so I'm not sure what NC stands for on these schematics. Some people say it's Normally Closed, others say Not Connected, and I honestly have no idea what the difference is. Looking at the picture of the board itself, it looks like the leads going to D3 and D4 are not connected, with a solder bridge available to close both pins, and enable those ports.... unless I'm completely mis-reading this stuff.
So... is this possible? Can I leave ports D3 and D4 disconnected, and use them for other purposes on my Arduino? Failing that, does anyone have any tips on tying this shield together with one of the PWM shields used for adding extra ports? I should note that I'm working with an Uno rev3, and space is limited, so going to a Mega or Due isn't really an option.
For the record, since lots of people have asked this question but no one has found a direct answer...
YES, pins D3 and D4 are available, IF you don't plan on using the MIDI components on this board. As shipped, those 2 pins are disconnected, and can be used without issue. I went ahead and bought this board, not sure if it would work, but after I wired it all up and tested it, I was happy to find that those 2 pins are available. That gives you 3 PWM pins and the extra Digital pin to work with, along with the analog input pins.
Note, if you didn't know already, that you can use the analog pins as digital outputs as well. You just need to name them e.g. "A0" when specifying them in your code.
Hi, I created another Arduino MP3 library here: https://github.com/GreyGnome/SFAudioShield . The main differences between this and Bill Porter's: * This one was built and designed to closely track the VS1053 data sheet. I wanted to understand better how the code interacts and supports the chip, so I built this library. Some of the ideas were based on Bill Porter's, though the lion's share of the code was taken from Christian Schmiljun (who in turn borrowed from Shigeki KOMATSU) and adapted for Arduino's use. * A few additional features of the vs1053b are supported, such as the sine test. See the code for more information. * This one supports M4A files, MP3 files, and OggVorbis files. * This one uses the ID3v2 data from the MP3 files. It also supports comments from OggVorbis. I did not work on getting comments from m4a (iTunes) files; that is left as an exercise for the interested reader. * This one can fast forward, but cannot skip ahead/behind. * This library works with interrupts or without. I have discovered that loading the VS1053b with 32 bytes takes 0.32 millis at a 4 MHz SPI bus speed which could be a long time. Starting a track to fill the entire 2048-byte buffer of the chip would take 64*0.32 == 20 millis. I don't want the Arduino waiting for 20 millis, so I created the non-interrupt style. * This one is not supported. This is one is for the hacker who really wants to understand the code. If something doesn't work for you but you want to make it happen, I'll need you to provide the update. I can't support requests to fix or for updates (I have no time). * That said, this code is neither clean nor elegant. I have a lot of cruft in there, beginning with all my commented-out println() statements. I can make no apologies for it; I simply present this code to the world so it can see the light of day and perhaps help someone. I wrote it for one of my projects but along the way tried to make it generally useful.
I wouldn't mind you dropping an email if you happen to utilize it. I am mschwage@gmail.com. Thanks, and I hope you find it useful.
Compiling issues? Check this out, it helped me.
http://www.billporter.info/forum/topic/compile-error/
hey, I bought this shield and it's been working great. However, I tried to compile the program by madsci1016, and there's an error compiling. I posted the error below, and excuse my ignorance on this subject because I'm only a high school student learning the basics. "/Users/Downloads/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5/libc.a(malloc.o): In function
malloc': /Users/cs/Developer/Hardware/AVR-USB/AVRMacPack/buildtmp.nobackup/avr-libc-1.6.4/avr/lib/avr5/../../../libc/stdlib/malloc.c:78: multiple definition of
malloc' core.a(malloc.c.o):/Users//Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/malloc.c:82: first defined here /Users/Downloads/Arduino.app/Contents/Resources/Java/hardware/tools/avr/bin/../lib/gcc/avr/4.3.2/../../../../avr/lib/avr5/libc.a(malloc.o): In functionfree': /Users/cs/Developer/Hardware/AVR-USB/AVRMacPack/buildtmp.nobackup/avr-libc-1.6.4/avr/lib/avr5/../../../libc/stdlib/malloc.c:195: multiple definition of
free' core.a(malloc.c.o):/Users/Downloads/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/malloc.c:194: first defined here"Sounds to me like you don't have the newest version of the SDFat Library. That error has now been fixed: Just download the latest version here: https://code.google.com/p/sdfatlib/downloads/list and replace it with the one in your libraries folder! Hope it helps! Let me know if it worked.
Hi there, sorry you're having problems! Most of us are on PCs here; I'll see if I can get someone with a Mac to try it and see if they're having the same problem. You might also want to post your question over at Bill Porter's site; they may be able to help you faster.
What happened to his site? Besides his forum all his posts seem to be missing hmm...
I am trying to wire this to a mega 2560 and cannot get it to work. I am soldering and jumpering all of the wiring by hand. I have looked through the previous threads and understand I have to wire to pins 50-52 to use the SPI bus on the mega. Also, the SFEMP3 library uses pins 6,7,8,9, and 2 for the decoder. Also, just the 5V input and ground are also required. Are these the only pins that are the bare minimum to get the decoder and the sd card working? I am just trying to verify. Thanks, Matt
Quick question for anyone - is this shield compatible with an arduino Ethernet shield ? Wanted to build a networked mp3 player
thanks...Matt Ganis
I've been spending the last few days trying to get the SparkFun MP3 Player Shield running consistently with an Arduino UNO R3.
My experience has been mixed. After reading various threads on a couple of different sites, I downloaded Bill Porter’s MP3 Shield Library and have been using the MP3Shield_Library_Demo sketch without any modifications.
If the MP3 Shield / Arduino UNO R3 starts up well, all seems to go fine. I see the expected feedback (help text) in the Serial Monitor, can play tracks using commands through the Serial Monitor, etc. However, often the MP3 Shield / Arduino UNO R3 will start up in a state where I see a variety of errors such as:
Free RAM = 1070 Should be a base line of 1095, on ATmega328 when using INTx
Can't access SD card. Do not reformat.
No card, wrong chip select pin, or SPI problem?
SD errorCode: 0X1,0XFF
So, when it works well it is great. When it is not working well, it seems to generally stay in an "unhappy" state even through pushbutton resets on the Arduino and/or MP3 Shield boards. I'm powering the boards from the USB cable and I'm running the Arduino IDE (v 1.0.3) on a Mac. I have tried several different 2Gbyte microSD cards -- all behave similarly.
I touched up the solder connections on the microSD carrier in case there was a solder reflow issue and don't see any other bad connections.
Any ideas why my system is behaving in flakey manner? Is anyone else seeing their system behave similarly? Or, are people generally seeing their systems behaving consistently well?
Thanks!
Miles
I'm having the same problem...it seems to be something with the connections and how the board is seated...
Bill should add midi-file support to his MP3 Player library !!!
I can happily report that the chip will play MIDI files using Bill's library with no problems!!!
Hi. Does this board support frequency equalization and does it produce high quality output?
You should take a look at the VS1053 datasheet to decide whether it meets your specs.
how can i use this shield on panda board /csharp thanks
how can i use this shield on panda board /csharp thanks
Hi.. i have downloaded SdFat library but there is no Sd2PinMap.h file present in library. Using arduino uno,arduino 1.0.2,using mp3file of 192 bitrate. While playing given code i got this kind of messages in serialmonitor... MP3 Testing Error: Card init Error: Volume ini Error: Opening root but there is no sound please help me out thanking you in anticipation
Because Arduino and its libraries were updated since the example code was written, it is somewhat out of date. Here’s a quick way to get things running. Note that you no longer need to edit anything, it should all work out of the box:
Download Bill Porter’s MP3 Shield Library from here: https://github.com/madsci1016/Sparkfun-MP3-Player-Shield-Arduino-Library/archive/master.zip
Unzip the above file, and place the SdFat and SFEMP3Shield folders in your sketches/libraries folder. (Important: delete previous versions of those libraries from your libraries folder).
Place your MP3 file(s) onto your micro-SD card. Rename them TRACK001.MP3, TRACK002.MP3 etc. (Tip: in Windows, ensure that “Hide extensions for known file types” in the folder view options is turned OFF, so that you’re not accidentally naming these e.g. TRACK001.MP3.MP3.) With the power off, insert the micro-SD card into the shield’s socket.
Plug in your Arduino and start the IDE. From the File/Examples/SFEMP3Shield menu, load the MP3Shield_Library_Demo file. Set the COM port and Arduino type, and upload the code to your Arduino.
Once the code is successfully uploaded, open the Serial Monitor window and set the speed to 115200 baud. Startup diagnostics should appear, followed by a menu of options. To play TRACK001.MP3, type 1 in the box at the top of the window and press the “Send” button. (An easy way to verify operation is to plug a pair of headphones or earphones into the 1/8" stereo jack on the MP3 Shield. You should hear the audio file playing).
If there are any errors in the startup or when playing, let us know and we’ll go from there. Good luck!
Thanks for posting this explanation. You might save people a great deal of time if you remove the current "Quickstart Guide" linked in the product description and replace it with this, as following the current quickstart guide fails due to the library changes.
You are absolutely right. We're currently in the middle of moving and updating all of our content, and apologize for the "under construction" nature of a lot of them especially this one.
Hi,
I'd like to use this shield directly with a small speaker (no amplifier) to make an interactive plush toy. I have a few questions:
1) I don't need to worry about the line out issue because it will be an isolated speaker, and I can directly connect the speaker to the output of the board, without the capacitors. Is it correct ?
2) with only 1 speaker, which output pins should be used : Left/Right/GBUF ? (not using the headphone jack)
3) if choosing a small 8 Ohm speaker, I have not been able to understand the max Amps of the output. Assuming output is 5V, are 1W or even 2W speakers usable, or max 0.5W ?
Thank you for your help,
Matthieu
Hi, how many W you used for each speaker? You could 2W successfully? Thanks
Correct, you won't hurt the board by connecting a speaker. It's only amplifiers with common grounds that are a problem.
Connect your speaker between GBUF and either Left or Right (not both). If you want to use two speakers for more volume, connect one between Left and GBUF, and one between Right and GBUF.
The max output from the VS1053 into 8 Ohms is something like 0.4W. This will never be "loud" but will work fine for a toy or other project that you're close to when it's playing. You can connect larger-wattage speakers with no problems (a physically-larger speaker will sound better and have better volume), and you can safely use smaller speakers as long as you either keep the volume down (see the example code) or don't continuously send audio through it (it's heating which could damage the speaker, but this is unlikely to be a problem at such low levels).
Check out Bill Porter's MP3 library which makes it very easy to play files. and Have fun!
Thanks for your answer.
Now next step - I think it's a stupid question, but I'm lost: where can I find the GBUF, Left, and Right pins on the board ? Available pins have names like MP3-CS and the like, and the schematics confuse me.
thanks !
Sorry for the confusion; GBUF, LEFT and RIGHT are the same as the three "Speaker" pins marked -, L and R.
Merry Xmas to All! Here's my YAAXT - Yet Another Arduino Xmas Tree, just in the nick of time. Used the SparkFun Spectrum and MP3 Shields, LPD8806 Addressable LEDs, Dayton Amplifier, Bose Speakers and controlled via IR Remote. Used great MP3 and IR libraries provided by Bill Porter. Also the LPD8806 LED library from AdaFruit. Video could not capture the true intensity of of the led colors - they are so bright, they overwhelm the camera CCD.
http://youtu.be/YSS91urEqEg
Anyone hack this up with to use I2S yet?
Wondering about the feasibility of the I2S interface with Clock, Data and LROUT to pipe high speed serial into a line driver for DMX512 embedded on one channel(ignoring the alternate LROUT state), and audio via the traditional analog out on the other channel. Thus, a stand alone intergrated audio and DMX512 device for animatronics with everything canned on the SDCARD in sequences.
Havn't quite worked out how to properly inject the data and not sure how the chip would react to misc. data on one channel (I could be forced to use an off board DAC and maybe clock in zeros on the data channel) but dual channel mode (vs stereo) may be more forgiving.
I figured I'd pose the question before reinventing the wheel.
Hi all, have anybody used the arduino to attenuate the volume on this shield? Not just set the limit, but continuously varying the output volume from low to high and back
thx
This will use up all digital I/O pins except 5 and 10: http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Dev/Arduino/Shields/MP3%20Shield-v13.pdf
Is it possible to select a song to be played based on song file name?
Is it just me, or is the board schematic in the Eagle file unfinished? Why does it look like the reset switch and U4 aren't connected to GND? Why are there random vias on the board that aren't connected to anything? Is there a ground plain I'm not seeing? Turning on the "rats nest" feature shows something that looks like a ground plain, but I'm still not seeing how these components are grounded.
The 'random vias' are indeed connected to two ground planes, top and bottom :) After hitting the ratsnest command/button to fill in the planes, try the following in the Eagle command line:
and
To take a closer look at the ground planes without the clutter of components.
The reset switch has its pin right on the top ground plane.
As far as I can tell, most of the other vias aren't strictly required; there's a clear path between U4's GND pin and the GND header pins, which are PTH parts, via the top ground plane alone. On the other hand, it can't hurt to have them.
Hi there, please tell me can i play sound from SD card and from Line-In simultaneously? Thanks for advice.
I have a spare vs1011e and the mp3 shield but i blew my vs1053 on the shield .Is it possible i could solder the vs1011e instead and code will still work ?
The datasheet here might be out of date, there's a newer version at http://www.vlsi.fi/fileadmin/datasheets/vlsi/vs1053.pdf. The only difference I've noticed so far is the definition of struct parametric, which is not so much a correction but more like they've decided to not document the chipID field.
Is it possible to enter rtmidi mode with this shield ?
In the "Line Out Information" on page 8, figure 8. There are no values for c1 and c2 !!!
See several comments about this above. 10uF appears to work.
Hi-Making some progress but still could use a little help, please. Here's my serial report: TimMP3 Testing SCI_Mode (0x4800) = 0x4800 SCI_Status (0x48) = 0x48 VS Version (VS1053 is 4) = 4 SCI_ClockF = 0x0 SCI_ClockF = 0x6000 Track open Start MP3 decoding [Then a whole bunch of recurring "Time to replenish buffer" lines scream by.]
Also, the Arduino Uno light is flickering as if it's doing something. Only problem is, I can't hear anything. I've got a simple pair of headphones plugged into the jack.
I made this change, per the forums: card.init(SPI_FULL_SPEED) to card.init(SPI_FULL_SPEED,9)
I feel like I'm so close, but what am I missing?
I like this board but need digital IO ...which are free?? UNO/MP3 shield BM
Having a little trouble I could use some help with. I'm confused that I can't find this line to change in the current library http://code.google.com/p/sdfatlib/: "To compile, you MUST change Sd2PinMap.h of the SDfatlib!"
I see madsci1016's not about changing a single line in the sketch - is this what's it's supposed to look like?
And... am have I edited this line correctly:
//Let's play a track of a given number sprintf(trackName, "track001.mp3", trackNumber); //Splice the new file number into this file name playMP3(trackName); //Go play trackXXX.mp3
Hi. I just downloaded the sdfatlib dated July 19 and this line isn't even in it to be fixed: .../arduino-0022/libraries/SdFat/Sd2PinMap.h
I've got the mp3 shield on the program uploaded. But it's not going to work if I can't change that line, right? And I can't change that line if it doesn't exist, right?
So... what do I do?
Thanks.
A bit annoying to get it moving.
Here's a step by step for Mac users:
1) Download the library from http://www.billporter.info/sparkfun-mp3-shield-arduino-library/ The Sparkfun software didn't work for me and was outdated.
2) Install the libraries...
2.1) by right clicking (or CTRL clicking) on Applications/Arduino and select show package contents.
2.2) Place the libraries inside the Arduino application package folder in Applications/Arduino/Contents/Resources/Java/libraries/
2.3) Quit the Arduino program if it's open and restart it.
3) Run madsci1016's code: http://www.billporter.info/sparkfun-mp3-shield-arduino-library/
how do I to play an mp3 when pin 0 and up and a different file when it is low?
I am using MP3 player shield with adruino nano board. After downloading the mp3 player code i am not able to play the file and i am getting following output on serial port. Can anyone tell me what is wrong.
MP3 Testing SCI_Mode (0x4800) = 0x4800 SCI_Status (0x48) = 0x48 VS Version (VS1053 is 4) = 4 SCI_ClockF = 0x0 SCI_ClockF = 0x6000 Failed to open track001.mp3 Failed to open track002.mp3 Failed to open track003.mp3 Failed to open track004.mp3 Failed to open track005.mp3 ...... Whoa there cowboy!
If you're having issues with playback failing, audio blips or just nothing at all, it's most likely going to be that your SD card doesn't support, or implement SPI correctly. I had a 1GB card that did not work, and the playback kept on cutting out after ~1 second. I bought a different card at my local photography store, and it immediately worked. The one that worked was a SanDisk card, but other brands will work as well.
Hi, wanting to use this shield MP3 Arduino in the MIDI mode, do I do the linking SJ2 (3) MIDI-In (MIDI input signal) and SJ1 (4) GPIO1. With Arduino the signal output at the GPIO1 for the MP3 mode GPIO1 "low" and MIDI-In "high", for the MIDI mode at the GPIO1 "high" and MIDI-In "signal"),all right! But observing the resistances R13 and R14 from 1K are not too small, if the maximum voltage tolerated by VS1053 is 3.6 V, (the output voltage from the divider is > 3.6 V), the signal "high" of Arduino is 5V?
I'm trying to get this shield to handle wav files. After reading the datasheet, it seems like I should just be able to feed a wav file into the chip (header information in the wav file should help the chip identify as a windows PCM wav file).
Has anyone had any luck with wav files? The reason I don't want to use MP3s (and they play fine) is there appears to be a ~20ms lag time between when you tell the sound to start, and when it actually starts (I believe this is due to MP3 compression using a moving window, so you have to read in a certain amount of data before decoding can start).
hello, i´d like to know if you´ve succeeded in making this shield work with wav files. i havent yet ordered the shield because i still have doubts about whether it would be capable of handling wav files. any comment would be great, thanks.
I am not aware of any arduino code that works with wav, but the hardware definitely supports it.
Hi! OK, so most important piece of info that needs to be repeated, as per SDFAT Readme.txt
Nobody has to modify any pin definitions in the libraries! (Rejoice!)
If you have a shield like the SparkFun MP3 shield that uses pin 9 for chip select you would change the line: card.init(SPI_FULL_SPEED) to card.init(SPI_FULL_SPEED,9)
This way you don't have to go and change SDFat every single time. Seems like the RIGHT way to do it..
Also, as for the line-out protection, just don't connect the speaker/headphone common pin to ground in any way shape or form, like powering from USB and plugging the shield's 3.5 mm plug in to the PC's line-in. Figure 3.2 of "Line Out Information" shows a simple 4 resistor two capacitor setup which should be considered for implementation on the next revision of the board.
This board works well with the supplied code. Mine lasted a few days before I destroyed it by connecting the "virtual ground" to ground. I also have some boards from VLSI the makers of the MP3 ic. They are more expensive, but more robust in design. I have not yet managed to destroy these boards. All the Sparkfun shield needs is a couple of low cost caps for a minimal "line out" and it would be much improved.
Is there a way to make the shield automatically play all the tracks, like the MP3 Trigger device? I would like to use this MP3 shield solo, without it plugged into anything. Thanks!
You can't, you need some sort of microcontroller to program, run code and figure out what you want to do. The MP3 trigger has a microcontroller built it, this board is designed to be used with an Arduino as a microcontroller.
Consistently getting:
MP3 Testing Error: Card init Error: Volume ini Error: Opening root SCI_Mode (0x4800) = 0xFFFFFFFF SCI_Status (0x48) = 0xFFFFFFFF VS Version (VS1053 is 4) = 15 SCI_ClockF = 0xFFFFFFFF SCI_ClockF = 0xFFFFFFFF Failed to open track001.mp3 Failed to open track002.mp3 Failed to open track003.mp3 Whoa there cowboy!
or error 1, if I use the below-mentioned SFEMP3SHIELD lib
One of the reasons could be that I put the files on using a Mac, which does leave a bunch of trash on the volume (like .Trashes and such) but wouldn't I be able to pass the Card init test?
Trying to narrow down my set of problems to ether bad connections or SD card formatting issues. Any advice?
Bad connections are definitely the prime suspect. All the "SCI" values, and especially the "VS Version" should be readable and correct, regardless of whether your card is correctly formatted or not.
Hi, the MP3 Player Control Example works great.
Their is an approx 2sec delay from the time a contact is closed to the MP3 starting. How can I reduce this time to the shortest possible?
Cheers
Is it possible to send a song directly to the shield from an arduino, without using the sd card? I mean tranfering the mp3 file through serial cable and then decode it using the mp3 shield.
It's certainly possible, but you might run into speed problems with the serial connection. In general, async serial's top speed is 115200 bps. If your MP3 file is encoded at a rate faster than that, the serial link won't be able to keep up.
I can only seem switch tracks after the current track has ended. What is the correct method for stopping the current track and playing a new track on the fly based on the MP3 Player Example Code?
I'm completely baffled by why the MIDI-In and GPIO1 pins are solder jumpers that are NORMALLY CLOSED?!? This doesn't make any sense whatsoever. I had to scrape out the trace between the jumper pads to use these pins, and it took days before I realized that was the problem, because when you see solder jumpers you assume they're not connected by a secret trace!! What on earth are they thinking!??!?!
the jumpers are open when we ship them. did yours come soldered?
As microtherion write, they are open jumpers, but with a trace connecting them, so the only way to actually open the jumper is to scrape out the trace. Was this a mistake?
Ah, OK, I understand now. Let me check into it.
The idea behind this style of NC jumper is that you can cut the trace to open them, but blob the jumper if you decide to close them later on. The alternative is to have jumpers without the trace, but paste them in the oven (which is not 100% reliable). We're sorry for the confusion, if people really hate these things we'll do our best to work on an alternative.
They are not soldered, but they are connected with a small trace between the pads.
(Personally, I find this sort of convenient, because the board by default comes with all the functionality available; the draw back is that even more pins are used by default).
Hi guys ,
I need some help with shield. I'm using arduino mega 2560 and the pin are set SPI: 53 (SS). 51 (MOSI), 50 (MISO), 52 (SCK), DREQ in 28, MP3-CS 30, and MP3-DCS 31. I'm using the latest sd library with this lilte code to setup.
define MP3_XCS 30
define MP3_XDCS 31
define MP3_DREQ 28
pinMode(MP3_DREQ, INPUT); pinMode(MP3_XCS, OUTPUT); pinMode(MP3_XDCS, OUTPUT); pinMode(MP3_RESET, OUTPUT);
digitalWrite(MP3_XCS, HIGH); //Deselect Control digitalWrite(MP3_XDCS, HIGH); //Deselect Data digitalWrite(MP3_RESET, LOW); //Put VS1053 into hardware reset
Serial.begin(9600); //Use serial for debugging Serial.println("MP3 Testing");
//Setup SD card interface pinMode(53, OUTPUT);
if (!card.init(SPI_FULL_SPEED),9) Serial.println("Error: Card init"); if (!volume.init(&card)) Serial.println("Error: Volume ini"); if (!root.openRoot(&volume)) Serial.println("Error: Opening root");
And de results are
MP3 Testing Error: Card init Error: Volume ini Error: Opening root SCI_Mode (0x4800) = 0x4800 SCI_Status (0x48) = 0x48 VS Version (VS1053 is 4) = 4 SCI_ClockF = 0x0 SCI_ClockF = 0x6000
Strange - I'm using this shield with the same Mega 2560 Arduino, albeit through Bill Porter's 'SFEMP3Shield' library and it's working OK (I'm following up with Bill on an an unrelated problem on his http://www.billporter.info/sparkfun-mp3-shield-arduino-library/ web site). Besides making sure you've got the 4 SPI pins correctly connected the only thing I can point out is that Bill's code includes
//MP3 Player Shield pin mapping. See the schematic
define MP3_XCS 6 //Control Chip Select Pin (for accessing SPI Control/Status registers)
define MP3_XDCS 7 //Data Chip Select / BSYNC Pin
define MP3_DREQ 2 //Data Request Pin: Player asks for more data
define MP3_RESET 8 //Reset is active low
define SD_SEL 9 //select pin for SD card
in its header and doesn't make the pinMode(53, OUTPUT) call above (not sure if that was in the comment or not).
It's a very handy library - you may want to check it out. Good luck!
Member #304495, could you post the code that you are using? I have the shield working great on a Duemilanove, but now I'm trying to get it running on the Arduino Mega 2560. I have disconnected the SPI pins and reconnected them to the Mega SPI pins (as per the post above), but I am not having any success playing the sound files. Do you have any suggestions? Thanks, -Bob
[ Also posted on Bill's SFEMP3Shield site]
Hi everyone - I'm trying to use this MP3 shield through Bill's fabulous SFEMP3Shield library together with Adafruit's RGB LCD shield (see http://www.adafruit.com/products/714 and http://ladyada.net/make/rgblcdshield/ for any details I may leave out) to play tracks from the SD card and put their names up on the LCD. I have buttons to skip forward and repeat but it looks like trying to do I/O to the LCD shield (which uses I2C using the 'Wire' library on pins 4 & 5) while I'm playing a song somehow makes it such that at the end of the song, when playback stops, the SdFatlib code can't find any data on the SD any longer. Trying to just play a random song from the SD works for one song, then no more. I can skip around between songs and start different songs fine but as soon as I let one play out, the sketch can't find any other tracks, even those it could've played a second ago.
If I disable the code to do control the LCD (which appears to work fine, BTW) during playback (initializing it and putting up an initial message seems to do no harm) MP3 playback works as expected, playing random songs all day. The moment I re-enbable LCD display it fails (with playback error 2, file not found) after the first track.
Code size seems around the limit - about 20K or so, but seems OK... Any ideas what may be going on here? The MP3 shield is using SPI, the LCD using i2c on address 0x20 and they seem to be using different pins - where's the conflict? Any hints greatly appreciated!
Thanks in advance, -Patrick.
FWIW it looks like the issue is something in the SFEMP3Shield library I'm using. I've reproduced the problem (on an Arduino Mega 2560 with jumpers for the SPI pins as mentioned in a post above) without the LCD involved at all. I'm following up directly with the author on his website ( http://www.billporter.info/sparkfun-mp3-shield-arduino-library/ ).
The reason the code worked without the LCD involved was because removing the LCD function also removed the MP3 library's pause/resume functions that I suspect are involved in the problem. There's no reason to believe there's actually any incompatibility between this MP3 shield and Adafruit's RGB LCD shield at all and, in fact, they're starting to play together very nicely.
How many pins will the shield use on a arduino uno ? I will need all 6 analog ports and at least 6 digital outputs. Or is it better to use a different card ?
Does this work with the Mega 2560?
If you want to hook up a speaker to the board do you have to follow the amplifier Line out information? Nevermind I found my answer in a previous comment.
Did anyone get this working on a ChipKit Max32? I face problems, mainly the SPI is on pins that are not chained to the shield SS = 53; // PIC32 SS2A MOSI = 51; // PIC32 SDO2A MISO = 50; // PIC32 SDI2A SCK = 52; // PIC32 SCK2A I tried to change them to 10,11,12,13 but no success
Any help would be greatly appreciated!!
How do you decode Ogg Vorbis,MP3,AAC and WMA files? I tried changing the file extension in the MP3 Player example but that didn't work.
Is it possible to send a song directly to the shield from an arduino, without using the sd card? I mean tranfering the mp3 file through serial cable and then decode it using the mp3 shield.
Is it possible to send a song directly to the shield from an arduino, without using the sd card? I mean tranfering the mp3 file through serial cable and then decode it using the mp3 shield.
Is this compatible with your 5V Arduino Pro, or does it require a full Arduino which has both 5V and 3.3V?
The MP3 Player Shield has been tested as working with an Arduino Pro 3.3V on both LiPoly and USB programmer power and with an Arduino Uno with no modifications to hardware or code on either, save from the addition of the "9" in !card.init(SPI_FULL_SPEED,9)
How it will perform on a partially charged battery is another issue that remains to be seen and will depend on the dropout of the voltage regulators, but for now 3.3V performance seems solid and there are no drops in audio at 8 MHz. FYI the Arduino Pro 3.3V doesn't have 3.3V and 5V pins, just VCC and VCC.
Yes it is. This shield does not use the 3.3V pin. It has it's own regulator for that. You would have to modify it to work with a 3.3V Arduino Pro though.
Dear friends, can anyone help me? I bought an MP3 of this shield and now need to insert a control through a presence sensor. this sensor is 0V and 5V logic levels, but I am new to programming and do not know where I enter the codes that will make the play and stop function to the levels of 0V and 5V. I am using sample code provided by SparkFun with the necessary changes. Can anyone help me? Thank you.
Maybe this tutorial will help you get started.
I'd like to experiment both with MP3 playing and with MIDI generation. Am I correct in assuming that the MP3 player shield can do everything that the Music Instrument Shield can do (including playing MIDI generated by the Arduino) ? Looking at the schematic with the connection from Arduino pin D4 to GPIO1, I would hope that this is true.
Answering my own question, in case anybody else was wondering: Yes, the MP3 player shield plays MIDI just fine, with no extra hardware or board modification required. One would either send a General MIDI format 0 file to SPI, or it's possible to operate the shield in MIDI real time mode (like the Music Instrument Shield operates). The latter requires a small software patch (available from vlsi.fi) to switch the VS1053b to real time MIDI mode, then it's possible to send MIDI commands through SPI (instead of serial, as in most VS1053b related MIDI examples), as long as each byte is preceded by a 0x00 byte (the data shield says 0xFF, which turns out to be wrong).
Upon further review (and finally remembering what "NC" on a schematic means), it turns out that all these shenanigans are largely unnecessary, as the UART RX and GPIO1 pins are connected to the Arduino by default. All that's needed to make the Music Instrument examples work are two extra lines:
Is the extra ESD protection really necessary? I can see in the schematics that the standard (reference) ESD protection is incorporated in the shield, the extra protection is left out (?). This standard setup is labtested up to 8KV, what kind of amplifier gives this kind of discharge?
Too bad nobody is responding (sparkfun?), it would be so much easier if the people at sparkfun would provide us with a simple solution for this because the "line out document" does not provide one but three(?) solutions (wich one should i use?). Maybe for a next revision of this board you could replace the speaker out with a line out (protected).
We've incorporated the "basic" ESD protection into the shield. This isn't so much about external amplifiers, it's about ESD that can come from humans walking on carpeting, etc. (You'll see HBM, Human Body Model, used in the specs.)
The existing circuit works well for small speakers, headphones, and certain amplifiers (those with fully-differential inputs). Problems arise when you connect the MP3 Shield's negative output (which is not ground), to an amplifier which has a grounded negative input. In this case, current will loop between the amplifier and MP3 Shield through the MP3 chip, burning it out. To prevent this, you should connect the MP3 shield to an amplifier using the circuit on page 8 of the "Line Out Information" document. This circuit separates the two "grounds", preventing current loops from damaging the MP3 chip.
Is this circuitry already built into the STA540 amplifier kit or do I need to add it between the MP3 shield and that amplifier kit you sell?
It is not, and you should add it.
Thanks for the reply, this is a helpfull answer. You don't happen to know the values of the capacitors C1 and C2 because there are no values given in the schematics of figure 8 (if that's the circuit you refering to).
That's the one. A commenter above suggests 10uF based on the schematic on page 7; I suspect that it's not critical what the values are.
And remember that R7,R8,R9 and C3,C4,C5 are already on the shield, so you only need the other components. Good luck!
Thanks! Only one small question (again), the 10uF caps in fig 7 are electrolytic only the symbol in fig 8 is for a ceramic type. Could i use both types? (asuring the polarity is right on a electrolytic type)?
From looking at what other people do with their amplifier circuits, I'd go with the 10uF electrolytic, with the + side towards the MP3 Shield.
Thanks for the help!!!
It works ! The 10uF eletrolytic works like a charm. You have to set the output volume a bit higher then the standard 20 (Mp3SetVolume(20,20) in example code) this works well for a headphone but is too low for amplifier input. My setup works best on Mp3SetVolume(2,2), but the mp3 volume (normalization) level could be of influence as well. So with a few components 2 caps and 4 resistors (and figure 8 of the vs10XXan_output.pdf) you can build a adequate lineout with no worry's of burning out your mp3 shield.
Thanks again Mike.
Hi Wailer,
would you please tell me what is the polarity for the caps ?
Cheers.
¿what are those tiny regulators that you use for the 3v3 and 1v8 sources?
Thanks
Hey All --
I'm having some trouble compiling any of the example code above. I've followed the instructions in the comments and download the SdFat lib and installed it and edited Sd2PinMap.h. But the compiler can't find the needed header files (SdFat.h and SdFatUtil.h) but they are there. I've even placed them in the sketch folder and still I get the error:
sketch_nov02a.cpp:53:19: error: SdFat.h: No such file or directory
sketch_nov02a.cpp:54:24: error: SdFatUtil.h: No such file or directory
Thanks in advance!
Put the SdFat folder in a "libraries" folder within your sketch folder. Restart the Arduino IDE, and it will find it.
Which pins are required ?
Is this shield for the 5V or 3.3V Arduino?
I spent forever (a litte over 2 hours) trying to get this to work, so I thought I'd drop some information for anyone else that is having difficulties. I kept getting errors using the MP3_Player_Example.pde code on the arduino 22 IDE. Specifically, it was only sporadically initializing the card, and then never making a volume (Error: volume ini) and Error: root. I did edit the Sd2PinMap.h in the last section for my Duemilenova so that the SSPIN for the clock select (CS) was set to 9, as opposed to teh default of 10. That wasn't helping at all so I reformated the card to FAT32 and downloaded the new SdFat library (simply google it). Voila it now works. No idea what was wrong before.
I did have to change this line:
FROM
if (!card.init(SPI_FULL_SPEED)) Serial.println("Error: Card init"); //Initialize the SD card and configure the I/O pins.
TO
if (!card.init(SPI_FULL_SPEED,9)) Serial.println("Error: Card init"); //Initialize the SD card and configure the I/O pins.
The new SdFat allows you to change the CS when you innitialise the card, as opposed to messing in the library, which is REALLY nice.
Hope this might help anyone. Now that it works I'm really happy with it!
Now if only I could figure out what that line out warning is about. I think I see blue smoke already.
I'm trying to get this shield to play nicely with an SPI RTC (the DeadOn DS3234-based breakout), but reads of the RTC aren't working correctly. Doing some debugging points to the card.init(SPI_FULL_SPEED) call as somehow bollixing up the serial read function.
If I avoid the init call, reads and writes work fine through the shield. As soon as I init the SdFat systems through this call, the time reads become scrambled.
Any ideas?
I'm looking to do the same thing. Did you get your problem solved?
Thanks.
Also, is an 8Mhz Arduino fast enogh?
Does anyone know where one can find the 3.5mm audio jack used on this board?
It's very neat, slim and in the Spark Fun Eagle Library...
We don't have it for sale separately, however it can be found on Digikey. Part number; CP-3523SJTR-ND
What capacity card does it accept? 1G, 2G, 32 GB?
Also what is the file system: fat 12, 16, 32?
Thanks
I'm running fat32 & 32GB microSD Class 6. Working great.
Mine's running great on fat 32. 16gig.
Need to hook it up to an external amp. Using the Simple Connection-diagram on page 8 of the line-out info sheet, what caps should I use for C1 & C2 (doesn't say) - also, any pointers on what parts of the code to modify in order to adress the part about "Some transient in the outputs during power up and down will occure if the startup is not slowed down with software." ?
Or is there a 'ready to go' piece of hardware that just eliminates the power-on transient alltogether?
Using 10uF caps for C1 and C2. Got that value from C1 and C2 on page 7, which seem to be the same caps. Haven't tested it yet though.
how can i protect the analog output? (yes i red the "Line Out Information")
Do i have to build the examples myself or is there something ready to use (plug and play)?
Do I need to save MP3 in any particular format? When I run the sample code and using track001.mp3, track002.mp3 or even my own mp3 they all shows Failed to open xxx.mp3?
Tried to search the forum but not much talk about this shield.
I have a need for something like this but it uses way too many pins.
I truly wish the next rev interface for this unit is simply:
AT COMMANDS {TX,RX,Gnd}, beyond the standard SPI, to access the uSD card.
And it would be great if the TX/RX could be disconnected from the shield, in-case you need to use a Arduino mega boards extra serial TTL ports (as these not exposed on the arduino shield)
It uses a lot of pins on the shield, limiting other functions
does this shield support recording?
I can't see mic connectors on the schematic
A mic jack would transform this shield into something so much better.
This board is a cool little shield. However, it lack proper lineout support. The stereo jack is meant for headphone usage only, it should NOT be connected to an external amp. Anyone considering this shield should look at the evaluation board reference design to add the required filter for a line out configuration.
http://www.vlsi.fi/en/support/evaluationboards/vs1053vs8053simpledspboard.html
See also:
ESD protection and line-out|ESD protection of analog IO and example of quality line-out connection
on this page:
http://www.vlsi.fi/en/support/applicationnotes.html
Beside that, the audio is really good. Able to play 320kbps mp3 with no problem.
Thanks
Hi FredT,
the link http://www.vlsi.fi/uploads/media/vs10XXanoutput01.pdf does not work.
It would be handy for the board's next revision to include the outputs you described (in addition to the current ones).
Just updated the link.
http://www.vlsi.fi/en/support/applicationnotes.html
Hi all,
Im fairly new to arduino and programming. Im able to play the .mp3 files on stereo with reasonable audio quality. Im running the mp3 player control example. seems to work flawlessly. But I needed to tweak the volume and playback sample-rate dynamically through a sensor input.
is it possible on this shield?
Has anybody tried something of this sorts? And also how does one pause and play the track?
Thanks in advance,
Sunil
Hey just wondering how many pins this thing takes up. I'm pretty new to electronics but in the schematic it looks like pretty much all the digital pins on the Arduino would be used... is this the case? or would I be able to use it in conjunction with some other sensors etc?
Hello,
Just to warn people, you can't attache this sheild to an amplifier directly without burn the analog out of the vs.
(Yes I've done that)
So be carefull and read this doc (founded later): VLSI Application Note for protecting analog outputs(link on the mp3 trigger page product)
There seems to be an error in the MP3_Shield_Example.pde sample code. The pin definitions for DCS and DREQ need to be corrected.
The lines:
define MP3_XDCS 2 //Data Chip Select / BSYNC Pin
define MP3_DREQ 3 //Data Request Pin: Player asks for more data
need to be edited to read:
define MP3_XDCS 7 //Data Chip Select / BSYNC Pin
define MP3_DREQ 2 //Data Request Pin: Player asks for more data
If you could run your arduino fast enough, then yes.
Could one stack two of these with one Arduino-board and play two mp3s simultaneously?
(I am a PIC-guy, done nothing with Arduino. Yet.)
did you try this? Is it possible?
There really needs to be a like function, because if there was, I would so like this.
i had this idea to sick a arduino inside a gizmo doll and make it say bright lights and cry when light level goes up x amount. and when it goes down x amount gizmo says thank you and sings his song.
This looks much easier to manage and understand then adafruit wave shield. It looks like its all processed in the VSLI chip, and not in software.
Wow this really helps!!! i've been working on a project like this for almost a month now and it's good to have something to work from!
defenatley getting it!
On the schematic the Arduino pins which seem to be unused have an asterisk. Does anyone know what the asterisk denotes?
thank's!
The pins with an asterisk (D3, D5, D6, D9, D10, and D11) are the pins that can be used for pulse width modulation (PWM) output - this is an Arduino thing (actually an ATmega thing) and has nothing to do with this shield.