Arduino Forum

International => Français => Topic started by: meepmeep on Dec 03, 2016, 10:32 am

Title: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: meepmeep on Dec 03, 2016, 10:32 am
Bonjour,

Pour la présentation générale :
- Je suis nouveau sur ce forum et totalement débutant en arduino...
- Je suis prof en collège (et oui, il en faut...)
- J'ai des notions avec les systèmes Picaxe (Porgrammation en organigrammes et en blocs)
- Sur Arduino, j'utilise la technologie Grove avec les élèves
- J'utilise la programmation par bloc (Arduibloc) avec les élèves

Mon projet :
Avec des élèves, je souhaite mettre en œuvre un lecteur mp3 intégré dans un livre (un peu comme les livres pour enfants avec une pastille sur chaque page sur laquelle on appuie pour déclencher un son).
J'ai en ma possession :
- une carte MEGA
- un Shield GROVE
- un module Grove - MP3 v2.0 (http://wiki.seeed.cc/Grove-MP3_v2.0/ (http://wiki.seeed.cc/Grove-MP3_v2.0/))
- un module Grove - Speaker (http://wiki.seeed.cc/Grove-Speaker/ (http://wiki.seeed.cc/Grove-Speaker/))
- De quoi faire des boutons poussoirs (BP, résistances, condo 10nF...)

En lisant les docs sur Internet, et vu ma faible maîtrise sur Arduino, je n'ai pas réussi à trouver une réponse : je me demandais si, déjà, avec le matériel que j'ai, je peux faire quelque chose... car je vois que le module MP3 a une sortie jack, mais moi, je souhaiterais renvoyer le son vers le Haut-Parleur...

Ma question :
Est-ce que c'est possible, avec ce matériel, de renvoyer le son du module MP3 au travers de la liaison série, et de le réinjecter vers le module HP ?
Ou faut-il que je me procure d'autres modules ou matériel ?

Merci d'avance pour votre aide !

Bon weekend...
Title: Re: Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Dec 03, 2016, 02:08 pm
Ma question :
Est-ce que c'est possible, avec ce matériel, de renvoyer le son du module MP3 au travers de la liaison série, et de le réinjecter vers le module HP ?
Ou faut-il que je me procure d'autres modules ou matériel ?
Le "Grove - MP3 v2.0" va lire des musiques pré-enregistrées sur la carte SD qui est au dos du composant

Pour piloter la lecture (choisir une piste, la lancer, la stopper etc) il y a un langage de commande qui est envoyé au module par le biais d'une liaison série. Souvent on utilisera la librairie SoftwareSerial pour cela, le port série des UNO étant souvent déjà réservé à l'USB avec l'ordinateur mais comme vous avez un Mega vous pourrez utiliser un des autres ports séries.

Une fois envoyée la commande au module, le fichier est lu sur la carte SD, décodé et le son envoyé vers le jack, c'est à dire que vous aurez une référence GND et (comme il est stéréo) 2 signaux avec une tension plus ou moins forte, compatible avec les casques audios.

Le problème avec votre module "Grove - Speaker" c'est qu'il est hautement filtré, incapable d'émettre des aigus par exemple selon la doc que vous pointez (" Due to the influence of the capacitance, the module can only output the bass signal, and the treble is unable to emit"). Vous pouvez essayer de directement brancher une des 2 sorties du jack + GND du jack sur ce module  mais à mon avis la qualité ne sera pas bonne à cause du filtrage effectué.

Le plus simple c'est de trouver un haut parleur de récupération et de le brancher avec une résistance de protection (limitation en fonction du courant qu'est capable de fournir le module MP3) sur le jack entre GND et un des 2 signaux --> ça vous donnera un signal en mono. si vous avez 2 haut parleurs, branchez sur l'autre et vous aurez la stéréo
Title: Re: Utilisation du module Grove - MP3 v2.0 ?
Post by: meepmeep on Dec 03, 2016, 03:15 pm
Merci pour cette réponse très détaillée, j'y vois plus clair...
Mais comment connaître l'impédance nominale à brancher sur le jack de sortie ?
Aucune doc que j'ai consulté ne fournit cette information...

Je suis tombé sur ce tuto (https://www.carnetdumaker.net/articles/faire-une-boite-musique-avec-une-carte-arduino-genuino-et-un-module-mp3-serie/), mais comment le choix de la résistance de 100 ohm (en parallèle) a-t-il était fait ? Empiriquement ??
Ce même tuto renvoi vers un autre article avec des liens de datasheet, mais rien concernant l'impédance admissible en sortie jack...

Merci encore pour votre réponse !
Title: Re: Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Dec 03, 2016, 04:52 pm
Dans l'absolu voici la théorie:

Imaginez une puce qui sort au max 100mA en 3.3V

Le haut parleur est un consommateur de courant, il va donc tirer le plus possible.

La majorité des haut parleurs de récupérations ou que vous trouverez sur les sites genre eBay ont une impédance de 8Ω  et la loi d'Ohm nous dit que une charge de 8 Ω soumise à une différence de potentiel de 3.3 volts sera traversée par un courant de 3.3 / 8 = 0,4125 A ou 425 mA

Vous allez donc soumettre votre module à 4 fois l'intensité max qu'il peut supporter et le griller.

Une solution possible est de monter une résistance en série avec le haut-parleur pour limiter le courant à disons 90mA pour ne pas saturer votre module. --> loi d'Ohm:  résistance totale = 3,3 / 0,09 = 36,7 Ω - les résistances étant en série et votre HP étant à 8Ω disons --> vous pouvez en première approche mettre une résistance supplémentaire de 36,7 - 8 = 28,7Ω - on trouve des 27 et 33 sur le marché, on prendra la 33 pour être sûr d'être dans les clous avec un qualité à 1% de marge.

Vous pouvez essayer, mais le haut-parleur émettra un son de très faible intensité car on a dimensionné pour la tension max et que vous n'y serez pas souvent. Donc souvent les montages se font par le biais d'un transistor.

Mais en fait j'ai sans doute parlé trop vite ci dessus. le fait qu'il y ait un jack de monté sur le module c'est sans aucun doute parce que la sortie est normalisée par le composant au "line level (https://fr.wikipedia.org/wiki/Niveau_ligne)" soit dans le monde du grand public -10 dBV soit 316 mV efficaces donc sous 8Ω vous êtes largement dans les clous directement. (le mieux quand même c'est de connecter un oscilloscope et de vérifier ce qui sort du jack...)





 
Title: Re: Utilisation du module Grove - MP3 v2.0 ?
Post by: meepmeep on Dec 03, 2016, 11:44 pm
Ok, merci infiniment pour vos réponses, je pense pouvoir me débrouiller de ce côté... comme c'est pour un livre sonore, je n'ai absolument pas besoin de puissance, mais juste que la voix enregistrée par les élèves soit audible...

Par contre, qu'est-ce que je galère pour obtenir le moindre son de ce module !!! (j'ai mis un fichier MP3 en wma sur un micro SD formatée en FAT32, connecté le module sur un port UART de mon shield GROVE MEGA, pour le moment j'utilise un casque audio)...

Je rappelle que je suis totalement débutant...
J'ai essayé de suivre :
https://www.carnetdumaker.net/articles/utiliser-un-lecteur-serie-de-fichiers-mp3-avec-une-carte-arduino-genuino/ (https://www.carnetdumaker.net/articles/utiliser-un-lecteur-serie-de-fichiers-mp3-avec-une-carte-arduino-genuino/)
et
https://github.com/Seeed-Studio/Grove_Serial_MP3_Player_V2.0 (https://github.com/Seeed-Studio/Grove_Serial_MP3_Player_V2.0)

J'ai essayé d'inclure la bibliothèque zip du second lien...
Sur le premier lien, il me dit qu'il ne connais pas la commande   resetPlayer();

Bref, je capte rien !!!

Merci en tous les cas pour le temps que vous m'avez déjà consacré...
A+
Title: Re: Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Dec 04, 2016, 12:05 am
Avez vous bien installé la librairie MP3Player_KT403A (https://github.com/Seeed-Studio/Grove_Serial_MP3_Player_V2.0) ?

Il y a un exemple d'usage. Dans ce code puisque vous avez des ports séries en rab si le MEGA

Vous n'avez pas besoin de passer par software serial, utilisez Serial1,2,3 à la place de mp3

Code: [Select]

// Note: You must define a SoftwareSerial class object that the name must be mp3,
//       but you can change the pin number according to the actual situation.
SoftwareSerial mp3(2, 3);


Title: Re: Utilisation du module Grove - MP3 v2.0 ?
Post by: meepmeep on Dec 04, 2016, 10:17 am
Bonjour,

Voici ce que j'ai fait pour la bibliothèque : (c'est bon ?)

- Sur le lien de la librairie donné ci-dessus, j'ai cliqué sur le bouton vert "Clone or Download" puis sur "Download Zip".
- Ensuite, sur le logiciel Arduino, j'ai cliqué sur "Croquis / inclure une bibliothèque" et choisis le fichier zippé nouvellement téléchargé.
- Maintenant, dans la liste, j'ai une bibliothèque nommée "Grove_serial_MP3_player_V20.2-master".
- En cliquant dessus, ça ajoute ça dans mon code
Code: [Select]
#include <MP3Player_KT403A.h>
C'est bien ça qu'il fallait faire ?

Sinon, je n'avais pas mis
Code: [Select]
SoftwareSerial mp3(2, 3);
D'ailleurs, je ne comprends pas ce que ça veut dire cette ligne, ni les chiffres entre parenthèses...

Merci en tous les cas, je poursuis mes investigations pour faire fonctionner ce module...
Title: Re: Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Dec 04, 2016, 10:44 am
C'est Normal pour du code d'avoir des grands cadres

Pour votre librairie allez enlever le -master à la fin du nom du répertoire - c'est une ancienne convention pour les librairies mais pas adapté pour l'IDE aujourd'hui - mais dans votre cas ça ne suffira pas, pour simplifier l'idéal c'est que le répertoire ait le même nom que la librairie qu'on inclut (sans le .h) donc appelez le répertoire MP3Player_KT403A et redémarrez votre IDE

SoftwareSerial mp3(2, 3); ça veut dire utiliser un objet qui va simuler un port série en software. si vous reprenez juste l'exemple qui est dans la bibliothèque et que vous branchez les pins 2  au Tx du module et la 3 vers le Rx du module vous avez déclaré une variable de type port série simulé, appelée mp3 et parlant au module.

la librairie est codée en dur pour avoir une variable mp3 de type SoftwareSerial ce qui n'est pas une super idée...  vu que vous avez un mega, vous devriez modifier le .h

Code: [Select]
//#include <SoftwareSerial.h>// <-- commenter
//extern SoftwareSerial mp3; // <-- commenter

extern HardwareSerial mp3; // <-- redéfinir comme cela

la doc est ici (https://www.arduino.cc/en/Reference/SoftwareSerial) vous y verrez l'usage SoftwareSerial(rxPin, txPin) => rxPin c'est la Pin qui va recevoir des données (à connecter donc au Tx de l'autre côté) et la txPin est celle qui va emetttre (à connecter donc au Rx de l'autre côté).

 avez vous ecrit un bout de code? Postez le et décrivez comment sont branchés les éléments on vous guidera
Title: Re: Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Dec 04, 2016, 12:52 pm
Voici un bout de code à tester - je n'ai pas le module donc je me suis simplement inspiré de l'exemple disponible.

Connectez votre shield MP3 de la façon suivante à votre MEGA

1. vérifiez bien que le module que vous avez est en 5V
2. vérifiez bien aussi que sur votre module les pins du modules Gnd, Vcc, Rx et Tx sont bien comme cela:

(http://img4.hostingpics.net/pics/931747P1010463recadre.jpg) (http://img4.hostingpics.net/pics/931747P1010463recadre.jpg)

3. connectez au méga
(http://img4.hostingpics.net/pics/439108mp3.png) (http://img4.hostingpics.net/pics/439108mp3.png)

Mettez la vitesse en baud de l'interface Série de l'IDE à 115200 bauds (le popup en bas de la fenêtre), une carte SD dans le lecteur avec des fichiers. Je pense qu'ils seront joués dans l'ordre d'ajout sur la carte SD. 

Code: [Select]
// on inclut la librairie adaptée
#include <MP3Player_KT403A.h>

// l'arduino Mega dispo de plusieurs port séries matériels
// Serial: 0 (RX) and 1 (TX); le port Serial est connecté à l'USB qui va à l'ordinateur
// Serial 1: 19 (RX) and 18 (TX);
// Serial 2: 17 (RX) and 16 (TX);
// Serial 3: 15 (RX) and 14 (TX).
// (RX) c'est pour recevoir et (TX) transmettre des données séries TTL

// dans cet exemple je vais utiliser Serial1, donc les pin 19 pour Rx et 18 pour Tx
// la pin 19 du Mega sera donc connecté au Tx du module Grove
// la pin 18 du Mega sera donc connecté au Rx du module Grove

// modifier le MP3Player_KT403A.h de la librairie  pour avoir au début la variable mp3 en port hardware, pas softwareSerial
//   // #include <SoftwareSerial.h>// <-- commenter
//   // extern SoftwareSerial mp3; // <-- commenter
//   extern HardwareSerial mp3; // <-- redéfinir comme cela

HardwareSerial mp3 = Serial1; // la librairie attend une variable mp3.

void setup()
{
  // On parlera avec l'ordinateur à 115200 bauds, mettre la console à cette vitesse
  Serial.begin(115200);

  // le module grove est configré pour discuter à 9600 bauds, donc c'est la vitesse que l'on choisit
  mp3.begin(9600);

  // petit délai pour s'assurer que tout s'initialise bien
  delay(100);

  // On configure la libraire pour utiliser la carte SD
  SelectPlayerDevice(0x02);

  // On met le volume à 15, les valeurs admissibles sont entre 0 et 30
  SetVolume(15);

  Serial.println(F("------ Commmandes ------"));
  Serial.println(F("J\tJouer #1"));
  Serial.println(F("P\tPause"));
  Serial.println(F("C\tContinuer"));
  Serial.println(F(">\tSuivante"));
  Serial.println(F("<\tPrecedente"));
  Serial.println(F("B\tboucle sur toutes les chansons"));
  Serial.println(F("+\tAugmente le volume"));
  Serial.println(F("-\tDiminue le volume"));
  Serial.println(F("------------------------"));
}



void loop()
{
  int caractereRecu = 0;

  // On attend un ordre sur le port Série (à travers la console Série de l'IDE)
  while (Serial.available());
  caractereRecu = Serial.read();

  switch ((char) caractereRecu)
  {
    case 'j':
    case 'J':
      SpecifyMusicPlay(1); // index de la chanson entre 0 et 65535 (unsigned int - uint16_t)
      Serial.println("J");
      break;
    case 'p':
    case 'P':
      PlayPause();
      Serial.println("P");
      break;
    case 'c':
    case 'C':
      PlayResume();
      Serial.println("C");
      break;
    case '>':
      PlayNext();
      Serial.println(">");
      break;
    case '<':
      PlayPrevious();
      Serial.println("<");
      break;
    case 'b':
    case 'B':
      PlayLoop();
      Serial.println("B");
      break;
    case '+':
      IncreaseVolume();
      Serial.println("+");
      break;
    case '-':
      DecreaseVolume();
      Serial.println("-");
      break;
  }
  // éventuellement on affiche ce que nous dit le module mp3
  printReturnedData();
}


voilà, normalement vous tapez dans la console série de l'IDE des commande J par exemple pour commencer à jouer la première chanson, > pour passer à celle suivante etc... Vous pouvez valider après chaque entrée mais si vous tapez plusieurs commandes à la suite, elles seront gérées correctement. par exemple si vous tapez +++ vous allez augmenter 3 fois le son.
Title: Re: Utilisation du module Grove - MP3 v2.0 ?
Post by: meepmeep on Dec 04, 2016, 08:59 pm
Bonsoir,
Merci pour vos messages...

Au niveau des codes que j'ai essayé, c'est seuelement des copies de ce site : https://github.com/Seeed-Studio/Grove_Serial_MP3_Player_V2.0 (https://github.com/Seeed-Studio/Grove_Serial_MP3_Player_V2.0)

Sinon, je viens d'essayer les 2 codes proposés mais ils engendrent tous les 2 des erreurs :

Pour le premier code (Posted by J-M-L - Today at 09:44 am)

Code: [Select]
SoftwareSerial mp3(2, 3);
--> 'SoftwareSerial' does not name a type

Pour le second code (Posted by J-M-L - Today at 11:52 am)

Code: [Select]
HardwareSerial mp3 = Serial1; // la librairie attend une variable mp3.
--> conflicting declaration 'HardwareSerial mp3'

J'avoue que c'est du chinois pour moi... et que je n'ai aucune idée du problème...

Sinon, indépendamment de cela, j'ai un problème de formatage de ma carte SD (en FAT32) : quand j'insère la carte dans le module, la petite LED verte ne s'allume pas (alors qu'avec la SD de mon téléphoné portable, formatée en FAT, ça s'allume..., mais j'ai des données dedans et je ne compte pas la formater, c'était juste pour essayer...).

Par ailleurs, j'ai une autre piste en attente : j'utilise l'Arduiblock de chez DuinoEdu et je viens d'apprendre que le bloc pour le module Grove-MP3-v2.0 arrive dans leur prochaine version d'Arduino Augmenté... mais je ne sais pas quand ça va sortir... d'ici là, j'aimerai bien arriver à un résultat avec la programmation en ligne de code... histoire d'apprendre à me débrouiller...

Merci encore pour votre aide !
Title: Re: Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Dec 04, 2016, 09:54 pm
Quote
--> conflicting declaration 'HardwareSerial mp3'
Avez vous effectué les modifications demandées sur la librairie?

--> changez de nom
--> modifier le code de la librairie

comme expliqué dans #7

Pour votre librairie allez enlever le -master à la fin du nom du répertoire - c'est une ancienne convention pour les librairies mais pas adapté pour l'IDE aujourd'hui - mais dans votre cas ça ne suffira pas, pour simplifier l'idéal c'est que le répertoire ait le même nom que la librairie qu'on inclut (sans le .h) donc appelez le répertoire MP3Player_KT403A et redémarrez votre IDE

SoftwareSerial mp3(2, 3); ça veut dire utiliser un objet qui va simuler un port série en software. si vous reprenez juste l'exemple qui est dans la bibliothèque et que vous branchez les pins 2  au Tx du module et la 3 vers le Rx du module vous avez déclaré une variable de type port série simulé, appelée mp3 et parlant au module.

la librairie est codée en dur pour avoir une variable mp3 de type SoftwareSerial ce qui n'est pas une super idée...  vu que vous avez un mega, vous devriez modifier le .h


//#include <SoftwareSerial.h>// <-- commenter ou détruire
//extern SoftwareSerial mp3; // <-- commenter ou détruire

extern HardwareSerial mp3; // <-- redéfinir comme cela

Title: Re : Utilisation du module Grove - MP3 v2.0 ?
Post by: meepmeep on Dec 05, 2016, 03:41 pm
Ca y est, j'ai fini par réussir !
Premièrement, ma carte était mal formatée (j'ai utilisé un 3ème PC en choisissant FAT32 pour que ça marche, alors qu'avec les mêmes paramètres, ça ne donnait rien avec ma SD...)
Deuxièmement, le problème venait de SoftwareSerial mp3(19,18); et non SoftwareSerial mp3(18,19);

Voici le code utilisé :
Code: [Select]
#include <MP3Player_KT403A.h>

boolean __ardublockDigitalRead(int pinNumber)
{
  pinMode(pinNumber, INPUT);
  return digitalRead(pinNumber);
}


SoftwareSerial mp3(19,18);

void setup()
{
  pinMode( 2 , INPUT);
  pinMode( 4 , OUTPUT);
  mp3.begin(9600);
  delay(100);

  SelectPlayerDevice(0x02);       // Select SD card as the player device.
}

void loop()
{
  if (!__ardublockDigitalRead(2))
  {
    digitalWrite(4 , HIGH);
    SetVolume(500);
    SpecifyMusicPlay(1);
  }
}

J'utilise un bouton physique pour déclencher le son

Reste à résoudre mon problème de haut-parleur.
 Merci infiniment pour votre aide !!!
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Dec 05, 2016, 07:08 pm
super - pour le haut parleur si j'étais vous je laisserai tomber le truc grove et j'achèterai sur Amazon le moins cher des haut parleur avec entrée Jack audio et une alimentation USB

par exemple si vous cherchez sur Amazon "Haut-parleur Enceinte Portable Rechargeable Hamburger Stéréo Net Usb Pc Subwoofer Dédié" ça vaut 3,19 euros avec  livraison gratuite en france métropolitaine... (ou d'autres il y en a pleins sous 5€) et vous avez une carte avec entrée ligne - directement compatible avec la sortie de votre Grove MP3

(https://images-na.ssl-images-amazon.com/images/I/61OpIHmLs8L._SL1024_.jpg)

vous enlevez la coque en plastique, regardez où arrive l'alim USB (ça prend juste 2 des pins de l'USB pour le 5V et la masse, donc vous avez ça sur votre Mega) et vous connectez le jack dans votre module MP3 et voilà.... et vous pouvez même récupérer le circuit de charge de la batterie et la batterie pour le bouquin peut être
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: meepmeep on Dec 06, 2016, 04:46 pm
Petites précision pour ceux que le sujet intéresse :

Mon problème de carte SD qui ne s'allumait pas (et que je croyais ne pas être reconnu ou mal formatée) était finalement dû au fait que les fichiers wma placés sur la carte ne sont pas reconnus.
Dès que j'ai ajouté un fichier MP3 sur la carte, la LED verte s'est allumée sur le module !

Pourtant, sur la doc, il est dit que le format WMA est reconnu... mystère pour moi.

Et si il y a 50 fichiers non audio sur la carte SD, le premier fichier MP3 placé sur la carte est considéré comme étant l'index n°1 (SpecifyMusicPlay(1); )

Je vous tiens au courant pour le haut-parleur... (et l'idée de J-M-L)
Merci encore
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: meepmeep on Jan 31, 2017, 09:31 pm
J'ai acheté la mini enceinte cité plus haut, c'est impeccable, je l'ai démonté, j'ai retiré la batterie et j'ai relié le 5v de la carte Arduino là où était la batterie (car alimenter sur le + et - indiqué sur le circuit ne fonctionne pas, ça met en charge la mini enceinte sans pouvoir l'utiliser).
Ensuite, j'ai branché le mini jack à la carte Grove MP3 et le son est satisfaisant pour mon utilisation.
Merci encore pour votre aide.
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Jan 31, 2017, 11:48 pm
Super news :)
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: olivierbruguier on Feb 17, 2017, 08:43 am
Bonjour à tous,

Je suis nouveau sur le forum et débutant en arduino. J'avais un problême similaire avec le lecteur grove mp3.
Pas tout à fait le même, mais en lisant vos explications claires j'ai réussi à mieux comprendre le fonctionnement. J'ai donc résolu mon problème de com .

Je vous remercie donc pour vos explications et vos indications qui m'ont bien aidé !

Olivier
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Feb 17, 2017, 09:49 am
Super - merci d'avoir commenté
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: duinette on Jun 10, 2017, 12:08 pm
Je travaile aussi sur ce module et du coup j'ai une question:

comment on fait pour allumer le mp3 sans appuyer sur un bouton.

Ma piste serais de coder de façon à ce que lorsqu'une pine est High il s'allume mais mon code ne fonctionne pas.

Et sinon j'ai testé aussi de l'allumer des l'initialisation et ca ne marche pas non plus:

#include <SoftwareSerial.h>
#include <MP3Player_KT403A.h>

// Note: You must define a SoftwareSerial class object that the name must be mp3,
//       but you can change the pin number according to the actual situation.
SoftwareSerial mp3(6, 7);

void setup()
{
    mp3.begin(9600);
    Serial.begin(9600);
    delay(100);

    if(Serial.available()){
    PlayLoop();
    }
   
    SelectPlayerDevice(0x02);       // Select SD card as the player device.
    SetVolume(0x1E);                // Set the volume, the range is 0x00 to 0x1E.
}

void loop(){}
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Jun 10, 2017, 12:16 pm
Votre PlayLoop dépend de s'il y a quelque chose en attente sur le port série - et vous le faites avant le SelectPlayerDevice / SetVolume

Il faut d'abord initialiser proprement le module puis lancer la commande le lecture
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: duinette on Jun 10, 2017, 12:23 pm
Merci beaucoup de la réponse et du coup maintenant ça fonctionne mais ça s'arrête au bout de 2 ou 3 secondes...

#include <SoftwareSerial.h>
#include <MP3Player_KT403A.h>

// Note: You must define a SoftwareSerial class object that the name must be mp3,
//       but you can change the pin number according to the actual situation.
SoftwareSerial mp3(6, 7);

void setup()
{
    mp3.begin(9600);
    Serial.begin(9600);
    delay(100);
   
    SelectPlayerDevice(0x02);       // Select SD card as the player device.
    SetVolume(0x1E);                // Set the volume, the range is 0x00 to 0x1E.


    if(Serial.available()){
    PlayLoop();
    }
}

void loop(){
}
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: duinette on Jun 10, 2017, 12:33 pm
J'ai testé ca sinon et ça ne marche pluss :/

void setup()
{
    mp3.begin(9600);
    delay(100);
   
    SelectPlayerDevice(0x02);       // Select SD card as the player device.
    SetVolume(0x1E);                // Set the volume, the range is 0x00 to 0x1E.


    if(mp3.available()){
    PlayLoop();
    }
}

void loop(){}
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Jun 10, 2017, 12:45 pm
Je n'ai pas le module mais ne faut-il pas d'abord choisir un numéro de playlist? Genre avec un SpecifyMusicPlay(1);


Appeler mp3.available() n'est sans doute pas une bonne idée ...
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: duinette on Jun 10, 2017, 07:04 pm
Je sais pas je n'y arrive vraiment pas je crois que ce module ne s'active qu'en communiquant avec le moniteur.

J'ai essayé plusieurs bidouillages mais ils sont infructueux...
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Jun 10, 2017, 07:59 pm
Quel arduino avez vous, comment tout est connecté, alimenté etc?
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: duinette on Jun 10, 2017, 08:43 pm
c'est bon c'est regléééééééé, enfait ce module est un peu bizarre.
Enfait  j'avais mis des if en trop dans le code, en tout cas merci de votre réactivité !!
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: jackjean on Aug 24, 2017, 05:14 pm
Bonjour à Tous,
Je déterre ce topic après plus de 6 mois, et surtout après plusieurs jours de "pateaugeage"...

Après avoir reçu mon Grove MP3 v2.0, j'ai tout d'abord modifié la librairie pour me passer du softwareSerial comme lumineusement expliqué ici (j'utilise un Mega).
Voici ce que ça donne :

Code: [Select]

#ifndef __MP3PLAYER_KT403A_H__
#define __MP3PLAYER_KT403A_H__


//#include <SoftwareSerial.h>

//extern SoftwareSerial mp3;

extern HardwareSerial mp3;

void SelectPlayerDevice(uint8_t device);
void SpecifyMusicPlay(uint16_t index);
void SpecifyfolderPlay(uint8_t folder, uint8_t index);
void PlayPause(void);
void PlayResume(void);
void PlayNext(void);
void PlayPrevious(void);
void PlayLoop(void);
void SetVolume(uint8_t volume);
void IncreaseVolume(void);
void DecreaseVolume(void);
uint8_t QueryPlayStatus(void);
void printReturnedData(void);


#endif


Je l'ai éditée en utilisant Wordpad, pour garder une mise en page lisible.

J'ai ensuite formaté une MicroSD 4Go en FAT32 et rangé dessus une petite dizaine de fichiers mp3. Ces fichiers sont parfaitement lisibles sur Windows.

j'ai dans un premier temps testé sans succès le sketch de ce topic. Pour plus de visibilité (l'empilage de dialogues en liaison série me perturbant, vu mon grand âge), j'ai écrit un sketch basé sur un switch / case scrutant le signal ana d'un potentiomètre.

Je passe de case en case après dépassement en + puis en - de 2 valeurs "distantes" pour éviter les aléas (comme >800/1023 et 400/1023).
2 cases en sens + envoient chacun à leur tour une ligne de commande de la librairie modifiée.
je surveille aussi avec le moniteur série l'état du graphe (switch).
je vois nettement la LED de TX clignoter à chaque case en +.
j'ai bien entendu sélectionné la lecture sur SD ainsi que le volume moyen en setup.
Voici le sketch :

Code: [Select]

#include <MP3Player_KT403A.h>
HardwareSerial mp3 = Serial3; // la librairie attend une variable mp3.
    int lecteur = 0;
    int potar = 0;

void setup()
{   mp3.begin(9600);
    Serial.begin(9600);
    delay(100);
   
    SelectPlayerDevice(0x02);       // Select SD card as the player device.
    SetVolume(0x0E);                // Set the volume, the range is 0x00 to 0x1E.
}

void loop()
{
   potar = analogRead(A0);

   switch (lecteur)  {

    case 0 :
    if (potar > 700)
    {Serial.println("Play 1");
    SpecifyMusicPlay(1);
    delay(500);
    printReturnedData();
    lecteur = 1;  }
    break;

    case 1 :
    if (potar < 400)
    {//Serial.println("2");
    lecteur = 2;}
    break;

    case 2 :
    if (potar > 700)
    {Serial.println("Play 2");
    SpecifyMusicPlay(2);
    delay(500);
    printReturnedData();
    lecteur = 3;  }
    break;

    case 3 :
    if (potar < 400)
    { lecteur = 0; }
    break;   
   }
   

}


Problème : aucune réaction du Grove, malgré la LED verte allumée (carte SD ready) avec un casque stéréo branché dessus. Côté audio tout est OK car j'entends un petit "tic" à la mise sous tension du Grove.

Ne pouvant lire le flux entrant dans le Grove, j'ai connecté sur le premier Mega un second Mega en lieu et place du Grove, et écrit un sketch d'écoute et d'affichage sur le moniteur du flux reçu

Tout d'abord en string complète avec détection de nouvelle ligne, puis caractère par caractère.

C'est le calme plat ... en string : le blanc éblouissant, et caractères : une cascade de "-1", caractère Ascii nul.

Force est de constater que les commandes élaborées par la bibliothèque ne passent pas.

Aurais-je raté quelque chose ???
Merci d'avance pour votre aide !!!
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Aug 24, 2017, 07:21 pm
--> vérifiez la doc de configuration (http://wiki.seeedstudio.com/wiki/Grove_-_Serial_MP3_Player)

Quote
Support FAT16 and FAT32 file system
SD Card: micro SD Card(≤2GB)
vous avez bon sur sur le format de la carte SD mais la votre est trop grosse, il faut une 2GB max


-----
Une fois résolu ce soucis, avant d'aller plus avant, essayez leur programme d'exemple (modifié un peu ci dessous) et bien sûr avec votre librairie modifiée, en réglant votre console série à 115200 bauds et en n'envoyant ni \r ni \n  (pas d fin de ligne) essayez le code suivant, tapez 1 et validez par exemple pour appeler SpecifyMusicPlay(1) et vous devriez entendre de la musique... sinon c'est qu'il y a un truc qui cloche


Code: [Select]
#include <MP3Player_KT403A.h>

HardwareSerial mp3 = Serial3;

void setup()
{
  Serial.begin(115200);

  mp3.begin(9600);
  delay(100);

  SelectPlayerDevice(0x02);       // Select SD card as the player device.
  SetVolume(0x0E);                // Set the volume, the range is 0x00 to 0x1E.
}

void loop()
{
  char recvChar = 0;
  if (Serial.available()) {
    recvChar = Serial.read();

    Serial.print("received: "); Serial.println( recvChar );

    switch (recvChar) {
      case '1':
        SpecifyMusicPlay(1);
        Serial.println("music index to play: 1");
        break;
      case '2':
        PlayPause();
        Serial.println("Pause the MP3 player");
        break;
      case '3':
        PlayResume();
        Serial.println("Resume the MP3 player");
        break;
      case '4':
        PlayNext();
        Serial.println("Play the next song");
        break;
      case '5':
        PlayPrevious();
        Serial.println("Play the previous song");
        break;
      case '6':
        PlayLoop();
        Serial.println("Play loop for all the songs");
        break;
      case '7':
        IncreaseVolume();
        Serial.println("Increase volume");
        break;
      case '8':
        DecreaseVolume();
        Serial.println("Decrease volume");
        break;
    }
  }
}
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: jackjean on Aug 25, 2017, 02:01 pm
Merci pour votre réponse rapide, ça aide vu le peu de forums traitant du sujet...

La raison du choix de la taille de ma carte SD était la suivante : Module acheté sur Amazon et de version différente  (https://www.amazon.fr/gp/product/B01C5RRRVA/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1)de celle décrite dans la page de votre lien.

voici ses spécifications :
Quote
Specification:

Input: 5V(DC)
Operating current (without signal output state): less than 15 mA
Operating current (with signal output state): less than 40 mA
Chip: KT403A
Chip LDO output voltage: 3.3 V
Chip output current: 100 mA(at Max.)
File formats supported: MP3, WAV, WMA
Maximum memory supported for SD card: 32 GB
Sampled rate : 8/11.025/12/16/22.05/24/32/44.1/48 (KHz)
Je vais tout de même acheter une carte de 2Go pour lever le doute et reviendrai confirmer ici.

Autre point (question) :

Quote
en réglant votre console série à 115200 bauds et en n'envoyant ni \r ni \n  (pas d fin de ligne)
en quoi le choix de vitesse de transmission de la console série interviendrait sur le fonctionnement du sketch ?
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Aug 25, 2017, 02:14 pm
parce-que dans le sketch j'ai mis Serial.begin(115200); donc les commandes que vous envoyez depuis la console série doivent correspondre à ce débit, idem pour l'affichage de Serial.print()

Ok pour la SD si leur doc le dit ça doit être vrai :)
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: jackjean on Aug 25, 2017, 10:41 pm
Quote
parce-que dans le sketch j'ai mis Serial.begin(115200);
:)  :)  :)  Si ce n'est que ça, ça me rassure, mais j'aurais pu aussi modifier votre sketch  :)  :)  :)
Bref, j'ai conservé le 115200 ... et adapté a console.

