Yahoo refuse tous les emails du site. Si vous avez une adresse chez un autre prestataire, c'est le moment de l'utiliser ;)

En cas de soucis, n'hésitez pas à aller faire un tour sur la page de contact en bas de page.

Topic "Utiliser un lecteur série de fichiers MP3 avec une carte Arduino / Genuino"

Flux RSS des posts récents dans ce topic ( Flux Atom)


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#261 | Signaler ce message


Dans ce tutoriel, nous allons voir ensemble comment mettre en oeuvre un module série de lecture de fichiers MP3. Ces modules permettent de lire des musiques stockées sur une carte SD en fonction de commandes transmises par une carte maître. Dans cet article, la carte maître sera une carte Arduino / Genuino, mais le code peut être adapté pour n'importe quelle plateforme sans grande difficulté.

Lire la suite de l'article sur le site

Derniére modification le par skywodd


Pas de photo de profil

artouste

Membre

#262 | Signaler ce message


Bonjour Fabien l'en tête de commande me fait penser que ça semble être la même base que le DFplayer mini

je testerais tes softs avec


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#263 | Signaler ce message


l'en tête de commande me fait penser que ça semble être la même base que le DFplayer mini

par artouste

C'est effectivement le même module, mais sous un autre nom. Le code devrait fonctionner sans soucis ;)

Un des liens en début d'article pointe vers la doc du DFplayer mini. C'est pour cela que j'ai cité la boutique de DFRobots en intro. C'est la doc qui m'a le plus aidé pour combler les trous dans les autres docs.

Les commandes USB devraient marcher avec le DFplayer mini, en théorie. Chez moi avec la Seeeduino Grove MP3 v2.0 ça donne rien de concluant.


Pas de photo de profil

artouste

Membre

#264 | Signaler ce message


Je confirme que ton code fonctionne avec un dfplayer mini


Pas de photo de profil

cpt_yamabushi

Membre

#478 | Signaler ce message


Bonjour, juste une question, j'aimerais pouvoir lancer des fichiers mp3 se trouvant dans un dossier avec des capteurs (piezo). Je voudrais que chaque piezo aille chercher et lire le fichier correspondant dans le "dossier courant" par exemple "piezo 3 -> fichier 003" et que lorsque je change de dossier le piezo enclenche la lecture du fichier 003 du nouveau dossier. pensez-vous qu'il serait possible de créer une fonction "dossier courant"? si oui, quelle serait selon vous la latence entre le changement de dossier? (conciderant que chaque dossier comprendrait au maximum 6 fichiers de 1mo) comment serait gérer la superposition des fichiers, serait-il possible de les lires en même temps? et la superposition du même fichier? merci pour votre réponse, je débute.


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#479 | Signaler ce message


pensez-vous qu'il serait possible de créer une fonction "dossier courant"?

par cpt_yamabushi

Il est possible de garder dans une variable le numéro de dossier à chaque fois qu'on change de dossier.

Exemple :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
int currentFolderNumber = -1; //Par défaut on ne connais pas le numéro de dossier

void selectSourceFolderAndTrack(byte folder_number, byte track_number) {
  currentFolderNumber = folder_number; // Garde le numéro en mémoire
  send_kt_command(0x0F, folder_number, track_number, 10);
}

int getCurrentSourceFolder() {
  return currentFolderNumber; // Retourne le dernier numéro de dossier connu
}

si oui, quelle serait selon vous la latence entre le changement de dossier? (conciderant que chaque dossier comprendrait au maximum 6 fichiers de 1mo)

par cpt_yamabushi

Une grosse centaine de millisecondes d’après mes tests. Mais ça varie fortement selon les cartes SD.

comment serait gérer la superposition des fichiers, serait-il possible de les lires en même temps? et la superposition du même fichier?

par cpt_yamabushi

Le lecteur lit un fichier X dans un dossier Y. Point final.

Pas de superposition, le lancement d'un fichier arrête la lecture du précédent.


Pas de photo de profil

cpt_yamabushi

Membre

#480 | Signaler ce message


super, merci pour les infos.


