27 C
Hanoi
Thứ Bảy, Tháng Năm 21, 2022

[Arduino] Mạch MP3 DFPlayer mini

Mạch MP3 Player Mini Arduino (DFP Player)

Mạch phát âm thanh MP3 tích hợp Amply DFPlayer Mini có thiết kế nhỏ gọn được sử dụng để phát âm thanh MP3 qua thẻ nhớ MicroSD giao tiếp với Vi điều khiển qua giao tiếp UART, mạch có tích hợp Amply công suất nhỏ nên có thể kết nối trực tiếp với loa (khoảng 3W) để thực hiện một số ứng dụng về âm thanh đơn giản.. Ngoài ra, ta còn có thể điều khiển chơi MP3 bằng Arduino . Module hỗ trợ giải mã MP3, WAV , WMA.
Thông số kỹ thuật
Tốc độ lấy mẫu (Khz) ; 8 / 11.025 / 12 / 16 / 22.05 / 24 / 32 / 44.1 / 48 với ngõ ra 24bit
Hỗ trợ đầy đủ FAT16, FAT32, thẻ TF hỗ trợ tối đa 32Gb.
Có thể điều khiển qua các chân IO hay chuẩn nối tiếp UART.
Các file âm thanh có thể sắp xếp theo thư mục ( tối đa 100 mục ) , mỗi mục chứa tối đa 255 bài hát.
Có thể điều chỉnh 30 mức Volume và 6 mức EQ.

Tên chân trên DFP Player

Các chế độ hoạt động

  • Sử dụng vi điều khiển giao tiếp với module DFPlayer qua UART (bài viết đề cập chế độ này)
  • Sử dụng 2 chân AD KEY: Mỗi chân AD là chân analog để xác định phím chức năng (mỗi chân phát hiện 10 phím khác nhau)
  • Sử dụng chế độ I/O

Tham khảo chi tiết về các chế độ trong tài liệu DFPlayer Mini Manul tại https://drive.google.com/drive/folders/1Y3voEXO2nh5WgNNVjoBNaw0beL1KwNsL?usp=sharing

Vài sơ đồ kết nối với Arduino

Chia sẻ code trên cộng đồng Arduino

  Arduino Uno với module DFPlayer Mini

Link tải Code+Thư viện SoftwareSerial.h https://drive.google.com/drive/folders/1Y3voEXO2nh5WgNNVjoBNaw0beL1KwNsL?usp=sharing

///              MP3 PLAYER PROJECT
/// http://educ8s.tv/arduino-mp3-player/
//////////////////////////////////////////


#include "SoftwareSerial.h"
SoftwareSerial mySerial(10, 11);
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]

# define ACTIVATED LOW

int buttonNext = 2;
int buttonPause = 3;
int buttonPrevious = 4;
boolean isPlaying = false;



void setup () {

pinMode(buttonPause, INPUT);
digitalWrite(buttonPause,HIGH);
pinMode(buttonNext, INPUT);
digitalWrite(buttonNext,HIGH);
pinMode(buttonPrevious, INPUT);
digitalWrite(buttonPrevious,HIGH);

mySerial.begin (9600);
delay(1000);
playFirst();
isPlaying = true;


}



void loop () { 

 if (digitalRead(buttonPause) == ACTIVATED)
  {
    if(isPlaying)
    {
      pause();
      isPlaying = false;
    }else
    {
      isPlaying = true;
      play();
    }
  }


 if (digitalRead(buttonNext) == ACTIVATED)
  {
    if(isPlaying)
    {
      playNext();
    }
  }

   if (digitalRead(buttonPrevious) == ACTIVATED)
  {
    if(isPlaying)
    {
      playPrevious();
    }
  }
}

void playFirst()
{
  execute_CMD(0x3F, 0, 0);
  delay(500);
  setVolume(20);
  delay(500);
  execute_CMD(0x11,0,1); 
  delay(500);
}

void pause()
{
  execute_CMD(0x0E,0,0);
  delay(500);
}

void play()
{
  execute_CMD(0x0D,0,1); 
  delay(500);
}

void playNext()
{
  execute_CMD(0x01,0,1);
  delay(500);
}

void playPrevious()
{
  execute_CMD(0x02,0,1);
  delay(500);
}

void setVolume(int volume)
{
  execute_CMD(0x06, 0, volume); // Set the volume (0x00~0x30)
  delay(2000);
}

void execute_CMD(byte CMD, byte Par1, byte Par2)
// Excecute the command and parameters
{
// Calculate the checksum (2 bytes)
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
// Build the command line
byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge,
Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte};
//Send the command line to the module
for (byte k=0; k<10; k++)
{
mySerial.write( Command_line[k]);
}
}

Tham khảo http://educ8s.tv/arduino-mp3-player/
https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299
https://www.dfrobot.com/blog-277.html

5 COMMENTS

  1. Wow! This can be one particular of the most helpful blogs We’ve ever arrive across on this subject. Actually Magnificent. I am also an expert in this topic therefore I can understand your effort. Patria Yankee

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Lựa chọn Stack-up cho PCB

Bước 1: Chọn số lượng lớp dự định ban đầu 1 hoặc 2 lớp – Đối với mạch thử nghiệm Sử dụng 1 hoặc 2 lớp...

Via và khả năng mang dòng điện trên PCB

Via bao gồm 3 thành phần: Conductive barrel: Lỗ khoan được mạ dẫn điện Pad: Phần đồng dẫn điện ở 2 đầu của một lỗ via. Antipad:...

Các vấn đề thiết kế PCB mật độ cao HDI

PCB kết nối mật độ cao (High-density interconnect HDI) thể hiện sự tiên tiến của ngành công nghiệp bảng mạch in ngày nay, do...

Ground và vấn đề thiết kế PCB

Các nhà thiết kế layout PCB luôn quan tâm đến những câu hỏi nổi bật này, như làm thế nào để lập kế hoạch...

Recent Comments