DF Player Mini con comunicación NeoSWSerial

Hola a todos,

A raíz de problemas que tuve entre las librerías "SoftwareSerial.h" y "PinChangeInterrupt.h", comencé a utilizar para las comunicaciones la librería "NeoSWSerial.h".

Estaba preparando un código con el módulo DF Player Mini, pero tengo problemas utilizando la librería "NeoSWSerial.h".

Este es el código que me da errores:

#include "Arduino.h"

#include <NeoSWSerial.h>
#include "DFRobotDFPlayerMini.h"

int pinRX = 10;
int pinTX = 11;

NeoSWSerial mySoftwareSerial(pinRX, pinTX);
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

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

  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));

myDFPlayer.play(1);
  
}
 
void loop()
{
 
 }

Y los mensajes que recibo en el Serial Monitor son:

Unable to begin:
1.Please recheck the connection!
2.Please insert the SD card!

Sin embargo, si cambio de librería a "SoftwareSerial.h" funciona correctamente:

#include "Arduino.h"

#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"

int pinRX = 10;
int pinTX = 11;

SoftwareSerial mySoftwareSerial(pinRX, pinTX);
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);

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

  Serial.println(F("DFRobot DFPlayer Mini Demo"));
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
  
  if (!myDFPlayer.begin(mySoftwareSerial)) {
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true){
      delay(0); // Code to compatible with ESP8266 watch dog.
    }
  }
  Serial.println(F("DFPlayer Mini online."));

myDFPlayer.play(1);
  
}
 
void loop()
{
 
 }

¿Alguien sabe por qué?

Es simple curiosidad, puedo utilizar SoftwareSerial.h y problema resuelto, pero me gustaría saber por qué no funciona con NeoSWSerial.h

Gracias,
Jose

Has la prueba de iniciar el reproductor con

if (!myDFPlayer.begin(mySoftwareSerial, false)) { 

aunque no se si resolverá el problema (y no tengo como probarlo).

Estuve buscando a ver si podía encontrar una explicación a la incompatibilidad pero la verdad que la documentación de la librería DFRobotDFPlayerMini es prácticamente nula.

Pues sí, no sé por qué pero así sí que funciona.

Muchas gracias!

Al parecer algunos DFplayer "genéricos" devuelven incorrectamente la respuesta a los comandos.
El 2do. parámetro en false fuerza a que la librería no haga caso a la respuesta errónea.

¿Por qué afecta a una librería y no a la otra?
Ni idea. :grimacing:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.