ESP8266 mp3 player 音樂播放器

一個夥伴傳來一個用esp8266播放mp3的架構,要我幫忙改成ESP32版本

我的ESP32實做書籍:我出書了 ESP32 物聯網專題
博客來網址:https://www.books.com.tw/products/0010901195


實做說明

一個夥伴傳來一個用esp8266播放mp3的架構,要我幫忙改成ESP32版本,原本我一直以為它是用dfplayer的,沒想到竟然是直接接在esp8266的rx腳位播放,除了SD卡外,沒有外加任何裝置,靠著的是軟體Lib dac做mp3解碼。

查了一下是採用esp8266audio這個lib(這個lib同時適用esp32),在此借花獻佛先提供8266的程式碼及接線方式。

一、材料準備

1.ESP8266任意版本皆可

2.SPI界面SD讀卡機及一片SD卡,像這款: https://goods.ruten.com.tw/item/show?21652913575950

3.內建擴大器喇叭,像是一般的電腦用喇叭即可,主要是因為rx腳位本身沒有電壓輸出,所以不能使用8歐姆那種沒有內建擴大器的speaker

4.各式杜邦線數條

二、硬體接線

1.先將SD讀卡機接在ESP8266的SPI腳位(CS, MISO, MOSI, SCK)

2.將擴大器喇叭的音源正負極同時接在rx上

3.再次提醒,要使用有擴大器的喇叭,將喇叭接上電源

硬體接線圖

三、程式設計

首先至github下載esp8266audio函式庫: https://github.com/earlephilhower/ESP8266Audio

點選右上角Clone or download/Download Zip

github函式庫下載位置

下載完畢後,選擇草稿碼/匯入程式庫/加入.Zip程式庫

匯入程式庫

在開啟視窗中選擇剛剛下載的ESP8266Audio-master.zip,再選開啟即可完成匯入功能。

完成程式庫匯入後,我們將一首mp3檔案複製到sd卡根目錄中進行測試,並命名為「TRACK0.mp3」,後續使用者可自行於程式中更改檔案名稱。

以下範例程式修改於範例程式,開機後會直接開啟TRACK0.mp3進行播放。

結論是:音效品質普,小聲不暴音,但偶爾會有雜音

#include "AudioFileSourceSD.h"
#include "AudioFileSourceID3.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2SNoDAC.h"
#include "SD.h"
#include "SPI.h"

AudioGeneratorMP3 *mp3;
AudioFileSourceSD *file;
AudioOutputI2SNoDAC *out;
AudioFileSourceID3 *id3;
uint32_t Size = ESP.getFreeHeap();
void setup() {
  Serial.begin(115200);
  delay(1000);
  Serial.print("Initializing SD card...");
  if (!SD.begin(D3))
  {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");
  delay(100);
  file = new AudioFileSourceSD("/TRACK0.mp3");

  out = new AudioOutputI2SNoDAC();
  mp3 = new AudioGeneratorMP3();
  mp3->begin(file, out);  

}

void loop() {
  if (mp3->isRunning()) {
    if (!mp3->loop()) {
        mp3->stop();
        delete file;
        delete mp3;
        mp3 = new AudioGeneratorMP3();
        file = new AudioFileSourceSD("/TRACK0.mp3");
        mp3->begin(file, out);
        Serial.println(Size);
    }
  } else {
    Serial.printf("MP3 done\n");
    delay(1000);
  }

}

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *