[ Accueil ] [ CONTACT ] [ PLAN du Site ] [ RCNV ] [ Publications ] [ Chantiers Bateaux ] [ Technique Modélisme ] [ Electronique ] [ Radios Vintage ] [ Multi-Switch ] [ Vrac ] [ Astuces ] [ Liens ] [ Base ] [ Compteur ]
 

         ... rgl

 

Serial MP3 Player

Donnez la parole à votre MicroContrôleur !

 
Le module SPE035 de chez Picaxe

(c)  R.LEGAT 

 

SOMMAIRE:

01 -  Introduction - Présentation - Généralités

02 -  Réalisation d'une carte complète - MP3 Reader/Player

03 -  Les pins de contrôle du Serial DF Player Mini

04 -  Connexions externes

05 -  Protocole et format de la communication Série

06 -  Commandes Série

07 -  Structure des répertoires de stockage: MP3, ADVERT, Répertoires multiples

08 -  Exécution des fichiers sonores

09 -  Réalisation et enregistrement des messages vocaux

10 -  Application: Horloge parlante avec DS1307 sur module Datalogger

 

 

 

      Introduction - Présentation - Généralités

C'est avec un certain intérêt que je me suis penché sur un article concernant le board SPE035 de chez Picaxe.

Nos réalisations peuvent déjà communiquer avec nous par l'intermédiaire d'un écran classique LCD / OLED ou graphique, mais de là envisager qu'elles puissent désormais nous "parler" ouvre assurément des perspectives particulièrement attrayantes autant qu'amusantes !

Ce board n'inclut rien d'autre que trois micro-switchs poussoir, une résistance et une capa, un "HP piezo" et ... un petit module extraordinaire, qu'on peut aussi trouver pour moins deux Euros là où vous savez, sous la référence "DF Player Mini"  ;)

Ce "DF Player mini" est un lecteur de fichiers MP3, consistant en un mini board, de 16 pins, qui comprend un lecteur de micro-SD card et les circuits électroniques de gestion, y compris un petit amplificateur BF de 3W permettant d'y raccorder directement un HP de 8 ohms pour un rendu immédiat en Monophonique.
Il intègre un équalizer à 6 fonctions préprogrammées, une gestion programmable du volume à 30 positions, une gestion de la sélection des fichiers à lire par boutons et est même pourvu d'une sortie stereo à brancher sur un ampli externe ou des écouteurs.

Les fichiers audio peuvent être classés dans plusieurs répertoires différents qui prennent place dans une Micro-SD Card de maximum 32G.
Nous verrons, plus loin, les spécificités de ces répertoires et la manière d'y accéder pour faire appel aux fichiers sonores.

Mais... il donne surtout accès à tous ces réglages par la mise à disposition d'un port Série facilement exploitable par nos fidèles MicroContrôleurs !

Enfin, la platine du module Picaxe SPE035 permet, à la position "A", l'utilisation initiale du "DF Player Mini" (ou clône compatible comme le BY-TF-16P, DFR 0299, ...) mais aussi, en position "B", des modules de type "BY001-16P".
  Dans ce dernier cas, une légère modification du module est cependant nécessaire par le retrait des trois résistances notées "A-B-C".

NOTE:    Il est à retenir qu'il existe plusieurs variantes, ou dénomination, de ces divers petits Modules MP3 Série:
                       
DFPlayer Mini
                       BY-TF-16P
                       
MP3-TF-16P
                       DFR 0299
                       BY8001-16P
                       FN-M16P
                       
FN-M10P, ...

      Pour chacune de ces familles, il peut exister quelques différences de codes de programmation et de gestion des répertoires de stockage !
        Les DataSheets étant souvent des traductions issues de documents chinois, des imprécisions, voire des erreurs et des omissions, subsistent généralement,
        qu'il faudra alors lever par des tests personnels .

                                                 

 DF Player Mini DFR 0299 (clone: BY-TF-16P)                        ( BY8001-16P )                                                                                                 FN-M16P

 

COMPARATIF des deux circuits prévus pour le Module Picaxe SPE035:

            

                                                      Schéma du DFPlayer. L'ampli de 3W est un 8002-8S, compatible LM4871

 

Le coeur du système:  (DFPlayer Mini et MP3-TF-16P)

 

                                                                          Notez que tous les ports ne sont pas utilisés par le DFPlayer (mémoire 24C52, ...)

 

La carte SPE035 est livrée avec un DFPlayer Mini 

Cette carte ne convient cependant pas aux module MP3 avec port SPI, tels que les WTV020M01 ou WDV020-SD-16.

         

 

 

