http://www.vlsi.fi/en/products/vs1000module.html
BIG CAVEAT: I got this through a friend who bought 2 at 20 Eu ea PLUS required courier shipping at 20 Eu each. We're trying to see about getting many at reasonable price plus shipping. At USD$55 each these are not a deal. I am sure that those in Europe can do much better!
Note the docs download links on the right side of the page. The module pdf has schematics and instructions as well as specs. It's nice and complete. There is enough there to modify, compile and load new code though I haven't gotten that far just yet.
It plays OGG files and WAV files. VLSI has an OGG converter that I haven't tried. For testing I used Format Factory that doesn't always do such a great job though I understand at least part of that is because I changed the data rate by just using the default. OGG files are smaller than MP3 even at the same quality but the ones I made are tiny compared and only a little artifact-y.
With OGGs on generic 2G micro-SD connect power, grounds and speakers and it plays. If you don't have a micro-SD there are voice files on the internal flash that play.
I don't have a stereo connector so I got some cheap earbuds and soldered jumper wires to the jack. IIRC the tip is one channel, middle is the other and back section is ground.
I went with 5V external power, it can take up to 6V VCC. Running from Arduino, power went down to 4.75V which works too. The module has a 3.3V regulated output and a 3.6V power-out pin as well that us used on the MAX232 control schematic to power the MAX232 but can probably power a small AVR if you don't milk it.
The default serial control is 115200 baud.
I tried using 2 UNOs at 115200 between each other running software serial at that speed with RX, TX and GND connected and got bad bits so for this I used a MEGA 2560 RX1/TX1 at 115200 with the module.
There is one voltage level shift needed. I ran 5V TX from the MEGA through 4.7k ohms to the VS1000 AM RX and 2 4.7k resistors in series to GND from that connection as well. VS1000 AM TX is 3.6V and works connected directly to the MEGA RX.
And that's pretty much it. Make sure to connect all the grounds together!
I am able to enter commands through serial monitor and it responds as I expect. It's a bit picky about file names (the PfilenameOGG command) being upper case. I ended up making 8.3 file names with 8 characters though it probably doesn't need them. First thing I do is send f to get it out of continuous play mode into file mode, then C to stop (Cancel) play. When a file is playing only certain commands work. Pause (=), resume (>) and volume control (-, +) always work as does time (?).
This is the MEGA sketch I used just for test purposes. It blinks pin 13 to show correct running.
#include "ctype.h";
byte blinkPin = 13;
byte blinkState = 0;
byte data = 255;
unsigned long blinkStart = 0UL;
unsigned long blinkNow = 0UL;
unsigned long blinkLen = 1000UL;
void setup( void )
{
Serial.begin( 115200 );
Serial1.begin( 115200 );
pinMode( blinkPin, OUTPUT ); // should default LOW
Serial.println( "\nStartup" );
}
void loop( void )
{
blinkNow = millis();
if ( blinkNow - blinkStart >= blinkLen )
{
blinkStart = blinkNow;
blinkState ^= 1;
digitalWrite( blinkPin, blinkState );
}
if ( Serial.available())
{
data = Serial.read();
Serial1.print((char) data );
}
if ( Serial1.available())
{
data = Serial1.read();
if ( isalnum( data ))
{
Serial.print((char) data );
}
// else if (( data == 13 ) || ( data == 10 ))
else if ( data == 10 )
{
Serial.println();
}
else
{
Serial.print( " 0x" );
Serial.print( data, HEX );
Serial.print( "." );
}
}
}
Upcoming, I need to connect a USB interface and modify the software to run at 57600 or less to allow easy software serial control. I also need to make a wiring harness and ditch the breadboard.