Probleme vs1053

Bonjour,
J'essaye de faire fonctionner ce module :

il a un emplacement pour carte sd en dessous.
J'ai essayé les exemples de la librairie adafruit-vs1053, j'ai essayé avec un arduino mkr zero, un mkr wifi 1010, un esp32, mais je n'arrive pas à tirer le moindre son de ce module...

Quelqu'un sait comment l'utiliser ?
Evidemment, je ne trouve aucun mode d'emploi de ce module...

Ici la doc du VS1053 et des notes d'application
https://www.vlsi.fi/en/products/vs1053.html


D'autres librairies
https://mpflaga.github.io/Arduino_Library-vs1053_for_SdFat/index.html


Un fil de discussion sur le forum

Merci,
J'ai déjà essayé la librairie vs1053_for_Sdfat, mais sans succès.
J'avais vu la doc du vs1053, mais je cherchais un mode d'emploi un peu plus simple, et pas une datasheet, et pour le esp32, je vais étudier le fil que tu cites.

J'ai essayé l'exemple Mp3PlayerDemo de la bibliothèque arduino-vs1053 avec un esp32.
je remets le code :

/**
  A simple example to use ESP_VS1053_Library (plays a test sound every 3s)
  https://github.com/baldram/ESP_VS1053_Library
  If you like this project, please add a star.

  Copyright (C) 2018 Marcin Szalomski (github.com/baldram)
  Licensed under GNU GPL v3

  The circuit (example wiring for ESP8266 based board like eg. LoLin NodeMCU V3):
  --------------------------------
  | VS1053  | ESP8266 |  ESP32   |
  --------------------------------
  |   SCK   |   D5    |   IO18   |
  |   MISO  |   D6    |   IO19   |
  |   MOSI  |   D7    |   IO23   |
  |   XRST  |   RST   |   EN     |
  |   CS    |   D1    |   IO5    |
  |   DCS   |   D0    |   IO16   |
  |   DREQ  |   D3    |   IO4    |
  |   5V    |   5V    |   5V     |
  |   GND   |   GND   |   GND    |
  --------------------------------

  Note: It's just an example, you may use a different pins definition.
  For ESP32 example, please follow the link:
    https://github.com/baldram/ESP_VS1053_Library/issues/1#issuecomment-313907348

  To run this example define the platformio.ini as below.

  [env:nodemcuv2]
  platform = espressif8266
  board = nodemcuv2
  framework = arduino
  lib_deps =
    ESP_VS1053_Library

  [env:esp32dev]
  platform = espressif32
  board = esp32dev
  framework = arduino
  lib_deps =
    ESP_VS1053_Library


*/

// This ESP_VS1053_Library
#include <VS1053Driver.h>

// Please find SampleMp3.h file here:
//   github.com/baldram/ESP_VS1053_Library/blob/master/examples/Mp3PlayerDemo/SampleMp3.h
#include "SampleMp3.h"

#define UNDEFINED    -1

// Wiring of VS1053 board (SPI connected in a standard way)
#ifdef ARDUINO_ARCH_ESP8266
#define VS1053_CS     D1
#define VS1053_DCS    D0
#define VS1053_DREQ   D3
#endif

#ifdef ARDUINO_ARCH_ESP32
#define VS1053_CS     5
#define VS1053_DCS    16
#define VS1053_DREQ   4
#endif

#define VOLUME  100 // volume level 0-100

VS1053 player(VS1053_CS, VS1053_DCS, VS1053_DREQ, UNDEFINED, SPI);

void setup() {
    Serial.begin(115200);
    // initialize SPI
    SPI.begin();
    player.beginOutput();
    player.setVolume(VOLUME);
}

void loop() {
    Serial.println("Playing sound... ");

    // play mp3 flow each 3s
    player.playChunk(sampleMp3, sizeof(sampleMp3));
    delay(3000);
}

la console m'affiche Playing sound... mais je n'ai aucun son en sortie.
Je me demande si le module n'est pas défectueux.
J'aimerais être sur du câblage, car sur mon module j'ai 10 pins :

  1. 5v
  2. GND
  3. CS
  4. MISO
  5. SI (est-ce que cela correspond bien à MOSI ?)
  6. SCK
  7. XCS
  8. XRESET
  9. XDCS
  10. DREQ

Or dans le code il n'y a que 9 pins, il y a un DCS, cela correspond-t-il au XDCS ? et faut-il connecter XCS ?

Ici J'ai trouvé ce schéma d'interconnexion.

Ils parlent dune librairie sans la nommer et d'une démo "MP3Shield_Library_Demo" qui semble être un fichier que l'on trouve dans la librairie de mpflaga citée plus haut.

j'ai l'impression que ce n'est pas compatible avec les cartes arduino Samd ou l'esp32

Effectivement la librairie utilise un timer et le SPI des AVR.

Peut-être regarder de ce coté

Bon, j'arrive enfin à obtenir du son avec un esp32 et la bibliothèque baldram. le code de test mp3 fonctionne bien, par contre le code de test webradio ne lit pas le flux à la bonne vitesse (beaucoup trop lent).
Maintenant comment jouer un fichier depuis la carte sd du module ?