Pilotage du Module SPE035

  
                                                                                         Exemple de pilotage du module SPE035 par un Picaxe 20X2

 

      Réalisation d'une carte complète - MP3 Reader/Player

Voici la carte proto que j'ai conçue pour une pincée d'€uros !  Elle est prévue pour le module "DF Player Mini / BY-TF-16P".

Elle permet la lecture d'une carte Micro-SD jusqu'à 32GB ou d'une clé USB.

On y trouve ainsi:
   - un Piezo passif, de 22mm
   - deux pinheaders pour le raccordement d'un HP de 8 ohm/3W
   - deux cavaliers Jumper pour connecter/déconnecter HP externe et piezo
   - un jack 3,5mm pour sortie stereo vers écouteurs ou amplification stereo externe
   - 3 pinheaders pour sortie vers ampli stereo
   - 1 connecteur 5 pins pour la communication Série et l'alimentation (Busy, TX reader, RX reader, Vcc, Gnd)
   - 3 mini-poussoirs de contrôle manuel (Play, >>/+, <</-)
   - Un connecteur USB A pour Clé USB "Memory Stick"

Le module DF Player est surélevé et enfiché dans des connecteurs Pinheaders Femelles

Note: La broche TX du MP3 Reader doit se connecter à la broche RX de votre MCU et ... la broche RX du MP3 Reader à la broche TX du MCU !

      

                      
                                                            Réalisation d'une carte complète avec embase pour clé USB

 

Et c'est alors qu'on trouve ce même type de carte complète pour...  1 Euro !!!

                            

                                                                     TF card U disk MP3 Format decoder board amplifier decoding audio Player module

                                 Une petite adaptation sera cependant nécessaire pour accéder au port série et à la broche Busy ...

      

 

 

     Les pins de contrôle du "Serial DF Player Mini" 
 

Sur le board SPE035, se trouve un connecteur identifié "H1".

On y retrouve les signaux: Busy, TX, RX,V+ et Gnd.

RX est protégé par une résistance série de 1K. Celle-ci permet d'appliquer, sans danger, un signal de 5V., issu d'un MCU, vers le lecteur MP3 qui serait alimenté en 3,3V.
On  trouve également une petite capacité de 100nF pour découplage de l'alimentation.

IO1, IO2 et ADKEY1 sont raccordés au lecteur par des micro poussoirs reliés à Gnd et permettent de choisir, manuellement, les plages à jouer et le volume.

Un petit haut-parleur de 8 ohms peut être directement raccordé au module. Il restitue alors un signal mono (3W max).

 

  

     Connexions externes

Amplification stereo externe

Il est possible de connecter les sorties DAC_R et DAC_L vers une amplification externe ou des écouteurs.
La platine SPE035 dispose de trois pins alignées dans l'ordre suivant: Gnd - DAC_L - DAC_R.

 

 USB Memory Stick

Il est probable que la plupart des utilisateurs se contenteront d'une carte mémoire micro-SD pour garder la taille physique de l'unité aussi petite que possible.
Toutefois, sachez qu'il est possible de «bidouiller» le PCB (ou en graver un autre proto comme celui-ci présenter ci-dessus) pour connecter une "clé" mémoire USB
en lieu et place de la carte micro-SD, si vous le souhaitez !

Les 4 connexions requises pour une prise USB 'Type A' (nécessaire pour accepter le memory stick) sont:

                                           

NOTE:
Lors de l'utilisation d'une clé USB, la commande d'initialisation (0x09) envoyée au début du programme doit maintenant utiliser la valeur de données 00 01 (Select USB) au lieu de
00 02 (Select microSD).
Mais nous allons voir, en détail, ces commandes un peu plus bas ...

Enfin la structure des répertoires et la dénomination des fichiers sont semblables à celle des cartes TF Micro_SD (Vos plus bas)

 

     Protocole et format de la communication Série