Par acquis de conscience, et avant de recevoir ma nouvelle SD2Gb, j'ai réussi à réduire la taille de la 4Gb avec Acornis Disk Director.

Comme pressenti, pas d'amélioration, mais un phénomène qui m'avait échappé précédemment :
après avoir répété 6 fois le choix 1 (comme avant, les 6 séquences de potar), je remarque curieusement un freeze du sketch au 7ème essai, comme le montre le screen suivant :

Quote
received: 1
music index to play: 1
received: 1
music index to play: 1
received: 1
music index to play: 1
received: 1
music index to play: 1
received: 1
music index to play: 1
received: 1
music index to play: 1
received: 1

et là ça bloque ....
j'ai testé les ports 1 et 2 aussi, sans changement...

Un reset autorise de nouveau 6 envois d'ordres, mais toujours pas de son ...

je n'ai jamais encore jamais connu ce phénomène...
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: jackjean on Aug 25, 2017, 10:49 pm
Par second acquis de conscience, j'ai refait la manip avec un autre Mega 2560 : même résultat.
Je sens que mon Grove MP3 a un sérieux blème ...
Qu'en pensez-vous ?
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: J-M-L on Aug 25, 2017, 10:55 pm
Possible mais pas sûr - si vous trouvez une carte 2GB testez avec ça. Éventuellement utilisez la librairie SDfat pour formatter la carte si vous avez un shield SD qui traîne
Title: Re: [RESOLU] Utilisation du module Grove - MP3 v2.0 ?
Post by: jackjean on Sep 03, 2017, 12:11 am
Après avoir enfin reçu ma carte µSD 2Gb, formatée avec SDFat, et chargée avec qq fichiers MP3, le problème reste le même...
Ce blocage après 6 envois de commande me rend perplexe...
j'ai testé une alternance de choix 1 et 2, donc lecture 1, puis pause , etc... 6 fois de suite.
Le blocage se produit de la même façon que dans mes posts précédents et toujours aucun son...

Ce qui est frustrant, c'est qu'aucune LED ne permet de visualiser le flux série reçu par le module.
L'unique LED est sensée clignoter en lecture, s'éteindre en pause ou en absence de carte, et restée allumée dans tous les autres cas...
La mienne reste donc allumée...

Une idée avant le retour au fournisseur ?