Haunt Forum banner

JQ8900 Alternative to DFPlayer MP3 board

1088 Views 6 Replies 3 Participants Last post by  Jekyll-labs


Hey, anyone here using the JQ8900 to provide audio for props? It seems like a nice alternative to the DFPlayer MP3 player. It has onboard storage so you just plug it in and drag files to it like a USB thumbdrive. (No messing with SD cards) Audio can be triggered by connecting one of 7 pins to ground, or there's a serial protocol for using an Arduino. I'm working on a programable board that this will plug into and provide the audio for a prop. Still a bit of a work in progress, but seems to have potential.
See less See more
  • Like
Reactions: 1
1 - 7 of 7 Posts
Looks pretty cool. It seems to have 4 MB of storage so that is probably enough for most applications.
  • Like
Reactions: 1
I am also working on this serial controller, will share anything I can find or what works.
Dave
  • Like
Reactions: 1
I am also working on this serial controller, will share anything I can find or what works.
Dave
Awesome! I've started compiling what I can find about the JQ8900 on my blog. At this point I'm just hosting a couple PDFs of the manuals (seems like several of the copies I've found were behind paywalls) and a snipit or two of arduino code. Would be great to link to whatever you find.

The part I've found most useful is the little bit of code below. It uses the Hex byte string "AA 06 00 B0" to play the next MP3 file when the trigger (a PIR) goes off. If I have only one MP3, it just plays that one over and over. (I've also used that same hex string to unpredictably cycle through a series of MP3's)

Code:
//include libraries
#include "Arduino.h"
#include "SoftwareSerial.h"

SoftwareSerial mySoftwareSerial(15, 14); // RX, TX

void setup(){
  randomSeed(analogRead(0));
  delay(1000);
  mySoftwareSerial.begin(9600);
  pinMode(4, INPUT);
}

void loop()
{
  byte playnext[] = {0xAA, 0x06, 0x00, 0xB0 };
  int trig = digitalRead(4);
  if (trig == HIGH) { 
  mySoftwareSerial.write(playnext, sizeof(playnext));
  delay(5000);
  }
  delay(100);
}
See less See more
Awesome! I've started compiling what I can find about the JQ8900 on my blog. At this point I'm just hosting a couple PDFs of the manuals (seems like several of the copies I've found were behind paywalls) and a snipit or two of arduino code. Would be great to link to whatever you find.

The part I've found most useful is the little bit of code below. It uses the Hex byte string "AA 06 00 B0" to play the next MP3 file when the trigger (a PIR) goes off. If I have only one MP3, it just plays that one over and over. (I've also used that same hex string to unpredictably cycle through a series of MP3's)

Code:
//include libraries
#include "Arduino.h"
#include "SoftwareSerial.h"

SoftwareSerial mySoftwareSerial(15, 14); // RX, TX

void setup(){
  randomSeed(analogRead(0));
  delay(1000);
  mySoftwareSerial.begin(9600);
  pinMode(4, INPUT);
}

void loop()
{
  byte playnext[] = {0xAA, 0x06, 0x00, 0xB0 };
  int trig = digitalRead(4);
  if (trig == HIGH) {
  mySoftwareSerial.write(playnext, sizeof(playnext));
  delay(5000);
  }
  delay(100);
}
In your findings with Arduino, does the code look close to the DFPlayer code? I use Picaxe so just asking.
Dave
Unfortunately, the JQ8900 code seems different from the DFPlayer. It does seem similar however to the code for the JQ8400 which is older and therefore more well documented than the JQ8900. The English translation of the JQ8900 manual (link on my blog above) does give several examples of commands that can be sent over serial.

Here's the serial command pattern for the JQ8400 (and I believe the JQ8900)
Starting Code + Command Code + Data Length + Data 1 – Data n + Checksum
Starting Code : fixed as “AA” (in hex)
Command Code : 01 – 26 (in hex)
Data Length : respective data bytes in commands; length=1 stands for command only, no data.
Checksum : The low byte of the sum of all the bytes before the checksum byte.
Data format: high 8-bit first, low 8-bit second.

The DFPlayer uses "7E" as a starting hexadecimal byte, and ends with a Checksum an then "EF" as an end bit. So serial commands are not directly compatible.
1 - 7 of 7 Posts
Top