Ce petit circuit est capable de gérer une communication série de très haute qualité lui permettant un usage dans le domaine industriel. (automobiles, station de péage, guide d'instructions d'appareil, audio-guides, alarmes de pannes, d'incendie ou de sécurité publique, message de radiodiffusion automatique,  ..., ...)

Cette communication serait optimisée en prévoyant la gestion d'un checksum, le contrôle et la gestion des erreurs, et d'autres mesures pour renforcer considérablement la stabilité et la fiabilité de la communication qui s'établit à une vitesse de 
9600 Bauds, Data bits: 1, Checkout: None, Flow Control: None.

  

Certains DataSheets font mention d'un CheckSum dans la suite des données Série.

  Cependant, le module semble ignorer totalement ce CRC et ne se soucie donc pas qu'il soit donné ou non !? 

( Peut-être si on fixait Len = à 8, mais tous les datasheets ne semblent pas s'accorder sur la formule du CRC !!?)

 Par conséquent, nous ne l'intégrerons pas dans nos codes programmes et cela ne posera pas de problème.

          PICAXE serout setting: T9600_8

La commande Série consistera donc en une suite de 8 octets dont il ne faudra déterminer que 3 valeurs, les autres restant constantes.

 

     Commandes Série

 Conformément à ce qui vient d'être exposé ci-dessus, ce tableau ne reprendra que les 3 valeurs variables.

    DFPlayer Mini Command set

All commands to be sent in Hexadecimal format

$01    $00  $00    Next
$02    $00  $00    Previous
$03    $nn  $nn   Specify FAT track 0000-0BB7 (0 - 2999)
$04    $00  $00    Increase volume
$05    $00  $00    Decrease volume
$06    $00  $vv    Volume, vv=00-1E (1E=full volume) (0 - 30)

$07    $00  $00    Specify EQ Normal
$07    $00  $01    Specify EQ Pop
$07    $00  $02    Specify EQ Rock
$07    $00  $03    Specify EQ Jazz
$07    $00  $04    Specify EQ Classic
$07    $00  $05    Specify EQ Base

$08    $00  $00    Playback mode normal
$08    $00  $01    Playback mode repeat folder
$08    $00  $02    Playback mode repeat single
$08    $00  $03    Playback mode repeat random
$08    $00  $nn    Repeat play FAT file number nn=01-FF (1 - 255) 

$09    $00  $01    Source is USB-Disk
$09    $00  $02    Source is TF (microSD) Card
$09    $00  $03    Source is Aux (Not Used)
$09    $00  $04    Source is PC (Debug Mode)
$09    $00  $05    Source is Flash memory
$09    $00  $06    Source is Sleep Mode

$0A    $00  $00   Stand by (Enter Sleep Mode)
$0B    $00  $00   Normal working (Exit Sleep Mode)
$0C    $00  $00   Reset module
$0D    $00  $00   Resume play (un-pause)
$0E    $00  $00   Pause
$0F    $ff    $tt     Play from folder ff=01-63, track tt=01-FF    (Folder=1 - 99, Track = 1 - 255)

$10    $00  $vv    Volume gain, vv=00-1F  (0 - 31)
$10    $01  $vv    Open volume adjust, vv=00-1F  (0-31)

$11    $00  $00    Repeat Play Off (Normal Mode)
$11    $00  $01    Repeat Play On (Next Track to be played loops) 

$12    $tt    $tt      Play from MP3 folder, track tt=0001-270F           (0 - 9999)
$13    $tt    $tt      Play from ADVERT folder, track tt=0001-270F  (0 - 9999)

$14    $ft    $tt      Play from folder f=1-F, track ttt=001-3E7     (Folder= 1 -15, Track= 1 - 999)

$15    $00  $00    Stop ADVERT, resume original track
$16    $00  $00    Stop

$17    $00   $ff     Repeat Playback in folder ff. (0x16 to stop)

$18    $00   $00   Shuffle All Tracks. (0x16 to stop)

$19    $00   $00   Start looping of the currntly playing track
$19    $00   $01   End looping of currently playing track

$1A    $00   $00  Cancel Mute (Enable DAC)
$1A    $00   $01  Mute (Disable DAC, Make DAC High-Z)

 

vv =  volume
ff   =  folder
tt   =  track
nn = FAT file number  * 

* Quand vous poussez sur le bouton Next, le lecteur ne lit pas le nom du fichier (0003.mp4, 0004.mp3, ...) mais il prend en compte le numero d'ordre de ce fichier sur la FAT !
    Vous ne passerez donc pas nécessairement du fichier 0003.mp3 au 0004.mp3 en poussant sur ce switch !
    Le numéro Fichier FAT représente l'ordre dans lequel les fichiers ont été enregistrés sur la SD_Card.
    Sachez toutefois qu'il existe des programmes qui permettent de réordonner les numéros de fichier FAT (FatSorter, ...) 

 

     Structure des répertoires de stockage

Les fichiers peuvent avoir le format .Mp3 ou .Wav et être ordonnés de différentes manières.

1) Répertoire \MP3

Ce répertoire est le répertoire par défaut.
Le nom des fichiers dans ce répertoire doit commencer par 4 caractères numériques.
Le premier fichier doit se nommer 0001.mp3 (ou .wav) et, ensuite, 0002.mp3, 0003.mp3, ...

Notez que le MP3 player ne reconnait que les 4 premiers caractères du nom du fichier.
Comme il ignore totalement les "extra-caractères" placés après ces 4 premiers caractères numériques;  il est ainsi possible d'ajouter le titre de la plage enregistrée.
   Exemple: \MP3\ 0001 - Initialisation Système.mp3
                    \MP3\ 0002 - Bienvenue.mp3

On peut donc placer jusqu'à 9.999 messages (0001 à 270F) dans le folder \MP3.

Il faut envoyer la commande 0x12 pour jouer une plage placée dans le répertoire par défaut  \MP3.

2) Répertoire \ADVERT 


