2025年4月10日木曜日

ケチって互換DFplayer mini を買ったばかりに...

本来であれば、DFRobot のDFplayer mini を購入すればよいのですが、価格に負けて互換品を購入しました。使用方法は、UART制御でSD内のMP3を再生し、BUSY信号をチェックして再生の完了を確認するようにします。それぞれの接続は基本通りですね

早速、スケッチを記述しますが、動きません。ライブラリは”DFRobotDFPlayerMini”を最初使用していましたが動く気配がありません。調べていくと互換機は、このライブラリでは正常に動作しないという記述を見つけ、”DFPlayer Mini Mp3 by Makuna”などの別ライブラリも試しましたがやはり動作しませんでした。DFplayerのIO_1やIO_2をGNDに接続して、試したところ再生されましたのでモジュールが壊れている可能性は低そうです

そこで互換機に関する内容をネットで検索しまくったところ、初期の互換機と現在の物ではチップが異なっているという記載を見つけました。そこで、互換機のチップを確認するとTD5580Aと記載されていました

ちなみにDFRobot のDFplayer miniは下記になります

そこで互換品のTD5580Aで調べたところ、 SerialMP3と言うライブラリを見つけました。このライブラリは、互換品のチップに合わせて作られているようです。早速、このライブラリを使用してスケッチを記述したところ、簡単に動作しました(5Vを供給しないと再生しません)。なお、MP3ファイルはSDカードの直下に保存して使用しています

#include <M5unified .h>
#include <SerialMP3.h>

#define RX_PIN 22   // RX pin   22
#define TX_PIN 21   // TX pin   21
#define BUSY_PIN 36 // BUSY pin 36

SerialMP3 mp3(RX_PIN, TX_PIN);

void setup() {
  auto cfg = M5.config();
  M5.begin(cfg);

  pinMode(BUSY_PIN, INPUT);

  // put your setup code here, to run once:
  mp3.showDebug(true); // print command send to Serial MP3 Player
  Serial.begin(9600);  // Start serial interface
  mp3.init();          // MP3 Player の祖帰化  
  mp3.setVolume(20);   // ボリューム設定(0-30)
  mp3.play(2); // play exam.mp3
  while(digitalRead(BUSY_PIN) == LOW){
    delay(100);
  }
}

void loop() {
  M5.update(); 
  if (M5.BtnA.isPressed()) {
    mp3.play(1); // play exam.mp3
    while(digitalRead(BUSY_PIN) == LOW){
      delay(100);
    }
  }
  //delay(5000); // wait 2 second
}

正規品を購入していればサクッと動いたのに、ケチったばかりにいらぬ苦労してしまいましたよ

0 件のコメント:

コメントを投稿