Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Catalex Seriële MP3 Speler voor Arduino UNO – Eenvoudige Installatie & Besturing

Onderdelen en benodigdheden

Onderdeel Aantal
Arduino UNO 1
Seriële MP3-speler van Catalex 1
Wat leuke funk-muziek (op SD-kaart) 1

Apps en online diensten

  • Arduino IDE

Over dit project

Catalex Seriële MP3 Speler voor Arduino UNO – Eenvoudige Installatie & Besturing

Hoe de SERIAL MP3 PLAYER V1.0 van CATALEX te gebruiken

Eerst de benodigde bibliotheken downloaden:

#include <SoftwareSerial.h>

Kies welke Arduino-pins verbonden worden met de MP3-speler en initialiseer het seriële protocol:

#define ARDUINO_RX 5  // moet verbonden worden met TX van de Serial MP3 Player module
#define ARDUINO_TX 6  // verbinden met RX van de module
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX); // initialiseer seriële protocol

Commando's uit de datasheet

Hier zijn alle commando's vertaald naar #define statements:

////////////////////////////////////////////////////////////////////////////////////
// Alle benodigde commando's uit de datasheet (https://geekmatic.in.ua/pdf/Catalex_MP3_board.pdf)
static int8_t Send_buf[8] = {0}; // De MP3-speler begrijpt orders in een 8-int string
// 0X7E FF 06 command 00 00 00 EF; (als command=01 volgende nummer)
#define NEXT_SONG 0X01
#define PREV_SONG 0X02
#define CMD_PLAY_W_INDEX 0X03 // DATA VEREIST (nummer van het lied)
#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06 // DATA VEREIST (volume 0 tot 30 (0x1E))
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22 // data nodig: 0x7E 06 22 00 xx yy EF; (xx volume)(yy liednummer)
#define CMD_SEL_DEV 0X09 // OPSLAGAPPARAAT SELECTEREN, DATA VEREIST
#define DEV_TF 0X02 // HELLO, IK BEN DE VEREISTE DATA
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B
#define CMD_RESET 0X0C // CHIP RESET
#define CMD_PLAY 0X0D // HERNEEM AFSPelen
#define CMD_PAUSE 0X0E // AFSPelen GEPAUZEERD
#define CMD_PLAY_WITHFOLDER 0X0F // DATA NODIG, 0x7E 06 0F 00 01 02 EF; (speel lied in map \01\002xxxxxx.mp3)
#define STOP_PLAY 0X16
#define PLAY_FOLDER 0X17 // data nodig: 0x7E 06 17 00 01 XX EF; (speel map 01) (waarde xx onbelangrijk)
#define SET_CYCLEPLAY 0X19 // data nodig: 00 start; 01 stop
#define SET_DAC 0X17 // data nodig: 00 start DAC OUTPUT; 01 DAC geen output
////////////////////////////////////////////////////////////////////////////////////

De MP3-chip begrijpt orders bestaande uit een int array[8] met dit formaat:

0x7E FF aa bb 00 xx yy EF

Waarbij:

  • Het eerste en laatste byte zijn vast: 0x7E en 0xEF
  • aa is het versienummer, gewoon 0x06
  • bb is het daadwerkelijke besturingscommando (zie bovenstaande lijst)
  • xx is het eerste data-byte
  • yy is het tweede data-byte

Dit is de functie die de array samenstelt. We hoeven alleen een van de gedefinieerde commando's te kiezen en de datawaarde op te geven:

void sendCommand(int8_t command, int16_t dat) {
  delay(20);
  Send_buf[0] = 0x7e; // startbyte
  Send_buf[1] = 0xff; // versie
  Send_buf[2] = 0x06; // aantal bytes van commando zonder start/eind byte
  Send_buf[3] = command;
  Send_buf[4] = 0x00; // 0x00 = geen feedback, 0x01 = feedback
  Send_buf[5] = (int8_t)(dat >> 8); // data high byte
  Send_buf[6] = (int8_t)(dat);      // data low byte
  Send_buf[7] = 0xef; // eindbyte
  
  for (uint8_t i = 0; i < 8; i++) {
    mySerial.write(Send_buf[i]);
  }
}

In de setup() functie selecteren we het juiste opslagapparaat (TF-kaart) en geven we het tijd om op te starten:

void setup() {
  mySerial.begin(9600); // Start seriële communicatie voor MP3
  delay(500);           // Wacht op chip initialisatie
  sendCommand(CMD_SEL_DEV, DEV_TF); // Selecteer TF-kaart
  delay(200);           // Wacht 200ms
}

In de loop() spelen we eenvoudig het eerste liedje af:

void loop() {
  sendCommand(CMD_PLAY_WITHVOLUME, 0X0F01); // Speel eerste lied met volume 15
  delay(1000000); // Stuur elke 100 seconden play-commando
}