Un message placé dans le répertoire \ADVERT a la particularité de pouvoir être lancé alors qu'une autre plage .Mp3 est déjà en cours d'exécution !
La plage en cours de diffusion peut provenir du répertoire MP3 ou d'un des 99 répertoires multiples.

Prenons l'exemple d'une plage "normale" du répertoire MP3 qui a été lancée par la commande 0x12.
Pendant que celle-ci joue, un message d'avertissement peut être démarré avec la commande 0x13.
La plage "normale" sera arrêtée temporairement durant le temps d'exécution du message d'avertissement.
Une fois celui-ci terminé, la plage normale reprendra sa diffusion.

On imagine ici l'utilité de ce répertoire pour lancer tout message d'alerte qui sera immédiatement diffusé. *

Les commandes de contrôle de ce répertoire sont:
    Play Advert message : 0x13
    Stop Advert Message: 0x15

De la même manière que le fichier défaut \MP3, on peut aussi placer jusqu'à 9.999 messages prioritaires,  (0001 à 270F) d'avertisssement ou d'alerte.

Ici aussi, seuls les 4 premiers caractères étant reconnus, il sera donc possible d'y ajouter une information relative à la nature ou au nom du message.
   Exemple: \ADVERT\0123 - Alarme température processeur.mp3


*
Note:

Un fichier Advert ne pourra être lancé, et entendu, qu'à la condition qu' un autre fichier soit déjà en cours de lecture !
Si vous exécutez la commande 0x13 alors qu'aucun fichier n'est en cours de diffusion, le fichier Advert ne sera pas exécuté.

Cela signifie que si vous voulez impérativement exécuter un fichier Advert, pour signaler une alarme par exemple, il faudra s'assurer qu'un autre fichier est bien en cours de diffusion.

Si ce n'est pas le cas, situation la plus probable, il y a un moyen très simple de régler cette situation.

Si aucun fichier n'est en cours de diffusion, la solution consiste à envoyer :
    
- 1) un fichier "muet" constitué de quelques vides sonores et ne durant que deux ou 3 secondes. Il sera stocké dans le répertoire \MP3 et pourrait s'appeller 0001 - Advert Calling.mp3
    - 2) le fichier d'alerte choisi dans le répertoire Advert.

Si aucun fichier n'est en cours de diffusion, lancer un fichier Advert nécessitera alors d'utiliser les deux commandes successives suivantes:


              Cmd = $12 : Arg = 0001 : Gosub Send 
' Lancement du fichier "muet"       ---> 0001 - Advert Calling.mp3
              Cmd = $13 : Arg = 0003 : Gosub Send  ' Lancement du fichier ADVERT  ---> 0003 - MCU Heat Alarm.mp3

 
Mais si un fichier "normal" était en cours de diffusion, le fait de l'arrêter avec le fichier muet implique qu'il ne terminera jamais la fin de son message !

La solution idéale, avant de lancer un fichier Advert, est donc de d'abord vérifier l'état de la broche Busy et le code de lancement d'un Advert devient :


   Advert_Msg = 0003     ' Advert to launch: ---> 0003 - MCU Heat Alarm.mp3

      if Busy_pin <> 0 then   'Nothing playing
        Cmd = $12 : Arg = 0001 : Gosub Send : Pause 10  ' Launch Blank Track for enable Advert Track
     Endif

     Cmd = $13 : Arg = Advert_Msg : Gosub Send  ' Launch ADVERT  ---> 0003 - MCU Heat Alarm.mp3
 

Un fichier Advert peut être arrêté en cours de diffusion avec la commande 0x15 mais cette possibilité ne semble cependant offrir que peu d'intérêt pour nos applications.

Dès l'arrêt d'un fichier Advert, le fichier "normal" qui avait été interrompu reprend son cours, là où il avait été arrêté.

