Auteur Sujet: Compatibilité PCA9685 et DFPlayer  (Lu 1584 fois)

Beber

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Compatibilité PCA9685 et DFPlayer
« le: mars 15, 2025, 09:47:41 am »
Bonjour,

je pilote des servos pour aiguillage depuis un Arduino Méga à travers 2 cartes PCA9685. Tout fonctionne.
Par contre, lorsque j'ajoute une module DFPlayer, plus rien ne fonctionne.

Ci-dessous le début du code :
// Librairie Servo et extension 16 sorties PWM avec PCA9685 pour piloter les servos
#include <Wire.h>   // bibliothèque I2C
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41);

// Librairie DFPlayer
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial SerialSon(10, 11); // RX, TX  ; à adapter sur Mega
DFRobotDFPlayerMini Son;

...
void setup() {

    // initialisation des ports série
  Serial.begin(9600);
  Serial3.begin(9600);
  SerialSon.begin(9600);


Que se passe-t-il ?
Merci pour votre aide.

bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1158
  • HO avec DCC++
    • Voir le profil
Re : Compatibilité PCA9685 et DFPlayer
« Réponse #1 le: mars 15, 2025, 10:29:44 am »
Il faut que tu modifies les broches du TX et du RX de DF Player.

Sur un Mega, les broches 14, 15, 16, 17, 18 et 19 sont des entrées sorties Serial "hard". En utilisant directement deux de ces boches (sans passer par SoftwareSerial) pour ton DF Player, cela devrait fonctionner.

Christophe

Beber

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Re : Compatibilité PCA9685 et DFPlayer
« Réponse #2 le: mars 15, 2025, 03:04:58 pm »
Merci Christophe, pour cette proposition rapide.

Cependant, aprsè correction du code, ça ne marche toujours pas ; rien ne fonctionne, ni les servos, ni le son.
Le DFPlayer est connecté sur 16-17
Voici le code modifié :
// Librairie DFPlayer

#include "DFRobotDFPlayerMini.h"
DFRobotDFPlayerMini Son;

void setup() {
    // initialisation des ports série
  Serial.begin(9600);
  Serial3.begin(9600);

L'ajout de   Serial2.begin(9600);ne change rien.
La led L clignote par intermittence.

Merci d'avance pour votre aide.


bobyAndCo

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1158
  • HO avec DCC++
    • Voir le profil
Re : Compatibilité PCA9685 et DFPlayer
« Réponse #3 le: mars 15, 2025, 03:22:40 pm »
Dans le setup() tu devrais avoir quelque chose dans ce gout là :

Son.begin(Serial3, /*isACK = */true, /*doReset = */true))

mais tu ne montres pas tout ton code ???

Beber

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Re : Compatibilité PCA9685 et DFPlayer
« Réponse #4 le: mars 15, 2025, 04:03:29 pm »
Désolé.

Voici le code avant void loop :
// ======================================================================
// Programme de gestion du reseau : aiguilles, sons, feux
// ======================================================================

// Librairie Servo et extension 16 sorties PWM avec PCA9685 pour piloter les servos
#include <Wire.h>   // bibliothèque I2C
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);
Adafruit_PWMServoDriver pwm2 = Adafruit_PWMServoDriver(0x41);

// Librairie DFPlayer
//#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
DFRobotDFPlayerMini Son;

// Librairie RFID
#include "SPI.h"
#include "MFRC522.h"

// Déclaration Pin RFID
#define RST_PIN  9 // RES pin
#define SS_PIN  10 // SDA (SS) pin
MFRC522 TAGA(SS_PIN, RST_PIN);
String tagID = "";

// Constantes Servo
#define SERVOMIN  125  //125
#define SERVOMAX  575  //575
#define FREQ  60      // fréquence de puls. : 50 ou 60
#define NBS 2        // nombre de servos maxi 16
int PosA = 60;         // Position A (haut-droite)
int PosB = 130;        // Position opposée
int Vitesse = 50;     // Vitesse de deplacement du servomoteur
int PosI = PosA;
int angle;
int Aiguil;     

// ========== Setup =============
void setup() {

    // initialisation des ports série
  Serial.begin(9600);
  Serial3.begin(9600);
  Son.begin(Serial2, /*isACK = */true, /*doReset = */true);

// Initialisation PWM
  pwm1.begin();
  pwm1.setPWMFreq(FREQ);
  pwm2.begin();
  pwm2.setPWMFreq(FREQ);   

// Setup RFID
  SPI.begin();
  TAGA.PCD_Init();

// Setup son
  Son.volume(20); // Réglez le volume (0 à 30)

}

J'ai intégré votre solution sans trop savoir ce qui en retourne ; je débute en arduino.
Avec cette solution, le premier servo piloté se bloque et tout se bloque.

Encore merci pour votre aide.

trimarco232

  • Sr. Member
  • ****
  • Messages: 357
    • Voir le profil
Re : Compatibilité PCA9685 et DFPlayer
« Réponse #5 le: mars 17, 2025, 11:20:57 pm »
Bonjour,
est-ce que le DFPlayer seul sur le mega , ça fonctionne ?

Beber

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Re : Compatibilité PCA9685 et DFPlayer
« Réponse #6 le: mars 18, 2025, 11:40:35 am »
Bonjour,
oui le DFPlayer marche seul sur Méga. Idem pour le pilotage des servos.
Ce sont les 2 ensembles qui ne fonctionnent plus.

Merci.

trimarco232

  • Sr. Member
  • ****
  • Messages: 357
    • Voir le profil
Re : Compatibilité PCA9685 et DFPlayer
« Réponse #7 le: mars 18, 2025, 02:28:05 pm »
c'est singulier (sans jeu de mot) ; peux-tu mesurer le 5v , avec les servos et le DF en "service" ?

Beber

  • Newbie
  • *
  • Messages: 12
    • Voir le profil
Re : Compatibilité PCA9685 et DFPlayer
« Réponse #8 le: mars 18, 2025, 08:27:20 pm »
Bonsoir,

j'ai bien 5v.
Je précise que DFPlayer marche seul sur méga avec ce code :
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>

DFRobotDFPlayerMini myDFPlayer;

void setup() {
    Serial.begin(115200);       // Moniteur série pour le débogage
    Serial2.begin(9600);        // Communication avec DFPlayer Mini

    Serial.println("Initialisation DFPlayer...");

    if (!myDFPlayer.begin(Serial2)) { 
        Serial.println("Échec de la connexion DFPlayer !");
        while (true); // Bloque le programme si DFPlayer ne répond pas
    }

    Serial.println("DFPlayer initialisé avec succès.");

    myDFPlayer.volume(20);  // Réglage du volume (0-30)
    myDFPlayer.play(2);     // Jouer le premier fichier MP3
}

void loop() {
    // Ajoutez ici vos commandes pour interagir avec DFPlayer
}
donc avec Serial2.begin(9600)

Merci pour votre aide.
Si pas de solution, je déporterai la gestion du son sur un Nano ou Uno.