samedi 29 juin 2013

Lecture de fichiers mp3 avec Arduino et VS1053


Cet article a été mis à jour le 29 mars 2021.


Le VS1053 est un circuit intégré spécialement conçu pour décoder les principaux formats de fichiers musicaux: Ogg Vorbis, MP3, AAC, FLAC, WMA, MIDI...

Dans cet article, j'explique comment j'ai procédé pour lire les fichiers mp3 stockés sur une carte SD au moyen d'un carte Arduino Uno et d'un module VS1053.




Il existe quelques modèles différents de modules ("breakouts") qui permettent de brancher facilement un VS1053 à un microcontrôleur. Celui que j'ai utilisé a été fabriqué par LCSOFT STUDIO et porte la mention "VS1003/1053 MP3 CODEC".
Adaptation des niveaux logiques

Mêmes s'ils sont munis d'un régulateur de tension qui permet de les alimenter avec une tension de 5 V, le module VS1053 et le module carte SD ont tous les deux un inconvénient un brin irritant lorsqu'on désire les utiliser avec un Arduino Uno: ils sont conçus pour communiquer à un niveau logique de 3,3 V. Pour éviter des les endommager, il est très fortement conseillé d'abaisser à 3,3 V les signaux de 5 V générés par l'Arduino.

Dans un premier temps, j'avais utilisé des diviseurs de tension, tel que je l'avais décrit dans ce premier article sur le VS1053.  Mais avec ce circuit, le lecteur de carte SD cessait souvent de fonctionner aussitôt que j'ajoutais le module VS1053 ...

La stabilité du circuit s'est grandement améliorée lorsque j'ai remplacé les diviseurs de tension par des circuits intégrés 74HC125. Mon circuit est donc le suivant:

Module de carte SD:
SD GND // Arduino GND
SD +5 // Arduino 5 V
SD CS // Conversion 5 V à 3,3 V // Arduino 9
SD MOSI // Conversion 5V à 3,3 V // Arduino 11
SD MISO // Arduino 12
SD SCK // Conversion 5 V à 3,3 V // Arduino 13

Module VS1053:
VS1053 5V // Arduino 5 V
VS1053 DGND // Arduino GND
VS1053 DREQ // Arduino 2
VS1053 XCS // Conversion 5 V à 3,3 V // Arduino 6
VS1053 XDCS // Conversion 5 V à 3,3 V // Arduino 7
VS1053 XRST // Conversion 5 V à 3,3 V // Arduino 8
VS1053 MOSI // Conversion 5 V à 3,3 V // Arduino 11
VS 1053 MISO // Arduino 12
VS1053 SCK // Conversion 5 V à 3,3 V // Arduino 13

Le schéma ci-dessous montre comment je m'y suis pris pour abaisser les signaux de 5 V émis par l'Arduino avec deux CI 74HC125.  Remarquez que j'aurais pu brancher le MOSI des deux périphériques sur la broche 6 du même 74HC125, comme je l'ai fait pour les deux signaux d'horloge SCK, plutôt que les abaisser séparément pour chaque périphérique.  Peu importe l'option choisie, le résultat est le même.



Installation de la bibliothèque VS1053 d'Adafruit

Même si elle a été conçue pour être utilisée avec un autre module VS1053 commercialisé par Adadruit, la bibliothèque VS1053 d'Adafruit fonctionne très bien avec mon module LCSoft Studio.

Seule petite imperfection: dans mon cas, la fonction musicPlayer.begin() ne retourne rien, ce qui devrait arriver uniquement lors de l'échec de l'initialisation du module VS1053. Mais puisque mon module VS1053 se comporte ensuite tout à fait normalement, je me suis contenté d'ignorer cette anomalie (j'ignore s'il s'agit d'un problème exclusif à mon exemplaire, ou si tous les modules VS1053 de LCSoft Studio se comportent de cette façon).

L'exemple ci-dessous joue un après l'autres tous les fichiers mp3 qui se trouvent à la racine de la carte SD. Grâce au moniteur série de l'IDE Arduino, il est possible de monter (+) ou diminuer (-) le volume sonore, de passer à la piste suivante (n), de mettre à pause (p)...

-
-

À lire également:


Yves Pelletier (TwitterFacebook)

4 commentaires:

  1. Bonjour

    J'ai fait exactement le même montage et j'ai visiblement quasiment le même matériel.

    La lecture sur SD fonctionne correctement jusqu'au moment où je branche le VS1053

    Auriez vous une piste svp ?

    RépondreSupprimer
    Réponses
    1. J'ai eu exactement le même problème au début, quand j'utilisais des résistances pour abaisser la tension à 3,3 V. Ce problème a disparu quand j'ai remplacé les résistances par le circuit intégré.

      D'autre part, j'ai souvent lu des commentaires concernant l'importance d'utiliser des fils très courts lorsqu'on branche des périphériques SPI.

      Supprimer
  2. Mes fils ne font pas plus de 10cm pour les plus longs et j'utilise un CI pour abaisser la tension.

    Mais merci tout de même

    RépondreSupprimer
  3. Bonjour,
    je voudrais faire une WebRadio pour radin, sur la base d'un wemos (2.5€), d'un VS1053(6€) et d'une paire d'écouteur(2€) soit 10.5€. comment orienter le flux du wemos sur le VS1053 ?

    RépondreSupprimer