Dans l'exemple WebRadioDemo.ino de la librairie, dans loop() on lit des morceau de fichier venant d'une url

        uint8_t bytesread = client.read(mp3buff, 64);
        player.playChunk(mp3buff, bytesread);

Je pense qu'il doit être possible de faire la même chose en lisant le contenu d'un fichier, la méthode read() existe dans la librairie sd.

Yes, j'ai réussi à lire un mp3 depuis la carte sd, mais j'ai bien galéré, le module ne détecte pas les micro-sd avec adaptateur, et même avec une carte sd de 4go, ça beugue pas mal, 1 fois sur 2, j'ai du bruit blanc à la place du mp3 attendu, j'ai l'impression qu'il n'est pas très fiable ce module

J'ai la même carte, mais pas eu le temps encore de l'essayer.
Donc si tu pouvais mettre tes schémas de connexion et la programme tester, je suis preneur, pour le mettre de coté :slight_smile:

Voici le code de test, le câblage est dedans, sachant que j'ai utilisé un esp32.

#include <Arduino.h>
//#include <SdFat.h>
#include <SD.h>
#include <SPI.h>

/**
  A simple example to use ESP_VS1053_Library (plays a test sound every 3s)
  https://github.com/baldram/ESP_VS1053_Library
  If you like this project, please add a star.

  Copyright (C) 2018 Marcin Szalomski (github.com/baldram)
  Licensed under GNU GPL v3

  The circuit (example wiring for ESP8266 based board like eg. LoLin NodeMCU V3):
  --------------------------------
  | VS1053  | ESP8266 |  ESP32   |
  --------------------------------
  |   SCK   |   D5    |   IO18   |
  |   MISO  |   D6    |   IO19   |
  |   MOSI  |   D7    |   IO23   |
  |   XRST  |   RST   |   EN     |
  |   CS    |   D1    |   IO5    |
  |   DCS   |   D0    |   IO16   |
  |   DREQ  |   D3    |   IO4    |
  |   5V    |   5V    |   5V     |
  |   GND   |   GND   |   GND    |
  --------------------------------

  Note: It's just an example, you may use a different pins definition.
  For ESP32 example, please follow the link:
    https://github.com/baldram/ESP_VS1053_Library/issues/1#issuecomment-313907348

  To run this example define the platformio.ini as below.

  [env:nodemcuv2]
  platform = espressif8266
  board = nodemcuv2
  framework = arduino
  lib_deps =
    ESP_VS1053_Library

  [env:esp32dev]
  platform = espressif32
  board = esp32dev
  framework = arduino
  lib_deps =
    ESP_VS1053_Library


*/

// This ESP_VS1053_Library
#include <VS1053.h>

// Please find SampleMp3.h file here:
//   github.com/baldram/ESP_VS1053_Library/blob/master/examples/Mp3PlayerDemo/SampleMp3.h
#include "SampleMp3.h"

// Wiring of VS1053 board (SPI connected in a standard way)
#ifdef ARDUINO_ARCH_ESP8266
#define VS1053_CS     D1
#define VS1053_DCS    D0
#define VS1053_DREQ   D3
#endif

#ifdef ARDUINO_ARCH_ESP32
#define VS1053_CS     15
#define VS1053_DCS    16
#define VS1053_DREQ   4
#endif

#define VOLUME  40 // volume level 0-100
#define SD_CS 5


VS1053 player(VS1053_CS, VS1053_DCS, VS1053_DREQ);

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

    // initialize SPI
    SPI.begin();

    Serial.println("Hello VS1053!\n");
    // initialize a player
    player.begin();
    // if (player.getChipVersion() == 4) { // Only perform an update if we really are using a VS1053, not. eg. VS1003
    //     player.loadDefaultVs1053Patches(); 
    // }
    player.switchToMp3Mode(); // optional, some boards require this
    player.setVolume(VOLUME);
    if (!SD.begin(SD_CS)) {
        Serial.println("Erreur : Impossible d'initialiser la carte SD !");
        while (1); // Bloquer si SD non détectée
    }
    Serial.println("Carte SD initialisée.");
}

void loop() {
    Serial.println("Playing sound... ");
    Serial.println("Lecture d'un fichier depuis la carte SD...");

    if (player.isChipConnected()) {
      Serial.println("connecté");
    }

    File mp3File = SD.open("/0001.mp3");
    if (!mp3File) {
        Serial.println("Erreur : Impossible d'ouvrir le fichier MP3 !");
        delay(3000);
        return;
    }
    
    while (mp3File.available()) {
        uint8_t buffer[32]; // Taille du buffer (peut être ajustée)
        size_t bytesRead = mp3File.read(buffer, sizeof(buffer));
        player.playChunk(buffer, bytesRead);
    }

    mp3File.close();
    Serial.println("Lecture terminée.");
    delay(3000); // Pause avant de rejouer
}

1 Like