Pas de photo de profil

Sincawa

Membre

#518 | Signaler ce message


Bonjour à tous alors là je crois que j'ai besoin d'aide; J'ai tout fait comme tu as dit Skywodd, mais ca ne fonctionne pas aucun son ne sort de l'enceinte. J'ai testé l'enceinte fonctionne j'ai vérifié que la carte SD soit en FAT32 et j'ai testé avec une autre SD; Bref le problème doit venir du programme que j'ai fait en utilisant tes indication.

je le joint pour voir si il y a une erreur :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <SoftwareSerial.h>
SoftwareSerial mp3(15,14);

const byte COMMAND_BYTE_START = 0x7E;
const byte COMMAND_BYTE_VERSION = 0xFF;
const byte COMMAND_BYTE_STOP = 0xEF;


/** Fonction de bas niveau pour envoyer une commande au module KT403A */
void send_kt_command(byte command, byte data_h, byte data_l, unsigned long cmd_delay) {
  Serial.write(COMMAND_BYTE_START);
  Serial.write(COMMAND_BYTE_VERSION);
  Serial.write((byte) 0x06);
  Serial.write(command);
  Serial.write((byte) 0x00);
  Serial.write(data_h);
  Serial.write(data_l);
  Serial.write(COMMAND_BYTE_STOP);
  // 16-bits checksum is optionnal
  delay(cmd_delay);
}

void playTrack(uint16_t track_number) 
{
  send_kt_command(0x03, highByte(track_number), lowByte(track_number), 10);
}

void setVolume(byte volume) 
{
  if (volume > 30) volume = 30;
  send_kt_command(0x06, 0, volume, 10);
}

void repeatSingleTrack(uint16_t track_number) 
{
  send_kt_command(0x08, highByte(track_number), lowByte(track_number), 10);
}

void selectSourceDevice(byte device) 
{
  send_kt_command(0x09, 0, device, 200);
}

/** Reset the MP3 module */
void resetPlayer() 
{
  send_kt_command(0x0C, 0, 0, 100);
}

void setup()
{
  /* Initialise le port série */  
  Serial.begin(9600);
  Serial.setTimeout(60000);
  
  /* Initialise le module KT403A */
  resetPlayer();
  selectSourceDevice(0x02);       // Select SD card as the player device.
  setVolume(15);
  playTrack(1);     
}

void loop()
{
  
}

Merci davance pour vos réponses.


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#524 | Signaler ce message


J'ai tout fait comme tu as dit Skywodd, mais ca ne fonctionne pas aucun son ne sort de l'enceinte. J'ai testé l'enceinte fonctionne j'ai vérifié que la carte SD soit en FAT32 et j'ai testé avec une autre SD;

par Sincawa

1. Ajoute un délai de 5 secondes après le resetPlayer(), si ça marche -> probléme de timing (pas assez de temps entre reset et commande).

2. Si ça marche toujours pas, est-ce que la LED du module clignote lorsqu'il reçoit la commande de lecture ? Oui -> probléme d’enceinte, non -> probléme de carte SD ou de communication.

3. Vérifie que les fichiers sont bien nommés sur la carte SD et que celle-ci est correctement formaté (pas xFAT ou NTFS).

4. Si rien ne marche, essaye avec un casque d'ordinateur ou un ampli audio / entrée ligne de PC. J'ai eu des problèmes d'impédance avec mes modules (j'ai eu besoin de mettre une résistance de 100 ohms pour charger la sortie).


Pas de photo de profil

Prism56

Membre

#702 | Signaler ce message


Bonjour,

J'ai tout fait comme dans ton article et ça ne fonctionne qu'en partie.. Les fichiers .mp3 ne durent que quelques secondes et s'arrêtent. J'ai augmenté le délai de la commande playTrack mais ça augmente aussi le temps que la musique met à commencer. J'ai arrêté d'augmenter arrivé à un délai de 100000 ms. Les autres commandes comme Loop ne fonctionnent pas.

Mon but étant de faire tourner un seul fichier .mp3 en boucle infinie.

Merci d'avance.