Hoe nummers op de SD-kaart te zetten

Volgens de datasheet (met zeer slecht Engels):

Catalex Seriële MP3 Speler voor Arduino UNO – Eenvoudige Installatie & Besturing

De MP3-chip leest .mp3 of .wav bestanden alfabetisch geïndexeerd. Als we mappen aanmaken met namen 01, 02 en nummers met namen 001xxxxx.mp3, 002xxxx.mp3, dan weten we zeker welk nummer/map we aanspreken.

VEEL PLEZIER MET HACKEN!

EXTRA: Dezelfde code maar dan met hardware serial (nodig voor mijn STM32-board).

Code

TEST het apparaat (Arduino)

Initialiseer en speel één lied met volume 30

// Code herrangschikt door Javier Muñoz 10/11/2016 - javimusama@hotmail.com
#include <SoftwareSerial.h>
#define ARDUINO_RX 5  // verbinden met TX van Serial MP3 Player module
#define ARDUINO_TX 6  // verbinden met RX van de module
SoftwareSerial mySerial(ARDUINO_RX, ARDUINO_TX);

////////////////////////////////////////////////////////////////////////////////////
// Alle commando's uit de datasheet
static int8_t Send_buf[8] = {0};
#define NEXT_SONG 0X01
#define PREV_SONG 0X02
#define CMD_PLAY_W_INDEX 0X03
#define VOLUME_UP_ONE 0X04
#define VOLUME_DOWN_ONE 0X05
#define CMD_SET_VOLUME 0X06
#define SET_DAC 0X17
#define CMD_PLAY_WITHVOLUME 0X22
#define CMD_SEL_DEV 0X09
#define DEV_TF 0X02
#define SLEEP_MODE_START 0X0A
#define SLEEP_MODE_WAKEUP 0X0B
#define CMD_RESET 0X0C
#define CMD_PLAY 0X0D
#define CMD_PAUSE 0X0E
#define CMD_PLAY_WITHFOLDER 0X0F
#define STOP_PLAY 0X16
#define PLAY_FOLDER 0X17
#define SET_CYCLEPLAY 0X19
#define SET_DAC 0X17
////////////////////////////////////////////////////////////////////////////////////

void setup() {
  Serial.begin(9600);       // Seriële monitor op PC
  mySerial.begin(9600);     // Seriële communicatie voor MP3
  delay(500);               // Wacht op chip initialisatie
  sendCommand(CMD_SEL_DEV, DEV_TF); // Selecteer TF-kaart
  delay(200);               // Wacht 200ms
}

void loop() {
  sendCommand(CMD_PLAY_WITHVOLUME, 0X0F01); // Speel eerste lied met volume 15
  delay(1000000); // 100 seconden
}

void sendCommand(int8_t command, int16_t dat) {
  delay(20);
  Send_buf[0] = 0x7e;
  Send_buf[1] = 0xff;
  Send_buf[2] = 0x06;
  Send_buf[3] = command;
  Send_buf[4] = 0x00;
  Send_buf[5] = (int8_t)(dat >> 8);
  Send_buf[6] = (int8_t)(dat);
  Send_buf[7] = 0xef;
  
  for (uint8_t i = 0; i < 8; i++) {
    mySerial.write(Send_buf[i]);  // Stuur naar MP3
    Serial.print(Send_buf[i], HEX); // Stuur naar seriële monitor
  }
  Serial.println();
}

GitHub

https://github.com/aureleq/TrumpButton

Schema's

Volgens de datasheet kan de voedingsspanning varieren van 3,2V tot 5V met een verbruik van 200mA.

Catalex Seriële MP3 Speler voor Arduino UNO – Eenvoudige Installatie & Besturing

Productieproces

  1. Versterk het Onderhoudscrisis Bericht: Download Blues & Reggae Versies van het 'Onderhoudscrisis Lied'
  2. Spelpianist: Akoestische Traditie Samengevoegd met Geautomatiseerde Precisie
  3. Bouw een Squid Game-thema Interactieve Pop met Arduino UNO – DIY Project
  4. Bluetooth-gecontroleerde Arduino Spybot bouwen
  5. FlickMote: Gebarengecontroleerde IR-afstandsbediening voor Slimme Huizen
  6. DIY Arduino TV-B-Gone: Universele TV-uit-schakelaar
  7. Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
  8. Find Me: Slimme Item Locator met Arduino en Bluetooth
  9. Geoptimaliseerde Voedingsoplossingen voor Arduino Projecten
  10. Audio afspelen met Arduino UNO en DFPlayer Mini – Stap-voor-stap handleiding
  11. Arduino Web-gecontroleerde MP3 Speler: Eenvoudige Audio Afspelen via Browser