Info: En fait, initialement, le répertoire ADVERT a été conçu dans l'optique de diffuser des spots publicitaires durant la sonorisation musicale continue d'un lieu public tel qu'un commerce, une gare, ...
          
Dans certains datasheets on peut notamment lire le mot "Commercials" en justification de la commande 0x13.

 
3) Répertoires multiples 


Enfin, les fichiers peuvent aussi être répartis dans une série de répertoires ayant la structure suivante:

    \01\001.mp3
    \02\222.wav

Ils doivent ici commencer par 3 caractères numériques.

Par répertoire, les fichiers doivent commencer par 001.mp3 (ou .wav) et se suivre 002.mp3, 003.mp3, ...

Dans ces répertoires multiples, le MP3 Player ne reconnaîtra que les 3 premiers caractères du nom du fichier.
Les "extra-caractères" placés après ces 3 premiers caractères numériques étant ignorés, on pourra aussi y ajouter, en clair, le nom ou la nature de la plage.
   Exemple:   \05\255 - dernier fichier Rep5.mp3

Pour exécuter un fichier stocké dans un tel répertoire, on utilise la commande 0x0F.
L'Argument.MSB précise le numéro du répertoire et l'Argument.LSB précise le numéro du fichier.

On peut créer jusqu'à 99 répertoires (0x01 à 0x63) comprenant, chacun, 255 plages (01 à FF), soit un total de 25.245 plages !


 Le total de ces trois zones de stockage sur une TF SD_Card permet donc de mémoriser jusqu'à 
 45.243 fichiers dans la limite maximale de 32GB
!

  

     Exécution des fichiers sonores

Nous venons de voir où stocker nos fichiers sonores et nous avons vu un aperçu complet et détaillé des multiples commandes disponibles pour les diffuser.

Il faut préciser ici qu'une fois la commande lancée, le microcontrôleur est libre et continue ses tâches le temps de la diffusion.
Il faut aussi savoir que le DFPlayer démarre une plage dès qu'il en reçoit l'ordre.
Ainsi, si un deuxième ordre arrive alors qu'un premier fichier est toujours en cours d'exécution, celui-ci sera interrompu et sa fin sera perdue. (sauf si c'est un fichier Advert qui a été exécuté. Voir ci-dessus)

Il faut donc bien structurer vos programmes et vous assurer qu'il n'y a pas de risque de lancer un nouveau message alors qu'un autre serait encore en cours de diffusion.

On pourrait faire suivre une commande de diffusion d'un fichier par une pause égale à la durée du message.
Mais retenez que les pauses immobilisent le Microcontrôleur qui ne peut plus rien faire durant cette période ! 

On peut aussi gérer ce problème en lisant l'état de la pin Busy : tant qu'un fichier est en cours d'exécution, la pin Busy est à l'état Bas. (0 = Playing)

Lors du lancement d'un fichier sonore, on pourra exécuter un test conditionnel sur cette pin et réaliser une boucle de temporisation jusqu'à la fin d'un message qui serait encore en cours.

Mais une boucle de temporisation immobilise aussi le MicroContrôleur durant ce temps !

Qui dit immobilisation, dit qu'un fichier d'alerte ne pourra pas non plus être lancé durant cette période d'attente... à moins d'utiliser une procédure d'Interruption.

 

     Réalisation et enregistrement des messages vocaux

Pour la réalisation des fichiers sonores, il y a bien sûr l'enregistreur du système installé sur votre PC, utilisant un microphone.

Mais, à moins d'avoir une voix et une diction parfaite, dépourvue d'accent du terroir ... je ne saurais que trop vous conseiller d'utiliser un programme dit "Text to Speech".

Il s'agit de logiciels présentant une fenêtre dans laquelle vous tapez simplement votre texte. Il interprète alors votre message, avec la voix, le timbre et la vitesse qui vous convient le mieux.

Vos messages auront ainsi une régularité, une qualité et un volume constant.

Il en existe quelques-uns gratuits sur le Web (Balabolka, ...) et d'autres payants, peut-être plus performants, à divers prix.

Pour ma part, je trouve le programme IVONA Reader très appréciable en terme de qualité sonore et de diction claire.

Une recherche sur le Web avec le terme "Text to Speech" devrait faire votre bonheur. Je vous laisse le soin de les rechercher et de les tester.

   

     Application: Horloge parlante avec DS1307 sur module Datalogger

 x

  

     x

 x

 

 
[ Electronique ]
Copyright © Roger LEGAT - 2008 - Tous Droits réservés - (Thds V2)